为什么从回归模型获得并手动计算的R.squared值存在差异

时间:2018-10-09 09:40:52

标签: r statistics linear-regression

获取两个样本矢量,并将其命名为Actual和预测变量。我尝试计算  使用公式[人工方法]得出R平方值,以及其他我从线性回归模型中得出的R平方值,我们看到[0.10]的显着性差异。有人可以帮助我理解这一点吗?

actual <- c(4, 6, 9, 10, 4, 6, 4, 7, 8, 7)
predicted <- c(5, 6, 8, 10, 4, 8, 4, 9, 8, 9)

df <- data.frame(actual , predicted) 

linear_model <- lm(predicted ~ actual , data = df ) 

linear_model

Call:
lm(formula = predicted ~ actual, data = df)

Coefficients:
(Intercept)       actual  
     1.2420       0.9012  

summary(linear_model) 

Call:
lm(formula = predicted ~ actual, data = df)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.3531 -0.7975 -0.3531  1.0512  1.4494 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.2420     1.1957   1.039 0.329319    
actual        0.9012     0.1757   5.129 0.000898 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.118 on 8 degrees of freedom
Multiple R-squared:  0.7668,    Adjusted R-squared:  0.7376 
F-statistic:  26.3 on 1 and 8 DF,  p-value: 0.0008976

error <- predicted  - actual  

rss <- c(crossprod(error))

tss <- c(crossprod(actual - mean(actual)))

1 - (rss / tss)

0.654320987654321

summary(linear_model)$r.squared

0.766784655673544

1 个答案:

答案 0 :(得分:2)

如果您的计算和R不同,请怀疑您的计算。

没有错误,您将名为predicted的变量误认为是预测值。

您将不得不将手工完成的计算与summary中报告的值进行比较。

summary(linear_model)$r.squared
#[1] 0.7667847

现在,首先,正确计算分母TSS

TSS <- c(crossprod(predicted - mean(predicted)))

首先使用模型残差计算r平方。

err1 <- linear_model$residuals
RSS1 <- c(crossprod(err1))
1 - RSS1/TSS
#[1] 0.7667847

如您所见,结果与summary给出的结果相同。

第二种计算r平方的方法,先计算拟合值,然后计算残差。

err2 <- predicted - predict(linear_model)
RSS2 <- c(crossprod(err2))
1 - RSS2/TSS
#[1] 0.7667847

再次没有错误。