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

R lm函数也给出了y变量的估计值,r,linear-regression,lm,coefficients,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(ge

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

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

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

lm( formula(paste(y_var2,"~.")),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])

我会成功的。公式使用字符串变量构造公式,表达式是使用该字符串变量构造的

实际上,只需使用
reformate()
lm
data=
参数制作公式可能会更干净

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

tmp2实际上,只需使用
reformate()
lm的
data=
参数来制作公式可能会更干净

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