在 RStudio 的 glm() 中为两个不同的模型获得相同的结果

Getting the same results for two different models in glm() in RStudio

我是 R 工具的新手,在使用 glm() 函数时遇到了一些问题。 我有一些数据显示在下面。当线性预测变量只是 x 时,glm() 函数工作正常,但只要我将线性预测变量更改为 x + x^2,它就会开始给我与第一个模型相同的结果。 代码如下:

model1 <- glm(y ~ x, data=data1, family=poisson (link="log"))

coef(model1) (Intercept) x 0.3396339 0.2565236

model2 <- glm(y ~ x + x^2, data=data1, family=poisson (link="log"))

coef(model2) (Intercept) x 0.3396339 0.2565236

如您所见,x^2 没有系数,就好像它甚至不在模型中一样。

lmglm 函数对公式有特殊的解释(请参阅 ?formula),如果您不期望它,可能会造成混淆。该接口的预期用途是 (w + x)^2 表示 a*w + b*x + c*w*x + d!如果你想抑制它,你需要使用文字函数,I.

model2 <- glm(gear ~ disp + I(disp^2), 
    data = mtcars, family = poisson (link = "log"))
coef(model2)
#  (Intercept)          disp     I(disp^2) 
# 1.542059e+00 -1.248689e-03  6.578518e-07 

换句话说,I 允许您在对 glm 的调用中执行转换。下面是等价的

mtcars1 <- mtcars
mtcars1$disp_sq <- mtcars1$disp^2
model2a <- glm(gear ~ disp + disp_sq, 
    data = mtcars1, family = poisson (link = "log"))
coef(model2a)
#   (Intercept)          disp       disp_sq 
# 1.542059e+00 -1.248689e-03  6.578518e-07