R-квадрат в lm() для модели с нулевым пересечением

Я запускаю lm() в R, и вот результаты сводки:

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

и кажется, что это хорошая модель, но если я вычисляю R^2 вручную, я получаю это:

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 ...

person Riccardo Tornaghi    schedule 08.08.2019    source источник
comment
добро пожаловать в СО! Приведите пример ваших входных данных в train, кроме того, откуда вы взяли формулу расчета Р2 вручную?   -  person cccnrc    schedule 08.08.2019
comment
почему вы запускаете модель без перехвата? См. ответ @jludewig   -  person cccnrc    schedule 08.08.2019
comment
Я использовал следующий третий ответ stackoverflow.com/questions/40901445/   -  person Riccardo Tornaghi    schedule 08.08.2019
comment
Потому что с перехватом я получаю R2 0,24752 в сводке (lm())   -  person Riccardo Tornaghi    schedule 08.08.2019
comment
0,24752 — это значение R2, которое вы рассчитали вручную.   -  person Dave2e    schedule 08.08.2019


Ответы (1)


Вы используете модель без перехвата (~ 0 в правой части вашей формулы). Для таких моделей расчет R^2 проблематичен и дает неверные значения. Этот пост очень хорошо объясняет это: https://stats.stackexchange.com/a/26205/99681

person jludewig    schedule 08.08.2019
comment
также stats.idre.ucla.edu/other/mult-pkg/faq/general/ и cran.r-project.org/doc/FAQ/ . Я бы не стал винить в этом R: R^2 в моделях с нулевым пересечением обязательно проблематичен (т. е. есть разные плохие решения, но нет хороших решений) - person Ben Bolker; 08.08.2019
comment
@BenBolker хорошая мысль. Я отредактировал свой ответ, чтобы лучше отразить это - person jludewig; 08.08.2019
comment
Дело в том, что R в квадрате основан на сравнении модели с минимальной подмоделью. В случае, если у модели есть отрезок, логическая подмодель для сравнения — это модель, которая содержит только отрезок, т. е. y ~ 1 в нотации модели R; однако, если модель не имеет точки пересечения, то это больше не подмодель, и используемая логическая подмодель - y ~ 0. Вот почему для R в квадрате необходимы разные формулы. - person G. Grothendieck; 08.08.2019