Come richiesto, illustrerò usando una semplice regressione usando i mtcars
dati:
fit <- lm(mpg~hp, data=mtcars)
summary(fit)
Call:
lm(formula = mpg ~ hp, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-5.7121 -2.1122 -0.8854 1.5819 8.2360
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 30.09886 1.63392 18.421 < 2e-16 ***
hp -0.06823 0.01012 -6.742 1.79e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.863 on 30 degrees of freedom
Multiple R-squared: 0.6024, Adjusted R-squared: 0.5892
F-statistic: 45.46 on 1 and 30 DF, p-value: 1.788e-07
L' errore quadratico medio (MSE) è la media del quadrato dei residui:
# Mean squared error
mse <- mean(residuals(fit)^2)
mse
[1] 13.98982
L'errore quadratico medio (RMSE) è quindi la radice quadrata di MSE:
# Root mean squared error
rmse <- sqrt(mse)
rmse
[1] 3.740297
La somma residua dei quadrati (RSS) è la somma dei residui quadrati:
# Residual sum of squares
rss <- sum(residuals(fit)^2)
rss
[1] 447.6743
L'errore standard residuo (RSE) è la radice quadrata di (RSS / gradi di libertà):
# Residual standard error
rse <- sqrt( sum(residuals(fit)^2) / fit$df.residual )
rse
[1] 3.862962
Lo stesso calcolo, semplificato perché abbiamo precedentemente calcolato rss
:
sqrt(rss / fit$df.residual)
[1] 3.862962
Il termine errore di prova nel contesto della regressione (e altre tecniche di analisi predittiva) di solito si riferisce al calcolo di una statistica di prova sui dati di prova, distinta dai dati di allenamento.
In altre parole, si stima un modello utilizzando una parte dei dati (spesso un campione dell'80%) e quindi calcolando l'errore utilizzando il campione di controllo. Ancora una volta, illustrerò l'utilizzo mtcars
, questa volta con un campione dell'80%
set.seed(42)
train <- sample.int(nrow(mtcars), 26)
train
[1] 30 32 9 25 18 15 20 4 16 17 11 24 19 5 31 21 23 2 7 8 22 27 10 28 1 29
Stimare il modello, quindi prevedere con i dati di controllo:
fit <- lm(mpg~hp, data=mtcars[train, ])
pred <- predict(fit, newdata=mtcars[-train, ])
pred
Datsun 710 Valiant Merc 450SE Merc 450SL Merc 450SLC Fiat X1-9
24.08103 23.26331 18.15257 18.15257 18.15257 25.92090
Combina i dati originali e la previsione in un frame di dati
test <- data.frame(actual=mtcars$mpg[-train], pred)
test$error <- with(test, pred-actual)
test
actual pred error
Datsun 710 22.8 24.08103 1.2810309
Valiant 18.1 23.26331 5.1633124
Merc 450SE 16.4 18.15257 1.7525717
Merc 450SL 17.3 18.15257 0.8525717
Merc 450SLC 15.2 18.15257 2.9525717
Fiat X1-9 27.3 25.92090 -1.3791024
Ora calcola le statistiche dei test in modo normale. Illustro MSE e RMSE:
test.mse <- with(test, mean(error^2))
test.mse
[1] 7.119804
test.rmse <- sqrt(test.mse)
test.rmse
[1] 2.668296
Si noti che questa risposta ignora la ponderazione delle osservazioni.