Sugerencias y/o comentarios: https://url2.cl/1LgV6 (Abrir en nueva pestaña)
A continuación se resolverá 10 preguntas para ver el paso a paso en la toma de decisión de elegir o no una variable exógena dummy para un modelo de regresión lineal. Usando la base de datos “auto”
Llamamos a las librerías que utilizaremos y descargamos la base de datos auto
library(dplyr)
library(Hmisc)
library(car)
library(haven)
auto <- read_dta("https://github.com/JoseConde95/Data-auto/raw/master/auto.dta")
foreign: Proc
trunk: Lmaletera
price: Precio
auto = rename(auto, Proc="foreign", Lmaletera="trunk", Precio="price")
head(auto)
## # A tibble: 6 x 12
## make Precio mpg rep78 headroom Lmaletera weight length turn displacement
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AMC ~ 4099 22 3 2.5 11 2930 186 40 121
## 2 AMC ~ 4749 17 3 3 11 3350 173 40 258
## 3 AMC ~ 3799 22 NA 3 12 2640 168 35 121
## 4 Buic~ 4816 20 3 4.5 16 3250 196 40 196
## 5 Buic~ 7827 15 4 4 20 4080 222 43 350
## 6 Buic~ 5788 18 3 4 21 3670 218 43 231
## # ... with 2 more variables: gear_ratio <dbl>, Proc <dbl+lbl>
Proc: Procedencia del auto
Lmaletero: Longitud del maletero
Precio: Precio del automovil
label(auto$Proc)="Procedencia del auto"
label(auto$Lmaletera)="Longitud del auto"
label(auto$Precio)="Precio del automovil"
label(auto)
## make Precio mpg
## "Make and Model" "Precio del automovil" "Mileage (mpg)"
## rep78 headroom Lmaletera
## "Repair Record 1978" "Headroom (in.)" "Longitud del auto"
## weight length turn
## "Weight (lbs.)" "Length (in.)" "Turn Circle (ft.) "
## displacement gear_ratio Proc
## "Displacement (cu. in.)" "Gear Ratio" "Procedencia del auto"
auto$Proc <- factor(auto$Proc, levels = c(0,1), labels = c("Local","Extranjero"))
table(auto$Proc)
##
## Local Extranjero
## 52 22
\[Precio = \beta_0 +\beta_1Proc+\beta_2Lmaletera\] Observamos que tenemos un R^2 del 12%. Y un p-value de la prueba F del 0.7% siendo menor al 5% nos dice que en general las dos variables no explican al modelo. Sin embargo, más adelante haremos los tests necesarios para este caso, dado que estamos haciendo uso de una variable exógena dummy.
modelo1 <- lm(Precio ~ Proc + Lmaletera, data = auto)
summary(modelo1)
##
## Call:
## lm(formula = Precio ~ Proc + Lmaletera, data = auto)
##
## Residuals:
## Precio del automovil
## Min 1Q Median 3Q Max
## -3372.7 -1665.3 -759.4 315.3 10293.4
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2196.54 1267.86 1.732 0.08753 .
## ProcExtranjero 1190.15 760.80 1.564 0.12219
## Lmaletera 262.77 81.85 3.210 0.00199 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2791 on 71 degrees of freedom
## Multiple R-squared: 0.1288, Adjusted R-squared: 0.1043
## F-statistic: 5.25 on 2 and 71 DF, p-value: 0.007475
Mediante el comando “is.factor” verificamos que efectivamente la variable Proc es una de tipo factor, dado que en la pregunta 3 hicimos la transformación.
is.factor(auto$Proc)
## [1] TRUE
Porque por más que las variables tengan los valores 0 y 1 inicialmente, en la base de datos, esto no significa que necesariamente sean del tipo factor. Y dado que mi objetivo es crear una dummy exógena para testearla, necesito que esta variable sea del tipo factor, sino estaría forzando a mi variable a comportarse como tal y generaría sesgadez.
La mediana del precio de autos locales es 4782, mientras que la de extranjeros es 5759. Entonces parece que existe una diferencia en promedio del precio de los automóviles locales contra los extranjeros. Sin embargo, eso es solo una apreciación visual, tendríamos que contrastar mediante un test, para poder determinar si la variable dummy formada nos va a ayudar al modelo o no.
boxplot(auto$Precio~auto$Proc, main = "Gráfico de Cajas Precio Local Vs Precio Extranjero",
xlab = "PROCEDENCIA", ylab = "PRECIO", col="green")
summary(auto$Precio[auto$Proc=="Local"])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3291 4186 4782 6072 6200 15906
summary(auto$Precio[auto$Proc=="Extranjero"])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3748 4522 5759 6385 7068 12990
Vemos que la el test de Levene tiene un F-Value de 0.9751, entonces cae en zona de no rechazo de la Hipótesis Nula. Por ende, podemos decir que no existe una diferencia entre las medianas de los precios de un auto local contra la de un extranjero. También vamos a crear un modelo Anova para corroborar si la dummy creada es necesaria para mi modelo mediante un test
leveneTest(auto$Precio~auto$Proc, center = median)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 0.001 0.9751
## 72
mod_anova = aov(auto$Precio~auto$Proc)
summary(mod_anova)
## Df Sum Sq Mean Sq F value Pr(>F)
## auto$Proc 1 1507383 1507383 0.171 0.68
## Residuals 72 633558013 8799417
Podemos ver que entra en zona de no rechazo de la hipótesis nula, donde nos está diciendo que la varianza de la variable Procedencia no es significativa.
Como la diferencia entre las medianas no es significativa podemos decir entonces, que no es conveniente dado que la prueba de levene nos revela que las medianas son iguales a un 95% de confianza, no existe una diferencia entre el precio de los autos locales y extranjeros. Un análisis extra que podemos realizar es “one way” mediante el uso del comando “t1way”. Sin embargo, debemos tener muestras balanceadas, así que se va a generar una separación de datos dado que nuestras muestras no están balanceadas. Como existen 52 observaciones locales y 22 extranjeras. Las acomodamos y sacaremos una muestra de 22 datos.
muestras_desbalanceadas = unstack(auto, Precio ~ Proc)
a = data.frame(precio = muestras_desbalanceadas[[1]][1:22], nivel=factor(1))
b = data.frame(precio = muestras_desbalanceadas[[2]][1:22], nivel=factor(2))
fact_columna = rbind(a,b)
library(WRS2)
t1way(fact_columna)
## Call:
## t1way(formula = fact_columna)
##
## Test statistic: F = 1.069
## Degrees of freedom 1: 1
## Degrees of freedom 2: 25.99
## p-value: 0.31069
##
## Explanatory measure of effect size: 0.21
## Bootstrap CI: [0.01; 0.67]
Nos sale un P-value del 0.31, esto significa que no se rechaza la hipótesis nula del test, por ende, la variable “Procedencia” no es significativa.
\[Precio = \beta_0 +\beta_1Proc+\beta_2Lmaletera\]
El tipo de modelo creado es un modelo ANCOVA dado que se está haciendo uso de una variable cualitativa Dummy llamada “Proc” y otra variable que es cuantitativa llamada “Lmaletera”, ambas exógenas para tratar de explicar el Precio de los autos. Para el modelo “Proc” es una variable dummy del tipo Factor.