零截距模型中的R平方

零截距模型中的R平方,r,statistics,linear-regression,least-squares,R,Statistics,Linear Regression,Least Squares,我在R中运行了一个lm(),这是总结的结果: Multiple R-squared: 0.8918, Adjusted R-squared: 0.8917 F-statistic: 9416 on 9 and 10283 DF, p-value: < 2.2e-16 您运行的模型没有截距(公式右侧的~0)。对于这类模型,R^2的计算是有问题的,并且会产生误导性的值。这篇文章解释得很好:欢迎来到SO!在列车中提供您输入数据的示例,此外,您从何处获取“手动R2计算公式”?为什

我在R中运行了一个
lm()
,这是总结的结果:

Multiple R-squared:  0.8918,    Adjusted R-squared:  0.8917 
F-statistic:  9416 on 9 and 10283 DF,  p-value: < 2.2e-16

您运行的模型没有截距(公式右侧的~0)。对于这类模型,R^2的计算是有问题的,并且会产生误导性的值。这篇文章解释得很好:

欢迎来到SO!在
列车
中提供您输入数据的示例,此外,您从何处获取“手动R2计算公式”?为什么运行模型时没有截取?请参见@jludewig answerI,我使用了第三个答案,因为通过截距,我在摘要中获得了0.24752的R2(lm())0.24752是您手动计算得出的R2值。此外,和。我不一定把这归咎于R:R^2在零截距模型中必然是有问题的(即,有不同的坏解决方案,但没有好的解决方案)@BenBolker good point。我编辑了我的答案,以更好地反映这一点:R平方是基于将模型与最小子模型进行比较。在模型有截距的情况下,要与之比较的逻辑子模型是仅包含截距的模型,即R的模型符号中的y~1;但是,如果模型没有截距,那么它就不再是子模型,要使用的逻辑子模型是y~0。这就是为什么R平方需要不同的公式。
model=lm(S~0+C+HA+L1+L2,data=train)
pred=predict(model,train)
rss <- sum((model$fitted.values - train$S) ^ 2)
tss <- sum((train$S - mean(train$S)) ^ 2)
1 - rss/tss
##[1] 0.247238
rSquared(train$S,(train$S-model$fitted.values))
##          [,1]
## [1,] 0.247238
str(train[,c('S','Campionato','HA','L1','L2')])
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   10292 obs. of  5 variables:
 $ S         : num  19 18 9 12 12 8 21 24 9 8 ...
 $ C         : Factor w/ 6 levels "D","E","F","I",..: 4 4 4 4 4 4 4 4 4 4 ...
 $ HA        : Factor w/ 2 levels "A","H": 1 2 1 1 2 1 2 2 1 2 ...
 $ L1        : num  0.99 1.41 1.46 1.43 1.12 1.08 1.4 1.45 0.85 1.44 ...
 $ L2        : num  1.31 0.63 1.16 1.15 1.29 1.31 0.7 0.65 1.35 0.59 ...