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

时间:2017-07-10 11:09:28

标签: r linear-regression lm coefficients

我正在尝试运行一个简单的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]))

然后这不会发生。那是为什么?

2 个答案:

答案 0 :(得分:2)

这与R如何存储变量有关。 y_var2是一个字符&#34; y&#34;并将其填入公式中作为字符变量,您希望使用data.table dt中的所有变量进行建模。但是,你必须告诉R你想要评估公式y~。而不是&#34; y&#34;〜。这是R的两个不同表达式。

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

会做到这一点。公式从字符串变量构造一个公式,用于构造表达式。

答案 1 :(得分:2)

实际上,使用reformulate()data= <{1}} lm参数制作公式可能更简洁

tmp2 <- summary(a <- lm(reformulate(x_var2, y_var2), dt))