lm 函数也给出了 y 变量的估计值

lm function gives estimate for the y-variable also

我正在尝试 运行 一个简单的 lm 模型。我正在使用以下

dt <- data.table(
  y=rnorm(100,0,1),
  x1=rnorm(100,0,1),
  x2=rnorm(100,0,1),
  x3=rnorm(100,0,1))

y_var2 <- names(dt)[names(dt)%like%"y"]
x_var2 <- names(dt)[names(dt)%like%"x"]

tmp2 <- summary(a <- lm(get(y_var2)~.,dt[,c(x_var2,y_var2),with=F]))
coefs2 <- as.data.table(tmp2$coefficients,keep.rownames = T)

所以最后,coefs2 应该包含估计值、p 值等。但是在 coefs2 的最后一行我也看到了 y 变量。

但是如果我使用

tmp2 <- summary(a <- lm(y~.,dt[,c(x_var2,y_var2),with=F]))

那么这就不会发生了。这是为什么?

这与 R 存储变量的方式有关。 y_var2 是一个字符 "y",您将其作为字符变量填充到公式中,您希望使用 data.table dt 中的所有变量对其进行建模。但是,您必须告诉 R 您希望计算公式 y~。而不是 "y"~。这是 R 的两个不同表达式。

lm( formula(paste(y_var2,"~.")),dt[,c(x_var2,y_var2),with=F])

会成功的。 formula 从构造表达式的字符串变量构造公式。

实际上,只用 reformulate()lm

data= 参数制作公式可能会更清晰
tmp2 <- summary(a <- lm(reformulate(x_var2, y_var2), dt))