Ejercicio de regresión lineal multiple: El objetivo es utulizar el set de datos de “Prestige” , el cual presenta los resultados de un estudio realizado en Canadá sobre el prestigio de las profesiones.

Prestigio de las ocupaciones canadienses

En este caso práctico trabajaremos con el set de datos de “Prestige” disponible en la librería car del paquete carData.

Descripción

  • El dataset Prestige esta compuesto por 102 observaciones y 6 columnas. Las observaciones son ocupaciones. Este dataset contiene las siguientes columnas:

  • education: Educación media de los titulares ocupacionales.
  • income: Ingreso promedio en dólares.
  • women: Porcentaje de mujeres por ocupación.
  • Prestige: Prestigio de la ocupación, resultado de una encuesta social realizada a mediados de la década de 1960.
  • census: Código ocupacional del censo canadiense.
  • type: Tipo de ocupación. Un factor con niveles: bc, Blue Collar; prof, Professional, Managerial, and Technical; wc, White Collar.

2.1. Cargamos los datos

# Usaremos los datos de Prestige disponibles en la libreria car
library(car)
## Loading required package: carData
# Cargamos los datos
data(Prestige)
# vemos los primeros 5 registros
head(Prestige)
##                     education income women prestige census type
## gov.administrators      13.11  12351 11.16     68.8   1113 prof
## general.managers        12.26  25879  4.02     69.1   1130 prof
## accountants             12.77   9271 15.70     63.4   1171 prof
## purchasing.officers     11.42   8865  9.11     56.8   1175 prof
## chemists                14.62   8403 11.68     73.5   2111 prof
## physicists              15.64  11030  5.13     77.6   2113 prof
# con este comando se puede ver el detalle del dataset
?Prestige
## starting httpd help server ...
##  done

2.2. Exploramos las principales características de los datos

# Vemos la estructura
str(Prestige)
## 'data.frame':    102 obs. of  6 variables:
##  $ education: num  13.1 12.3 12.8 11.4 14.6 ...
##  $ income   : int  12351 25879 9271 8865 8403 11030 8258 14163 11377 11023 ...
##  $ women    : num  11.16 4.02 15.7 9.11 11.68 ...
##  $ prestige : num  68.8 69.1 63.4 56.8 73.5 77.6 72.6 78.1 73.1 68.8 ...
##  $ census   : int  1113 1130 1171 1175 2111 2113 2133 2141 2143 2153 ...
##  $ type     : Factor w/ 3 levels "bc","prof","wc": 2 2 2 2 2 2 2 2 2 2 ...
#Estadísticos principales
summary(Prestige)
##    education          income          women           prestige    
##  Min.   : 6.380   Min.   :  611   Min.   : 0.000   Min.   :14.80  
##  1st Qu.: 8.445   1st Qu.: 4106   1st Qu.: 3.592   1st Qu.:35.23  
##  Median :10.540   Median : 5930   Median :13.600   Median :43.60  
##  Mean   :10.738   Mean   : 6798   Mean   :28.979   Mean   :46.83  
##  3rd Qu.:12.648   3rd Qu.: 8187   3rd Qu.:52.203   3rd Qu.:59.27  
##  Max.   :15.970   Max.   :25879   Max.   :97.510   Max.   :87.20  
##      census       type   
##  Min.   :1113   bc  :44  
##  1st Qu.:3120   prof:31  
##  Median :5135   wc  :23  
##  Mean   :5402   NA's: 4  
##  3rd Qu.:8312            
##  Max.   :9517
# Nombre de las columnas
colnames(Prestige)
## [1] "education" "income"    "women"     "prestige"  "census"    "type"

2.3. Análisis gráfico

Como siempre antes de iniciar con la construcción de los modelos de regresión, es importarte apoyarse en el análsis gráfico para enterder y conocer mucho mejor los datos disponibles, con esto ver si es necesario realizar algun tipo de preprocesamiento de la información.

# Diagrama de dispersión y valores de correlación
library(psych)
## 
## Attaching package: 'psych'
## The following object is masked from 'package:car':
## 
##     logit
pairs.panels(Prestige,gap=0)

#Revisión de la distribución de los datos
attach(Prestige)
## The following object is masked from package:psych:
## 
##     income
## The following object is masked from package:datasets:
## 
##     women
par(mfrow=c(2,2))
hist(prestige, col="blue", breaks=20)
hist(education, col="blue", breaks=20)
hist(income, col="blue", breaks=20)
hist(women, col="blue", breaks=20)

2.4. Análisis de relación de variables

#matriz de correlación
round(cor(x = Prestige[c(4,1,2,3)], method = "pearson"),2)
##           prestige education income women
## prestige      1.00      0.85   0.71 -0.12
## education     0.85      1.00   0.58  0.06
## income        0.71      0.58   1.00 -0.44
## women        -0.12      0.06  -0.44  1.00

Nota: Podemos ver que el prestigio esta relacionado con la educación y con el ingreso

#  Heat maps de la correlación
#install.packages(corrplot)
library(corrplot)
## Warning: package 'corrplot' was built under R version 3.6.1
## corrplot 0.84 loaded
corrplot(corr = cor(x = Prestige[c(4,1,2,3)], method = "pearson"), method = "number")

2.5. Construcción del modelo de regresión multiple

# Construimos un modelo de regresion multiple (variables independientes)
Mod_Mult_1 = lm(prestige ~ education + women, data = Prestige)
summary(Mod_Mult_1)
## 
## Call:
## lm(formula = prestige ~ education + women, data = Prestige)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -28.010  -4.069   1.050   5.027  18.942 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -8.75416    3.54213  -2.471 0.015164 *  
## education    5.42780    0.31612  17.170  < 2e-16 ***
## women       -0.09305    0.02719  -3.422 0.000904 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.652 on 99 degrees of freedom
## Multiple R-squared:  0.7521, Adjusted R-squared:  0.7471 
## F-statistic: 150.2 on 2 and 99 DF,  p-value: < 2.2e-16

El valor de R2 =0.7521 indica que el 75.21% de la variabilidad en la prestige puede ser explicada por educacion y women. también vemos que las variables education y women son significantiva.

# Generamos un segundo modelo de regresion multiple, incluyendo una variable
# adicional (income) al modelo
Mod_Mult_2 <- lm(prestige ~ education + women + income, data = Prestige)
# Revisamos todo lo aprendido
summary(Mod_Mult_2)
## 
## Call:
## lm(formula = prestige ~ education + women + income, data = Prestige)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -19.8246  -5.3332  -0.1364   5.1587  17.5045 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -6.7943342  3.2390886  -2.098   0.0385 *  
## education    4.1866373  0.3887013  10.771  < 2e-16 ***
## women       -0.0089052  0.0304071  -0.293   0.7702    
## income       0.0013136  0.0002778   4.729 7.58e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.846 on 98 degrees of freedom
## Multiple R-squared:  0.7982, Adjusted R-squared:  0.792 
## F-statistic: 129.2 on 3 and 98 DF,  p-value: < 2.2e-16

El valor de R2 =0.7982, mejor que el modelo anterior, indica que el 79.82% de la variabilidad en la prestige puede ser explicada por educacion, income y women. también vemos que las tres variables son significantiva.

2.6. Modelo con todas las variables predictoras

Ahora vamos a probar el modelo con todas las variables predictoras

## Modelo 3 con todas las variables

Mod_Mult_3 = lm(prestige ~., data = Prestige)
summary(Mod_Mult_3)
## 
## Call:
## lm(formula = prestige ~ ., data = Prestige)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -12.9863  -4.9813   0.6983   4.8690  19.2402 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.213e+01  8.018e+00  -1.513  0.13380    
## education    3.933e+00  6.535e-01   6.019 3.64e-08 ***
## income       9.946e-04  2.601e-04   3.824  0.00024 ***
## women        1.310e-02  3.018e-02   0.434  0.66524    
## census       1.156e-03  6.183e-04   1.870  0.06471 .  
## typeprof     1.077e+01  4.676e+00   2.303  0.02354 *  
## typewc       2.877e-01  3.139e+00   0.092  0.92718    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.037 on 91 degrees of freedom
##   (4 observations deleted due to missingness)
## Multiple R-squared:  0.841,  Adjusted R-squared:  0.8306 
## F-statistic: 80.25 on 6 and 91 DF,  p-value: < 2.2e-16

Análisis

con base en los resultados del modelo se puede concluir que:

  • El modelo de regresión lineal con todas las variables como predictores, explica el 84,1% de la varianza observada en el prestigio de la profesión.

  • El p-value del modelo es significativo (<2.2e−16), en concecuencia, se puede afirmar que el modelo es útil y que existe una relación entre los predictores y la variable respuesta, o al menos uno de los coeficientes es distinto a 0.

  • Los predictores que parecen tener una relación estadísticamente significativa con la variable respuesta son: education, income y el tipo de profesión.

Comparación de los 3 modelos

R2_mod1 =0.7521
R2_mod2 =0.7982
R2_mod3 =0.841

# Comparacion de los modelos
metodo = c("Modelo 1", "Modelo 2", "Modelo 3")
R_cuadrado = c(R2_mod1, R2_mod2, R2_mod3)
resultados <- data.frame(metodo, R_cuadrado)
resultados
##     metodo R_cuadrado
## 1 Modelo 1     0.7521
## 2 Modelo 2     0.7982
## 3 Modelo 3     0.8410
# Gráfico comparativo
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
ggplot(data = resultados, aes(x = reorder(metodo, R_cuadrado),
y = R_cuadrado)) +
geom_bar(stat = "identity", fill="#1bd999", position='dodge') +
ggtitle("Comparativo Modelos de Regresión lineal multiple")+
labs(x = "método de Clasificación", y = expression("R_cuadrado"))

Análisis final

Una vez implementados los 4 modelos y analizados sus resultados, podemos ver que el modelo 3, es decir, el modelo con todas las variables, es el que mejor predice el resultado, sin embargo, en este modelo no todas las varibles son significativas