【问题标题】:^ symbol in R lm()R lm() 中的 ^ 符号
【发布时间】:2015-06-24 23:21:25
【问题描述】:

在 R 中运行回归:

fit = lm(y ~ x + log(x) + z + log(z) + (z-1)^2, data=data)

我得到高得离谱的 R^2 值。我将 (z-1)^2 替换为我将调用的变量 q,该变量定义为 (z-1)^2,我得到的 R^2 值要低得多。

我现在很清楚 ^ 在 lm() 中不充当指数,但它的作用是什么?我看了这里http://faculty.chicagobooth.edu/richard.hahn/teaching/FormulaNotation.pdf,但我并没有真正理解它。

【问题讨论】:

    标签: r lm


    【解决方案1】:

    在上一个答案的基础上,如果没有 I() 运算符,lm() 不会 interepret 数学运算符进行数学运算。因此,如果没有 I(),“-1”对 lm() 的影响与使用“+0”类似,即不使用“(Intercept)”术语。因此R-squared 的值更高(details here),因为R-squared 计算中的分母变为(yi^2) 而不是(yi - y_bar)^2。下面的代码显示了lm() 计算方式的异同。

    # Create sample dataframe
    x <- 10 + rnorm(100)
    y <- 11 + rnorm(100)
    z <- 12 + rnorm(100)
    df <- data.frame(x,y,z)
    
    (1) 不使用术语“(z-1)
    lm.fit <- lm(y ~ x + log(x) + z + log(z), data=df)
    summary(lm.fit)
    

    # (2) 使用术语“(z-1)^2” 注意:这里,没有“I((z-1)^2)”中的“I”,lm() 函数不会将“-,^”视为算术运算符

    lm.fit <- lm(y ~ x + log(x) + z + log(z) + (z-1)^2, data=df)
    summary(lm.fit)
    

    (3) 在不使用I() 的情况下,lm() 函数将“(z-1)^2”解释为由“*”表示的交互“(z-1)*(z-1)
    lm.fit <- lm(y ~ x + log(x) + z + log(z) + (z-1)*(z-1), data=df)
    summary(lm.fit)
    

    (4a) 如果不使用I(),(3) 交互项可以分解如下:
     lm.fit <- lm(y ~ x + log(x) + z + log(z) + (z-1) + (z-1) + (z-1):(z-1), data=df)
     summary(lm.fit)
    

    (4b) 去掉括号
     lm.fit <- lm(y ~ x + log(x) + z + log(z) + z-1 + z-1 + (z-1):(z-1), data=df)
     summary(lm.fit)
    

    (4c) 只保留“z:-1”字词
     lm.fit <- lm(y ~ x + log(x) + z + log(z) + z:-1, data=df)
     summary(lm.fit)
    

    (4d) 与 (4c) 工作方式相同
     lm.fit <- lm(y ~ x + log(x) + z + log(z) + z-1, data=df)
     summary(lm.fit)
    

    (5) 不使用“-1”,lm() 函数使用“拦截”术语
     lm.fit <- lm(y ~ x + log(x) + z + log(z) + z + z + z:z, data=df)
     summary(lm.fit)
    

    (6) 使用单独的变量执行 lm() 函数之外的数学部分。

    因此拦截包含在lm() 中。

    var_z <- (z-1)^2
    lm.fit <- lm(y ~ x + log(x) + z + log(z) + var_z, data=df)
    summary(lm.fit)
    

    (7) 在lm() 函数中使用I()

    它允许它解释数学运算符来进行数学运算。在这里,拦截包含在lm()中。

     lm.fit <- lm(y ~ x + log(x) + z + log(z) + I((z-1)^2), data=df)
     summary(lm.fit)
    

    【讨论】:

      【解决方案2】:

      术语 (z-1)^2 与交互作用 (z-1)*(z-1) 相同,而不是 (z-1) 的平方幂。 如果您希望公式按字面意思表示,则应使用I()。 您可以查看?I?formula以供进一步参考,

      【讨论】:

      • 是的,那到底是做什么的呢?我不完全理解交互部分以及为什么会夸大 r^2。谢谢。
      • 这对堆栈交换提出了一个非常好的问题:交互在回归中意味着什么。不过,恐怕我不是最有资格充分回答它的人。对不起!
      猜你喜欢
      • 2012-06-11
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2018-02-01
      • 2016-11-01
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多