Ich weiß, dass es einen kleinen Unterschied zwischen $sigma
und dem Konzept von root mean squared error gibt. Ich frage mich also, was ist der beste Weg, um RMSE aus lm
-Funktion inRzu erhalten?
res<-lm(randomData$price ~randomData$carat+
randomData$cut+randomData$color+
randomData$clarity+randomData$depth+
randomData$table+randomData$x+
randomData$y+randomData$z)
length(coefficients(res))
enthält 24 Koeffizienten, und ich kann mein Modell nicht mehr manuell erstellen. __ Wie kann ich die RMSE basierend auf den Koeffizienten von lm
bewerten?
Restsumme der Quadrate:
RSS <- c(crossprod(res$residuals))
Mittlere quadratische Fehler:
MSE <- RSS / length(res$residuals)
Wurzel-MSE:
RMSE <- sqrt(MSE)
Pearson geschätzte Residualvarianz (wie von summary.lm
zurückgegeben):
sig2 <- RSS / res$df.residual
Statistisch gesehen ist MSE der Maximalwahrscheinlichkeitsschätzer für die Restvarianz, ist jedoch voreingenommen (nach unten). Der Pearson-Wert ist der eingeschränkte Maximalwahrscheinlichkeitsschätzer der Restvarianz, der unverzerrt ist.
Anmerkung
x
und y
gegeben sind, entspricht c(crossprod(x, y))
sum(x * y)
, aber viel schneller . c(crossprod(x))
ist ebenfalls schneller als sum(x ^ 2)
.sum(x) / length(x)
ist auch schneller als mean(x)
.Um die RMSE in einer Zeile mit Funktionen von base
zu erhalten, würde ich Folgendes verwenden:
sqrt(mean(res$residuals^2))
Ich denke, die anderen Antworten könnten falsch sein. Die MSE der Regression ist die SSE geteilt durch (n - k - 1), wobei n die Anzahl der Datenpunkte und k die Anzahl der Modellparameter ist.
Wenn Sie einfach den Mittelwert der Residuen im Quadrat (wie andere Antworten vorgeschlagen haben) verwenden, entspricht dies der Division durch n anstelle von (n - k - 1).
Ich würde RMSE von sqrt(sum(res$residuals^2) / res$df)
berechnen.
Die Menge im Nenner res$df
gibt Ihnen die Freiheitsgrade an, die gleich sind wie (n - k - 1). Schauen Sie sich dies als Referenz an: https://www3.nd.edu/~rwilliam/stats2/l02.pdf