【问题标题】:lm function gives estimate for the y-variable alsolm 函数也给出了 y 变量的估计值
【发布时间】:2017-12-14 02:18:06
【问题描述】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      实际上,使用reformulate()lmdata= 参数制作公式可能会更简洁

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-17
        • 2022-11-09
        • 2020-02-13
        • 2022-07-27
        • 1970-01-01
        • 1970-01-01
        • 2023-02-02
        • 2021-03-03
        相关资源
        最近更新 更多