почему существует разница в значении R.squared, взятом из регрессионной модели и рассчитанном вручную - PullRequest
0 голосов
/ 09 октября 2018

Два вектора выборки взяты и названы фактическим и предиктором.Я пытаюсь вычислить значение 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 голосов
/ 09 октября 2018

Если ваши вычисления и 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

Еще раз ошибки нет.

...