1 votos

Interpretación de los resultados de una regresión con variable categórica

Estoy ejecutando una regresión en un conjunto de datos con 3 variables: n (un entero), Tipo (una categórica con niveles A, B o C) y valor (una numérica).

El resultado de

lm(Value ~ n + Type, data = dat) %>%
  summary()

es

Call:
lm(formula = Value ~ n + Type, data = dat)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.45715 -0.06768 -0.00845  0.04665  0.63154 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.4496957  0.0350759  12.821  < 2e-16 ***
n            0.0005047  0.0010903   0.463    0.644    
TypeB        2.2800131  0.0346840  65.737  < 2e-16 ***
TypeC       -0.1854407  0.0346840  -5.347 3.86e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1645 on 131 degrees of freedom
Multiple R-squared:  0.9795,    Adjusted R-squared:  0.9791 
F-statistic:  2090 on 3 and 131 DF,  p-value: < 2.2e-16

Si no me equivoco, esto significa que para el tipo B la estimación de n es significativamente mayor que para el tipo A, y para el tipo C es significativamente menor que para el tipo A.

Sin embargo, cuando subconjunto los datos en categorías individuales y hago regresiones separadas:

lm(Value ~ n, data = dat[dat$Type == "A",]) %>%
  summary()

lm(Value ~ n, data = dat[dat$Type == "B",]) %>%
      summary()

lm(Value ~ n, data = dat[dat$Type == "C",]) %>%
      summary()

Recibo

Call:
lm(formula = Value ~ n, data = dat[dat$Type == "A", ])

Residuals:
      Min        1Q    Median        3Q       Max 
-0.136187 -0.061630  0.008786  0.049284  0.153302 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.4090728  0.0223533  18.300   <2e-16 ***
n           0.0022709  0.0008463   2.683   0.0103 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.07373 on 43 degrees of freedom
Multiple R-squared:  0.1434,    Adjusted R-squared:  0.1235 
F-statistic: 7.201 on 1 and 43 DF,  p-value: 0.0103

Call:
lm(formula = Value ~ n, data = dat[dat$Type == "B", ])

Residuals:
    Min      1Q  Median      3Q     Max 
-0.4560 -0.2247 -0.0687  0.1733  0.6256 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 2.715986   0.083074   32.69   <2e-16 ***
n           0.001101   0.003145    0.35    0.728    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.274 on 43 degrees of freedom
Multiple R-squared:  0.002844,  Adjusted R-squared:  -0.02035 
F-statistic: 0.1226 on 1 and 43 DF,  p-value: 0.7279

Call:
lm(formula = Value ~ n, data = dat[dat$Type == "C", ])

Residuals:
      Min        1Q    Median        3Q       Max 
-0.030407 -0.016048 -0.003995  0.014188  0.039227 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.3186009  0.0056277  56.613  < 2e-16 ***
n           -0.0018582  0.0002131  -8.721 4.63e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.01856 on 43 degrees of freedom
Multiple R-squared:  0.6388,    Adjusted R-squared:  0.6304 
F-statistic: 76.06 on 1 and 43 DF,  p-value: 4.627e-11

En otras palabras, para el tipo A la estimación es significativamente superior a 0, para el tipo B no es significativamente diferente de 0 y para el tipo C es significativamente inferior a 0.

Intento conciliar las dos frases siguientes:

  1. Para el tipo B, la estimación de n es significativamente mayor que para el tipo A (a partir de la regresión original)

  2. Para el tipo A, la estimación es significativamente superior a 0, para el tipo B, no es significativamente diferente de 0 (a partir de las regresiones individuales)

¿Cómo pueden ser ciertas ambas afirmaciones?

0voto

Angie Puntos 36

Podemos simular unos datos, con tres pendientes e interceptos diferentes, como tus datos, para el tipo A tenemos intercepto = 0, pendiente = 0, tipo B, intercepto = 3, pendiente = 5 y tipo C, intercepto =6 , pendiente = -4 .

library(ggplot2)
set.seed(222)
dat = data.frame(Type = rep(c("A","B","C"),each=10),n=runif(30))
dat$Value[dat$Type=="A"] = dat$n[dat$Type=="A"] + rnorm(10)
dat$Value[dat$Type=="B"] = 3+ 5*dat$n[dat$Type=="B"]
dat$Value[dat$Type=="C"] = 6 + -4*dat$n[dat$Type=="C"]

ggplot(dat,aes(x=n,y=Value,col=Type)) + 
geom_point() + geom_smooth(method="lm",se=FALSE)

enter image description here

Cuando se ajusta a este modelo:

lm(Value ~ n + Type, data = dat)

Básicamente dice que el valor puede explicarse por el efecto aditivo del tipo y n. Ajusta una pendiente común para n (sin tener en cuenta el tipo) y añade un valor que depende del tipo.

lm(Value ~ n + Type, data = dat)

Call:
lm(formula = Value ~ n + Type, data = dat)

Coefficients:
(Intercept)            n        TypeB        TypeC  
    -0.3142       1.1202       4.6077       3.5252 

Puedes averiguar lo anterior comprobando la predicción.

Si quieres calcular las diferentes pendientes de cada tipo, tienes que hacerlo:

lm(Value ~ n * Type, data = dat)

Call:
lm(formula = Value ~ n * Type, data = dat)

Coefficients:
(Intercept)            n        TypeB        TypeC      n:TypeB      n:TypeC  
    -0.5272       1.5583       3.5272       6.5272       3.4417      -5.5583

Esto ajusta un valor de intercepción para cada Tipo. En este caso, el coeficiente n es el coeficiente para el tipoA y para el tipo B, su coeficiente para n será 1,5583 + 3,4417 = 5 que es lo que hemos simulado. Del mismo modo, para C, será 1,5583 - (-5,5583) = 6.

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