在上一个回答的基础上,如果没有使用
I()
运算符,
lm()
将无法将数学运算符解释为数学运算。因此,如果不使用
I()
,'
-1
' 对
lm()
的影响与使用 "
+0
" 相似,即不使用 "
(Intercept)
" 项。因此,
R-squared
值会更高(
详细信息),因为
R-squared
计算中的分母变为
(yi^2)
而不是
(yi - y_bar)^2
。下面的代码显示了
lm()
计算的相似之处和不同之处。
# Create sample dataframe
x <- 10 + rnorm(100)
y <- 11 + rnorm(100)
z <- 12 + rnorm(100)
df <- data.frame(x,y,z)
不使用术语“
(z-1)
”
lm.fit <- lm(y ~ x + log(x) + z + log(z), data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/TOcV0.webp)
# (2) 使用“(z-1)^2”这个术语
注意:在这里,如果没有“I
”作为“I((z-1)^2)
”,lm()
函数将不会将“-
”、“^
”视为算术运算符。
lm.fit <- lm(y ~ x + log(x) + z + log(z) + (z-1)^2, data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/2zqNm.webp)
(3) 不使用 I()
函数,lm()
函数会将 "(z-1)^2
" 解释为互动项 "(z-1)*(z-1)
",表示为 "*"
lm.fit <- lm(y ~ x + log(x) + z + log(z) + (z-1)*(z-1), data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/evIAP.webp)
(4a) 不使用 I()
,(3) 交互项可以分解如下:
lm.fit <- lm(y ~ x + log(x) + z + log(z) + (z-1) + (z-1) + (z-1):(z-1), data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/OPhEa.webp)
去除括号。
lm.fit <- lm(y ~ x + log(x) + z + log(z) + z-1 + z-1 + (z-1):(z-1), data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/HzbaD.webp)
保留 HTML,英译中:
(4c) 仅保留 "z:-1
" 项
lm.fit <- lm(y ~ x + log(x) + z + log(z) + z:-1, data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/N3yd0.webp)
(4d) works same as (4c)
lm.fit <- lm(y ~ x + log(x) + z + log(z) + z-1, data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/tCfcB.webp)
(5) 不使用“-1”,lm()函数将使用“Intercept”项
lm.fit <- lm(y ~ x + log(x) + z + log(z) + z + z + z:z, data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/oQaMZ.webp)
(6) 使用单独的变量在lm()函数外进行数学运算。
因此,截距由lm()
包含在内。
var_z <- (z-1)^2
lm.fit <- lm(y ~ x + log(x) + z + log(z) + var_z, data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/eTIji.webp)
(7) 在 lm()
函数内使用 I()
:
它允许解释数学运算符进行数学计算。在这里,截距由 lm()
包含。
lm.fit <- lm(y ~ x + log(x) + z + log(z) + I((z-1)^2), data=df)
summary(lm.fit)
![enter image description here](https://istack.dev59.com/P6WUN.webp)