我是R工具的新手,在glm()
函数方面遇到了一些问题。我在下面展示了一些数据。当线性预测器仅为x时,glm()
函数工作良好,但一旦我将线性预测器更改为x+x^2,它就开始给我提供与第一个模型相同的结果。代码如下:
model1 <- glm(y ~ x, data=data1, family=poisson (link="log"))
系数(模型1((截距(x0.3396339 0.2565236
model2 <- glm(y ~ x + x^2, data=data1, family=poisson (link="log"))
系数(模型2((截距(x0.3396339 0.2565236
正如你所看到的,x^2没有系数,就好像它甚至不在模型中一样。
lm
和glm
函数对公式有一个特殊的解释(请参阅?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