Autores: Farcisco Javier Cedeño Villigua, George Alexander Mero
Anchundia
El presente trabajo se caracteriza por la aplicación de técnicas estadísticas, para llevar a cabo dicho objetivo se considera la base datos de fuente oficial del INEC.
La base de datos es BDDenemdu_personas_2021_anual de la cual se filtran varias variables aleatorias, con la intención inicial de realizar un resumen descriptivo y después la aplicación del Modelo de Mínimo Cuadrado Ordinario MCO.
Cargar librerías
library(haven) # para cargar la base de datos en SPSS
library(BSDA) # para aplicar las técnicas de Intervalo de Confianza
## Cargando paquete requerido: lattice
##
## Adjuntando el paquete: 'BSDA'
## The following object is masked from 'package:datasets':
##
## Orange
library(lmtest) # para prueba de homoscedasticidad
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(dplyr) #para filtrar, seleccionar
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2) #para graficar
library(e1071) #para calcular el coeficiente asimétrico y la kurtosis
Para ser consecuente con el presente+ trabajo se importa la base de datos del ENEMDU
setwd("C:/Users/Boris Burov/Desktop/Tarea Final Modulo Estadistica Para Ciencia de Datos")
BDDenemdu_personas_2021_anual <- read_sav("BDDenemdu_personas_2021_anual.sav")
View(BDDenemdu_personas_2021_anual)
Primero cambiamos el nombre a la base datos original por el nombre dato
dato <- BDDenemdu_personas_2021_anual
Al tener la base de datos 151 variables, entonces se procede a seleccionar y cambiar de nombres a las variables que más adelante seran sujetas a modelos de regesión simple y múltiple.
datos <- dato %>%
select(ingreso=p66, sexo=p02, edad=p03, estado_civil=p06,
nivel_instruccion=p10a, lee_y_escribe=p11)
Uno de los problemas que presenta la data de encuestas es los na, entonces se procede a eliminar los na de la base de datos
datos_sin_na <- na.omit(datos)
Una vez eliminada los na, se presentan aquellos valores mal ingresado o que el sistema asigna con valores 999999. Se procede a eliminar esos datos, además se coloca como un mínimo valor de ingreso a $50, bajo el argumento del ingreso de las personas en pobreza extrema
datos_sin_na <- subset(datos_sin_na, datos_sin_na$ingreso < 999999 & datos_sin_na$ingreso >= 50)
Una vez limpiado la data con las variables que forman parte del presente análisis estadítico, inicialmente se calculan algunos estadígrafos de la variable ingreso
x_barra <- mean(datos_sin_na$ingreso)
s2 <- var(datos_sin_na$ingreso)
s <- sd(datos_sin_na$ingreso)
cv <- s / x_barra
as <- skewness(datos_sin_na$ingreso)
ap <- kurtosis(datos_sin_na$ingreso)
Como se puede observar la media arimetica de la variable ingreso que se obtiene de la base de datos del ENEMDU cuya variable es la p66 que corresponde a ingresos de asalariados es de $305.96, este valor se aproxima al valor del parametro desconocido condiderando las propiedades que ostenta la base de datos del INEC al ser basadas en un muestreo probabilistico.
Otras aproximaciones se relacionan con los estadigrafos resultantes, para ilustrar, el coeficiente de variacion cv es de 0.589 se puede concluir que la data es homogenea porque dicho valor es menor que 1. Ademas, el coeficiente asimetrico as es mayor a 0, por lo tanto, tene sesgo positivo
La kurtosis es de 40.6984 indica una distribución extremadamente leptocúrtica, lo que significa que tiene picos muy altos y colas muy pesadas en comparación con una distribución normal. Esta medida sugiere una concentración extremadamente pronunciada de datos alrededor de la media, con una cantidad muy alta de valores extremos en comparación con una distribución normal estándar.
Intervalo de Confianza
El objetivo de la presente técnica es estimar por intervalos de confianza la media poblacional, a partir, de las propiedades del Teorema de Límite Central. Para ello, se recurre a la siguiente linea de código para crear la variable ingreso y aplicar la t de student para el cálculo del intervalo.
ingreso <- datos_sin_na$ingreso
# Configuración
conf_level <- 0.95 # Nivel de confianza
sample_mean <- mean(ingreso) # Media muestral
sample_sd <- sd(ingreso) # Desviación estándar muestral
n <- length(ingreso) # Tamaño de la muestra
df <- n - 1 # Grados de libertad para la distribución t de Student
# Intervalo de confianza
conf_int <- t.test(ingreso)$conf.int
# Crear el gráfico combinado
hist(ingreso, freq = FALSE, col = "lightblue", main = "Histograma y Curva de Densidad de 'ingreso'")
curve(dnorm(x, mean = sample_mean, sd = sample_sd), add = TRUE, col = "red") # Curva normal
curve(dt(x, df = df), add = TRUE, col = "blue") # Curva t de Student
# Print del intervalo de confianza
print(conf_int)
## [1] 303.2628 308.6643
## attr(,"conf.level")
## [1] 0.95
Se concluye a partir de la salida de la línea de código que el valor del parámetro (ingreso poblacional) con un nivel de confiabilidad del 95% se encuentra entre $303.26 hasta $308.66, además, que de cada 100 muestras 95 de ellas contienen el valor del parámetro desconocido.
Estimación del modelo lineal
A partir de los datos extraidos de la base de datos del ENEMDU, se procede a estimar 3 modelos de regresión lineal, y después a partir de los criterios de información elegir el mejor modelo y validar sus supuestos estadísticos.
Modelo 1
modelo1 <- lm(ingreso ~ sexo, data=datos_sin_na)
summary(modelo1)
##
## Call:
## lm(formula = ingreso ~ sexo, data = datos_sin_na)
##
## Residuals:
## Min 1Q Median 3Q Max
## -271.9 -121.9 -21.9 78.1 4678.1
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 383.861 4.149 92.52 <2e-16 ***
## sexo -61.973 3.118 -19.88 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 178.4 on 17153 degrees of freedom
## Multiple R-squared: 0.02252, Adjusted R-squared: 0.02246
## F-statistic: 395.1 on 1 and 17153 DF, p-value: < 2.2e-16
Modelo 2
modelo2 <- lm(ingreso ~ sexo + edad, data=datos_sin_na)
summary(modelo2)
##
## Call:
## lm(formula = ingreso ~ sexo + edad, data = datos_sin_na)
##
## Residuals:
## Min 1Q Median 3Q Max
## -305.2 -129.5 -15.4 87.1 4673.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 349.06036 5.87423 59.422 <2e-16 ***
## sexo -62.68332 3.11264 -20.138 <2e-16 ***
## edad 0.82902 0.09926 8.352 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 178.1 on 17152 degrees of freedom
## Multiple R-squared: 0.02648, Adjusted R-squared: 0.02636
## F-statistic: 233.2 on 2 and 17152 DF, p-value: < 2.2e-16
Modelo 3
modelo3 <- lm(ingreso ~ sexo + edad + lee_y_escribe, data=datos_sin_na)
summary(modelo3)
##
## Call:
## lm(formula = ingreso ~ sexo + edad + lee_y_escribe, data = datos_sin_na)
##
## Residuals:
## Min 1Q Median 3Q Max
## -321.2 -128.0 -13.9 87.1 4665.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 419.2679 7.5775 55.33 <2e-16 ***
## sexo -63.3656 3.0941 -20.48 <2e-16 ***
## edad 1.0809 0.1002 10.79 <2e-16 ***
## lee_y_escribe -74.3953 5.1183 -14.54 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 177 on 17151 degrees of freedom
## Multiple R-squared: 0.03832, Adjusted R-squared: 0.03815
## F-statistic: 227.8 on 3 and 17151 DF, p-value: < 2.2e-16
A continuación, se procede con el cálculo de los criterios de información AIC y BIC para tomar la decisión del mejor modelo.
Criterios de Información
AIC(modelo1, modelo2, modelo3)
## df AIC
## modelo1 3 226557.4
## modelo2 4 226489.7
## modelo3 5 226281.7
BIC(modelo1, modelo2, modelo3)
## df BIC
## modelo1 3 226580.6
## modelo2 4 226520.7
## modelo3 5 226320.4
Una vez obtenidoS los resultados de los criterios de información AIC y BIC, el mejor modelo corresponde al tercero, es decir, modelo 3, debido a que se considera los valores menores del AIC y BIC.
A continuación, se evalua el modelo 3
Contraste de hipótesis (Prueba de Significancia Individual) $$
Ho: beta1 = 0 (no es signifativo estadisticamente) H1: beta1 !=0 (es signifativo estadisticamente)
Ho: beta2 = 0 (no es signifativo estadisticamente) H1: beta2 !=0 (es signifativo estadisticamente)
Ho: beta1 = 0 (no es signifativo estadisticamente) H1: beta1 !=0 (es signifativo estadisticamente)
Ho: beta3 = 0 (no es signifativo estadisticamente) H1: beta3 !=0 (es signifativo estadisticamente)
\[ Contraste de hipótesis (Prueba de Significancia Global) \]
Ho: beta1 = beta2 = beta3 = 0 (no son signifativos estadisticamente) H1: beta1 != beta2 != beta3 != 0 (son signifativos estadisticamente)
\[ Reglas p-valor \]
p-valor > 0.05 No Rechazo Ho
p-valor < 0.05 Rechazo Ho
$$ Análisis del modelo 3 (mejor modelo)
La primera aproximación a la revisión del modelo es la evaluación estadística, a través, de las pruebas de significancia individual y la prueba de significancia global, para su evaluación se opta por la técnica del valor p, que sus reglas se las expone con anterioridad.
En el caso de las pruebas de significancia individual, los parámetros (beta1, beta2 y betas3) son estadísticamente significativos, ya que su p-valor es menor al 5%, cabe agregar que la decisión se basa en la distribución t de students.
Por otro lado, en la prueba de significancia global se rechaza la hipótesis nula, entonces se concluye con la confiabilidad del 95% que los betas son significativos, dicha aseveración se basa en las reglas del valor p, en este caso, el p-valor de la F Fisher es menor que el 5%.
Post estimación (test de diagnóstico)
A continuación, se pone a prueba los supuesto de normalidad y homocedasticidad a los residuos. Para ello, obtenemos los valores residuales.
residuos <- modelo3$residuals
Gráfico de los valores residuales
num_observaciones <- c(1:17155)
plot(num_observaciones, residuos, type="l")
Prueba de Normalidad Para prueba de normalidad se aplica la prueba de Kolmogorov-Smirnov.
Planteamiento de Hipótesis de Normalidad
$$
Ho: Residuos Normales Ha: Residuos No Normales
$$
Kolmogorov-Smirnov
ks.test(residuos, "pnorm")
## Warning in ks.test.default(residuos, "pnorm"): ties should not be present for
## the one-sample Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: residuos
## D = 0.52127, p-value < 2.2e-16
## alternative hypothesis: two-sided
La decisión con respecto a la hipótesis nula es RECHAZAR Ho, para este caso los residuos no presentan normalidad, dicha decisión se basa en las reglas del valor p.
Prueba de Homoscedasticidad de los residuos
Para la prueba de homocedasticidad se aplica la prueba de Goldfeld-Quandt
$$
Ho: Residuos Homocedásticos H1: Residuos Heterocedásticos
$$ Test de Goldfed-Quant
gqtest(modelo3)
##
## Goldfeld-Quandt test
##
## data: modelo3
## GQ = 2.549, df1 = 8574, df2 = 8573, p-value < 2.2e-16
## alternative hypothesis: variance increases from segment 1 to 2
A partir del resultado obtenido por la prueba se evidencia que la varianza de los errores no es constante, porque se rechaza la Hipótesis Nula, es decir, presenta Heterocedasticidad.
Finalmente, se tiene un modelo de regresión cumple los supestos estadísticos de significancia, pero no aprueba los supuestos de normalidad y homocedasticidad.