R中的lm和glm函数

机器算法验证 边际效应
2022-03-29 10:19:21

我在 r 中使用glm()as运行逻辑回归

glm(Y ~X1 + X2 +X3, data = mydata, family = binomial(link = "logit"))

意外地,我使用以下方法运行模型lm

lm(Y ~X1 + X2 +X3, data = mydata, family = binomial(link = "logit"))

我注意到模型使用的系数lm()非常接近模型使用的边际glm()(差异为0.005)。

这是巧合还是我可以使用lm()我指定的来估计逻辑回归的边际?

2个回答

如果您查看 R 帮助文档,您会注意到该函数没有family参数lm根据定义,lmR 中的模型(普通线性回归)使用普通最小二乘回归 (OLS) 进行拟合,该回归假定模型的误差项是正态分布的(即family = gaussian),均值为零且具有共同方差。您不能lm使用其他链接功能运行模型(还有其他功能可以做到这一点,但如果您愿意,您就是不能使用lm)。实际上,当您尝试运行lm上面提供的代码时,R 会生成如下警告:

> > Warning message: In lm.fit(x, y, offset = offset, singular.ok =
>     > singular.ok, ...) :   extra argument ‘family’ is disregarded.

glm另一方面,当您使用 拟合模型时,您使用 logit 链接函数指定模型中的误差项是二项式的。这实质上限制了您的模型,使其假设没有恒定的误差方差,并且假设每个观察的误差项只能为 0 或 1。当您使用时,lm您没有做出这样的假设,而是您的拟合模型假设您的错误可以在实数线上取任何值。换句话说,是(假设误差项是正常的)的lm一种特殊情况。glm您完全有可能使用lm而不是得到一个很好的近似值,glm但它可能并非没有问题。例如,您的lm模型中的任何内容都不会阻止您的预测值位于外部y[0,1]. 那么,例如,您将如何处理 1.05 的预测值(或者甚至更棘手的 0.5)?通常选择最能描述您的数据的模型还有很多其他原因,而不是使用简单的线性模型,而不是我在这里重新散列它们,您可以在过去的帖子中阅读它们,例如这个这个,或者也许这一个

当然,如果您愿意,您始终可以使用线性模型——这取决于您在预测中需要有多精确,以及使用可能存在缺陷的预测或估计的后果是什么。

线性回归(lm在 R 中)没有链接函数并假设正态分布。它是广义线性模型(glm在 R 中),它将线性模型推广到超出线性回归假设的范围,并允许进行此类修改。在您的情况下,family参数已传递给方法...并进一步传递给忽略未使用参数的其他方法。所以基本上,你已经对你的数据进行了线性回归。