【问题标题】:incorrect R-squared calculated using linear regression in R [duplicate]使用R中的线性回归计算的不正确的R平方[重复]
【发布时间】:2015-07-20 06:09:20
【问题描述】:

我在 R 中做一个非常简单的线性回归,但计算出来的 R^2 似乎不正确。我所做的回归如下:

data(cats)
fit = lm(Hwts ~ Bwts+0, data = cats)
summary(fit)

我从这个回归中得到的结果如下:

Call:
lm(formula = cats$Hwt ~ cats$Bwt + 0)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4563 -0.9980 -0.1003  1.0044  5.2623 

Coefficients:
         Estimate Std. Error t value Pr(>|t|)    
cats$Bwt  3.90711    0.04364   89.53   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.449 on 143 degrees of freedom
Multiple R-squared:  0.9825,    Adjusted R-squared:  0.9823 
F-statistic:  8015 on 1 and 143 DF,  p-value: < 2.2e-16

计算出的 R-squared 高达 0.9825,但数据上的简单绘图会给您一个直觉,即 R-squared 不可能那么高。如果我使用维基百科给出的公式计算 R 平方,我得到以下结果:

1-sum(residuals(fit1)^2)/sum((cats$Hwt - mean(cats$Hwt))^2)
[1] 0.6459604

这个 0.6459 的 R 平方定义看起来更合理,我发现如果我在回归中允许截距,我会得到一个围绕这个数字的 R 平方:

fit = lm(Hwt ~ Bwt, data = cats)
summary(fit)

Call:
lm(formula = Hwt ~ Bwt, data = cats)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5694 -0.9634 -0.0921  1.0426  5.1238 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -0.3567     0.6923  -0.515    0.607    
Bwt           4.0341     0.2503  16.119   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.452 on 142 degrees of freedom
Multiple R-squared:  0.6466,    Adjusted R-squared:  0.6441 
F-statistic: 259.8 on 1 and 142 DF,  p-value: < 2.2e-16

当我允许或禁止拦截时,为什么 R 平方会变得如此不同?请评论。

【问题讨论】:

    标签: r linear-regression


    【解决方案1】:

    原因是当您拟合没有截距项的模型时,R^2 计算对所有观测值使用 0 的基线预测。结果,相关的R^2计算为:

    library(boot)
    fit <- lm(Hwt ~ Bwt+0, data = cats)
    summary(fit)$r.squared
    # [1] 0.9824721
    1-sum(residuals(fit)^2)/sum(cats$Hwt^2)
    # [1] 0.9824721
    

    基本上,lm 返回的 R^2 与无法访问任何变量的基线模型(在本例中为 Bwt)进行比较。如果您要拟合没有截距的模型,则基线模型必须为所有观察结果预测 0,因为它无法将截距项拟合到训练集的平均结果值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-20
      • 2020-09-20
      • 2018-11-09
      • 2011-08-05
      • 2018-03-16
      • 2020-12-14
      • 1970-01-01
      • 2016-02-12
      相关资源
      最近更新 更多