我正在尝试运行一个简单的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]))
然后这不会发生。那是为什么?
答案 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))