29 votos

Cómo obtener el valor del error medio cuadrado en una regresión lineal en R

Dejemos que un modelo de regresión lineal obtenido por la función R lm quiera saber si es posible obtenerlo por el comando Error Medio Cuadrado.

Tuve la siguiente salida de un ejemplo

> lm <- lm(MuscleMAss~Age,data)
> sm<-summary(lm)
> sm

Call:
lm(formula = MuscleMAss ~ Age, data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-16.1368  -6.1968  -0.5969   6.7607  23.4731 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 156.3466     5.5123   28.36   <2e-16 ***
Age          -1.1900     0.0902  -13.19   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 8.173 on 58 degrees of freedom
Multiple R-squared:  0.7501,    Adjusted R-squared:  0.7458 
F-statistic: 174.1 on 1 and 58 DF,  p-value: < 2.2e-16

Múltiples R al cuadrado es la suma de errores cuadrados? si la respuesta es no podría explicar el significado de Múltiples R al cuadrado y Múltiples R al cuadrado

0 votos

summary(lm)$sigma2

0 votos

No creo que exista un atributo llamado sigma2 . Creo que la forma correcta de obtener el valor es summary(lm)$sigma

38voto

Lekensteyn Puntos 2824

El múltiplo R-cuadrado que reporta R es el coeficiente de determinación que viene dada por la fórmula

$$ R^2 = 1 - \frac{SS_{\text{res}}}{SS_{\text{tot}}}.$$

La suma de los errores al cuadrado está dada (gracias a un responder ) por sum(sm$residuals^2) .

El error medio cuadrático viene dado por mean(sm$residuals^2) . Podrías escribir una función para calcularlo, por ejemplo

mse <- function(sm) 
    mean(sm$residuals^2)

5 votos

+1. Otra solución, basándose sólo en lo que es visible en la salida es sm$sigma^2 * sm$fstatistic[3]/(1+sum(sm$fstatistic[2:3])) . Es decir, a partir de la antepenúltima fila se lee $8.173$ y $58$ df y en la última fila cuenta el número de parámetros ( $1+1$ ), dando $8.173^2\times 58/(1+1+58) = 64.57$ .

11 votos

Antepenúltima es una gran palabra.

1 votos

Como siempre, una forma mucho más ordenada es escribir mse <- function(sm) mean(sm$residuals^2)

3voto

Matt Sach Puntos 992

Otro método sencillo es utilizar el anova función.

Puede obtener el MSE con anova(model)['Residuals', 'Mean Sq']

> print(sprintf("MSE=%0.2f", sum(lmfit$residuals^2)/lmfit$df.residual))
[1] "MSE=0.27"
> print(sprintf("MSE=%0.2f", anova(lmfit)['Residuals', 'Mean Sq']))
[1] "MSE=0.27"

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X