library(xtable)
library(knitr)
library(car)
## Loading required package: carData
library(plyr)
library(Hmisc)
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## Loading required package: ggplot2
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:plyr':
##
## is.discrete, summarize
## The following objects are masked from 'package:xtable':
##
## label, label<-
## The following objects are masked from 'package:base':
##
## format.pval, units
library(broom)
library(normtest)
library(RColorBrewer)
library(ggsci)
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(corrplot)
## corrplot 0.84 loaded
library(readxl)
library(dynlm)
data<-Prestige
head(data)
## 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
#data
Almacenamos el objeto data la base da datos Prestige, para luego poder trabajar con ella.
summary(data)
## 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
Existen 4 valores perdidos en la variable Type, lo omitiremos solos para el análisis descriptivo.
data<-rename(data,
replace = c(education="educ",
income="ing",
women="mujeres",
prestige="prestigio",
census="cod",
type="tipo"))
head(data)
## educ ing mujeres prestigio cod tipo
## 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
label(data$educ)="Promedio de años de estudio del trabajador nombrado"
label(data$ing)="Promedio de ingreso de dólares del nombrado"
label(data$mujeres)="Porcentaje de mujeres nombradas"
label(data$prestigio)="Valoración de prestigio de Pineo-Porter"
label(data$cod)="Código de ocupación en el censo"
label(data$tipo)="Tipo de ocupación en 3 niveles"
label(data)
## educ
## "Promedio de años de estudio del trabajador nombrado"
## ing
## "Promedio de ingreso de dólares del nombrado"
## mujeres
## "Porcentaje de mujeres nombradas"
## prestigio
## "Valoración de prestigio de Pineo-Porter"
## cod
## "Código de ocupación en el censo"
## tipo
## "Tipo de ocupación en 3 niveles"
data$tipo=as.character(data$tipo)
data$tipo[data$tipo=="bc"]=1
data$tipo[data$tipo=="prof"]=2
data$tipo[data$tipo=="wc"]=3
head(data)
## educ ing mujeres prestigio cod tipo
## gov.administrators 13.11 12351 11.16 68.8 1113 2
## general.managers 12.26 25879 4.02 69.1 1130 2
## accountants 12.77 9271 15.70 63.4 1171 2
## purchasing.officers 11.42 8865 9.11 56.8 1175 2
## chemists 14.62 8403 11.68 73.5 2111 2
## physicists 15.64 11030 5.13 77.6 2113 2
data$tipo=as.factor(data$tipo)
a<-levels(data$tipo)
data$tipo=factor(data$tipo,
ordered = F,
levels = a,
labels = c("cuello azul",
"profesional",
"cuello blanco"))
head(data)
## educ ing mujeres prestigio cod tipo
## gov.administrators 13.11 12351 11.16 68.8 1113 profesional
## general.managers 12.26 25879 4.02 69.1 1130 profesional
## accountants 12.77 9271 15.70 63.4 1171 profesional
## purchasing.officers 11.42 8865 9.11 56.8 1175 profesional
## chemists 14.62 8403 11.68 73.5 2111 profesional
## physicists 15.64 11030 5.13 77.6 2113 profesional
layout(matrix(c(1,3,2,4), nrow = 2,ncol= 2))
plot(data$educ,data$prestigio,col="blue",main="Prestigio vs Promedio años de estudio",
xlab="Estudio",ylab="Prestigio")
plot(data$ing,data$prestigio,col="red",main="Prestigio vs Promedio de ingreso",
xlab="Ingreso",ylab="Prestigio")
plot(data$mujeres,data$prestigio,,col="darkgreen",main="Prestigio vs % de mujeres nombradas",
xlab="Mujeres Nombradas",ylab="Prestigio")
plot(data$tipo,data$prestigio,col = pal_jco()(10),main="Prestigio vs Tipo de Ocupación",
xlab="Tipo de Ocupación",ylab="Prestigio")
Se observa que existe relación lineal entre la variable dependiente Nivel de Prestigio y las variables independientes Promedio de años de estudio y Promedio de ingreso, las demás variables no muestran relación alguna con el nivel de Prestigio
\[\begin{equation} prestigio = \beta_0 + \beta_1 educ + \beta_2 \sqrt{ing} + \epsilon. \end{equation}\]
data2 <- (Prestige)
data2<-rename(data2,
replace = c(education="educ",
income="ing",
women="mujeres",
prestige="prestigio",
census="cod",
type="tipo"))
modelo<-lm(prestigio~educ+sqrt(ing),data = data2)
summary(modelo)
##
## Call:
## lm(formula = prestigio ~ educ + sqrt(ing), data = data2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.2402 -5.1954 -0.3229 4.2815 17.9898
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -18.17457 3.13510 -5.797 8.06e-08 ***
## educ 3.91380 0.33209 11.785 < 2e-16 ***
## sqrt(ing) 0.29018 0.03933 7.379 5.01e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.349 on 99 degrees of freedom
## Multiple R-squared: 0.8212, Adjusted R-squared: 0.8175
## F-statistic: 227.3 on 2 and 99 DF, p-value: < 2.2e-16
Modelo de Regresión Lineal
\[\begin{equation} prestigio = -181.7457 + 3.91380*educ + 0.29018*\sqrt{ing} + \epsilon. \end{equation}\]
Los predictores en su media nos permite decir que el Prestigio promedio estimado es de -18.17457, cuando no consideramos el número promedio de años de educación y el Promedio de ingreso de dólares del nombrado del conjunto de datos.Es decir se espera en promedio generar un valor de -18.17 de Prestigio cuando no influye ningún factor.
Del resultado del modelo y el diagrama de dispersión podemos hacer algunas observaciones interesantes:
Para cualquier nivel de ingreso en una profesión, al aumentar un año del nivel de educación en una profesión determinada, el Prestigio promedio aumentará en 3.91380.
Del mismo modo, para cualquier nivel de educación, ver una mejora en la raíz cuadrada del ingreso en un dólar en una profesión determinada generará un Prestigio promedio adicional de 0.29018.
m1<-glance(modelo)
l<-labels(m1)
l
## [[1]]
## [1] "1"
##
## [[2]]
## [1] "r.squared" "adj.r.squared" "sigma" "statistic"
## [5] "p.value" "df" "logLik" "AIC"
## [9] "BIC" "deviance" "df.residual"
comp<-matrix(data = c(l[[2]],m1), nrow = 11)
comp_2<-as.data.frame(comp)
names(comp_2)
## [1] "V1" "V2"
comp_2<-rename(comp_2,c(V1="CARACTERÍSTICAS",V2="M1"))
comp_2
## CARACTERÍSTICAS M1
## 1 r.squared 0.8211581
## 2 adj.r.squared 0.8175451
## 3 sigma 7.348851
## 4 statistic 227.2807
## 5 p.value 9.936502e-38
## 6 df 3
## 7 logLik -346.6527
## 8 AIC 701.3054
## 9 BIC 711.8053
## 10 deviance 5346.556
## 11 df.residual 99
Observando el R cuadrado ajustado como una métrica de variabilidad más apropiada ya que el R cuadrado ajustado aumenta solo si el nuevo término agregado termina mejorando el modelo más de lo que se esperaría. El R2 de 0.8212 o 82.12% explican el evento de predecir el Valor del Prestigio en función al nivel de educación (añños de estudio) y nivel de ingresos (en dólares). El R2 tiene un valor de 0.8212 por lo que las variables Ingreso y Educación explican solamente el 82.12% de la variablidad total de Prestigio.
summary(modelo)
##
## Call:
## lm(formula = prestigio ~ educ + sqrt(ing), data = data2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.2402 -5.1954 -0.3229 4.2815 17.9898
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -18.17457 3.13510 -5.797 8.06e-08 ***
## educ 3.91380 0.33209 11.785 < 2e-16 ***
## sqrt(ing) 0.29018 0.03933 7.379 5.01e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.349 on 99 degrees of freedom
## Multiple R-squared: 0.8212, Adjusted R-squared: 0.8175
## F-statistic: 227.3 on 2 and 99 DF, p-value: < 2.2e-16
Ho: Bi=0 ( la variable xi no aporta al modelo)
H1: Bi<>0 ( la variable xi aporta al modelo)
alfa 0.05
Rechazamos la Ho cuando el p-value es menor 0.05,
T: 11.875, p=0.0000000000000002 < 0.05 (No se rechaza)/Años Promedio En Educación
T: 7.379, p=0.0000000000501 <0.05 (No se rechaza)/ Raíz cuadrada del ingreso en dólares
Podemos concluir con un nivel de confianza del 95%, que resultaron significativas las siguientes variables: Educación y Raíz Cuadrada del Ingreso.
summary(modelo)
##
## Call:
## lm(formula = prestigio ~ educ + sqrt(ing), data = data2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.2402 -5.1954 -0.3229 4.2815 17.9898
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -18.17457 3.13510 -5.797 8.06e-08 ***
## educ 3.91380 0.33209 11.785 < 2e-16 ***
## sqrt(ing) 0.29018 0.03933 7.379 5.01e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.349 on 99 degrees of freedom
## Multiple R-squared: 0.8212, Adjusted R-squared: 0.8175
## F-statistic: 227.3 on 2 and 99 DF, p-value: < 2.2e-16
Prueba de modelo (Anova)
Ho: B=0 ( modelo no es adecuado)
H1: B<>0( modelo es adecuado)
alfa 0.05
Rechazamos la Ho cuando el p-value es menor 0.05, F:227.3, p=0.00000000000000022 < 0.05.Podemos concluir con un nivel de confianza del 95%, que el modelo es adecuado.
Una herramienta potencialmente útil para construir un modelo apropiado es la prueba de especificación de Ramsey, RESET. Este método agrega automáticamente términos polinomiales de orden superior a su modelo y prueba la hipótesis conjunta de que sus coeficientes son todos cero. Por lo tanto, la hipótesis nula de la prueba es
H0: “No son necesarios términos polinomiales de orden superior”;
Si rechazamos la hipótesis nula, debemos considerar incluir tales términos.
Para confirmar las observaciones visuales, se suele utilizar un test estadístico para diagnosticar una mala especificación funcional del modelo: RESET Test de Ramsey. La idea es justamente evaluar si es que existe un error de especificación de la ecuación de regresión. Este test lo que hace es volver a estimar el modelo pero incorporando los valores predichos del modelo original con alguna transformación no lineal de las variables. Luego, a partir de un Test-F se evalúa si el modelo con la especificación no lineal tiene un mejor ajuste que el modelo original sin la transformación no lineal.
La hipótesis nula postula que las nuevas variables (en este caso ing^(1/2) no aportan significativamente para explicar la variación de la variable dependiente; es decir, que su coeficiente es igual a cero ( β = 0).
Ho: Fórmula Funcional Correcta
Ha: Fórmula Funcional Incorrecta
La función R que realiza una prueba RESET es resettest, que requiere los siguientes argumentos: fórmula, la fórmula del modelo a probar o el nombre de un objeto lm ya calculado; potencia, un conjunto de enteros que indican las potencias de los términos polinomiales que se incluirán; tipo, que podría ser uno de “fitted”, “regressor” o “princomp”, que indica si los términos adicionales deben ser potencias de los regresores, valores ajustados o el primer componente principal de la matriz del regresor; y, finalmente, datos, que especifican el conjunto de datos que se utilizará si se ha proporcionado una fórmula y no un objeto modelo.
modelo <- lm(prestigio ~ educ + sqrt(ing), data = data2)
summary(modelo)
##
## Call:
## lm(formula = prestigio ~ educ + sqrt(ing), data = data2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.2402 -5.1954 -0.3229 4.2815 17.9898
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -18.17457 3.13510 -5.797 8.06e-08 ***
## educ 3.91380 0.33209 11.785 < 2e-16 ***
## sqrt(ing) 0.29018 0.03933 7.379 5.01e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.349 on 99 degrees of freedom
## Multiple R-squared: 0.8212, Adjusted R-squared: 0.8175
## F-statistic: 227.3 on 2 and 99 DF, p-value: < 2.2e-16
modelo1 <- lm(prestigio ~ educ + ing, data = data2)
summary(modelo1)
##
## Call:
## lm(formula = prestigio ~ educ + ing, data = data2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -19.4040 -5.3308 0.0154 4.9803 17.6889
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.8477787 3.2189771 -2.127 0.0359 *
## educ 4.1374444 0.3489120 11.858 < 2e-16 ***
## ing 0.0013612 0.0002242 6.071 2.36e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.81 on 99 degrees of freedom
## Multiple R-squared: 0.798, Adjusted R-squared: 0.7939
## F-statistic: 195.6 on 2 and 99 DF, p-value: < 2.2e-16
modelo2 <- lm(prestigio ~ educ + ing^2, data = data2)
summary(modelo2)
##
## Call:
## lm(formula = prestigio ~ educ + ing^2, data = data2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -19.4040 -5.3308 0.0154 4.9803 17.6889
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.8477787 3.2189771 -2.127 0.0359 *
## educ 4.1374444 0.3489120 11.858 < 2e-16 ***
## ing 0.0013612 0.0002242 6.071 2.36e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.81 on 99 degrees of freedom
## Multiple R-squared: 0.798, Adjusted R-squared: 0.7939
## F-statistic: 195.6 on 2 and 99 DF, p-value: < 2.2e-16
resettest(modelo)
##
## RESET test
##
## data: modelo
## RESET = 1.8168, df1 = 2, df2 = 97, p-value = 0.168
resettest(modelo1)
##
## RESET test
##
## data: modelo1
## RESET = 3.4709, df1 = 2, df2 = 97, p-value = 0.035
resettest(modelo2)
##
## RESET test
##
## data: modelo2
## RESET = 3.4709, df1 = 2, df2 = 97, p-value = 0.035
resettest(modelo, power=2, type=c("fitted"), data=data2)
##
## RESET test
##
## data: modelo
## RESET = 1.1888, df1 = 1, df2 = 98, p-value = 0.2783
resettest(modelo2, power=2, type=c("fitted"), data=data2)
##
## RESET test
##
## data: modelo2
## RESET = 2.3298, df1 = 1, df2 = 98, p-value = 0.1301
De acuerdo al resultado del Test F, confirmamos lo siguiente: el incorporar un término raíz cuadrada del ingreso mejora el ajuste de nuestra estimación. A esta conclusión llegamos observando el valor-p del test RESET de Ramsey mucho mayor que el nivel de significancia estadística del 5%, no rechazamos la hipótesis nula de que la incorporación del término raíz cuadrada e inclusive la incorporación del término cuadrático del ingreso no es necesario en la mejora del ajuste del modelo.
En nuestro caso, ambos valores p del modelo y modelo2 son superiores a 0,05, lo que indica que el modelo no falla marginalmente la prueba de especificación y que pueden no ser necesarios algunos términos de orden superior. Es decir nos indica que no hay error de especificación ya que no rechazamos la hipótesis nula que formula una forma funcional correcta.
head(data2)
## educ ing mujeres prestigio cod tipo
## 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
datoscorr<-data.frame(prestigio=data2$prestigio,ingreso=data2$ing,educacion=sqrt(data2$educ))
head(datoscorr)
## prestigio ingreso educacion
## 1 68.8 12351 3.620773
## 2 69.1 25879 3.501428
## 3 63.4 9271 3.573514
## 4 56.8 8865 3.379349
## 5 73.5 8403 3.823611
## 6 77.6 11030 3.954744
modelocorr=cor(datoscorr)
modelocorr
## prestigio ingreso educacion
## prestigio 1.0000000 0.7149057 0.8402604
## ingreso 0.7149057 1.0000000 0.5641525
## educacion 0.8402604 0.5641525 1.0000000
corrplot(modelocorr, method = "number")
cor.mtest <- function(mat, ...) {
mat <- as.matrix(mat)
n <- ncol(mat)
p.mat<- matrix(NA, n, n)
diag(p.mat) <- 0
for (i in 1:(n - 1)) {
for (j in (i + 1):n) {
tmp <- cor.test(mat[, i], mat[, j], ...)
p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
}
}
colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
p.mat
}
p.mat <- cor.mtest(modelocorr)
head(p.mat[, 1:3])
## prestigio ingreso educacion
## prestigio 0.0000000 0.59880824 0.61355761
## ingreso 0.5988082 0.00000000 0.01474937
## educacion 0.6135576 0.01474937 0.00000000
col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
corrplot(modelocorr, method="color", col=col(200),
type="upper", order="hclust",
addCoef.col = "black", # Add coefficient of correlation
tl.col="black", tl.srt=45, #Text label color and rotation
# Combine with significance
p.mat = p.mat, sig.level = 0.01, insig = "blank",
# hide correlation coefficient on the principal diagonal
diag=FALSE
)
matriz of the p-value de la correlación
La matriz de correlación que se muestra resalta la situación que encontramos con el resultado del modelo. Tenga en cuenta que la correlación entre la variable independiente educación y la variable dependiente prestigio es muy alta 0.84.Además también se observa que la correlación entre la variable independiente ingreso y la variable dependiente prestigio es muy alta en 0.71.
Esto revela que el nivel de educación de cada profesión y el nivel de ingreso está fuertemente alineado con el nivel de prestigio de cada profesión.También se observa que la correlación entre la variable educación e ingreso es baja (0.56) por lo que se descartaría la existencia de Multicolinealidad.
Dado que observamos de que las dos variables predictores (ingreso y educación) están asociados con el Prestigio, podemos considerar no eliminar ninguna variable predictora en el modelo.
plot(datoscorr, pch = 16, col = "cornflowerblue")
El diagrama de matriz de dispersiones nos permite visualizar la relación entre todas las variables en una sola imagen.
Observamos que el nivel de prestigio aumenta cuando se incrementa el promedio de años de educación. También se observa que a medida que aumenta el ingreso promedio el nivel de prestigio aumenta. Concluimos de la gráfica mostrada que no existe multicolinealidad.
Para detectar si la multicolinealidad es problemática es necesario realizar un test de vif (variance inflation factors) porque ver correlación de a pares no nos ayuda a dilucidar si más de dos variables tienen una correlación lineal. Lo que nos dice este test vif es qué tanto se “agrandan” los errores de cada coeficiente en presencia de las demás variables (qué tanto se incrementa la varianza del error).
vif(modelo)
## educ sqrt(ing)
## 1.535454 1.535454
Luego, realizamos una consulta sobre si la raíz cuadrada de vif para cada variable es menor que 2 (la raíz cuadrada porque lo que me interesa es el error estándar y no la varianza). Vif: debería ser menor a 2, si es mayor a dos quiere decir que la varianza es demasiado alta y por tanto hay problema de multicolinealidad.
sqrt(vif(modelo))
## educ sqrt(ing)
## 1.239134 1.239134
De acuerdo a la consulta, parece ser que no tenemos un problema de multicolinealidad. Al ejecutar la prueba VIF(Indice de Variancia Inflada) nos arroja valores muy bajos menores a 2 y podemos considerar que hay ausencia de multicolinealidad.
Para comprobar trabajaremos con los test de White y el test de Brush-Pagan.
El test de White se utiliza para ver si hay heteroestacidad lo mismo que el test de Brush-Pagan,los dos se encuentran en el paquete lmtest de R.
Ho: Si p-valor > 0 Existencia de Homocedasticidad Ha: Si p-valor < 0 Existencia de Heterocedasticidad
test de white
gqtest(modelo)
##
## Goldfeld-Quandt test
##
## data: modelo
## GQ = 0.68379, df1 = 48, df2 = 48, p-value = 0.9042
## alternative hypothesis: variance increases from segment 1 to 2
Como podemos observar en esta prueba estadística nos dice que si el p-valor es mayor al nivel de significancia del 5% entonces no rechazamos la hipótesis nula de homocedasticidad dado que p-valor =0.9042 > 0.05, es decir la varianza del error es constante, el error (residuos) varía según los valores de las variables educación e ingreso.
test de Brusch-Pagan
bptest(modelo,studentize=T)
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 5.8367, df = 2, p-value = 0.05402
Como podemos observar en esta prueba estadística nos dice que si el p-valor es mayor al nivel de significancia del 5% entonces no rechazamos la hipótesis nula de homocedasticidad dado que p-valor =0.05402 > 0.05 (ligeramente mayor), es decir la varianza del error es constante, el error (residuos) varía según los valores de las variables educación e ingreso.
Antes de aceptar el resultado de una regresión lineal, es importante evaluar su idoneidad para explicar los datos. Una de las muchas maneras de hacer esto es examinar visualmente los residuos. Si el modelo es apropiado, los errores residuales deben ser aleatorios y normalmente distribuidos. Además, eliminar un caso no debería afectar significativamente la idoneidad del modelo. R proporciona cuatro enfoques gráficos para evaluar un modelo utilizando el comando plot ().
layout(matrix(1:4, ncol= 2))
plot(modelo)
La gráfica en la esquina superior izquierda muestra los errores residuales graficados versus sus valores ajustados. Los residuos deben distribuirse aleatoriamente alrededor de la línea horizontal que representa un error residual de cero; es decir, no debería haber una tendencia distinta en la distribución de puntos.
El gráfico en la parte inferior izquierda es un gráfico QQ estándar, que debería sugerir que los errores residuales se distribuyen normalmente.
El gráfico de ubicación de escala en la esquina superior derecha muestra la raíz cuadrada de los residuos estandarizados (una especie de raíz cuadrada de error relativo) en función de los valores ajustados. Nuevamente, no debería haber una tendencia obvia en esta trama.
Finalmente, la gráfica en la esquina inferior derecha muestra el apalancamiento de cada punto, que es una medida de su importancia para determinar el resultado de la regresión. Superpuestos en el gráfico hay líneas de contorno para la distancia de Cook, que es otra medida de la importancia de cada observación para la regresión. Las distancias más pequeñas significan que eliminar la observación tiene poco efecto en los resultados de la regresión. Las distancias mayores de 1 son sospechosas y sugieren la presencia de un posible valor atípico o deficiente.
summary(modelo)
##
## Call:
## lm(formula = prestigio ~ educ + sqrt(ing), data = data2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.2402 -5.1954 -0.3229 4.2815 17.9898
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -18.17457 3.13510 -5.797 8.06e-08 ***
## educ 3.91380 0.33209 11.785 < 2e-16 ***
## sqrt(ing) 0.29018 0.03933 7.379 5.01e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.349 on 99 degrees of freedom
## Multiple R-squared: 0.8212, Adjusted R-squared: 0.8175
## F-statistic: 227.3 on 2 and 99 DF, p-value: < 2.2e-16
confint(modelo)
## 2.5 % 97.5 %
## (Intercept) -24.395291 -11.953844
## educ 3.254854 4.572751
## sqrt(ing) 0.212147 0.368209
residuales<-modelo$residuals
par(mfrow=c(1,2))
qqnorm(residuales)
residuales_r<-as.data.frame(residuales)
is.atomic(residuales_r)
## [1] FALSE
qqline(residuales_r)
hist(residuales)
par(mfrow=c(1,1))
Los residuos tienen distribución normal
Aplicaremos el Test de Normalidad en residuos para comprobar lo anterior
El test de Jarque-Bera no requiere estimaciones de los parámetros que caracterizan la normal. El estadístico de Jarque-Bera cuantifica que tanto se desvían los coeficientes de asimetría y curtosis de los esperados en una distribución normal. Puede calcularse mediante la función jarque.bera.test() del paquete tseries.
jb.norm.test(residuales)
##
## Jarque-Bera test for normality
##
## data: residuales
## JB = 0.35297, p-value = 0.8315
Hipótesis
H0: La muestra proviene de una distribución normal.
H1: La muestra no proviene de una distribución normal.
Nivel de Significancia
El nivel de significancia que se trabajará es de 0.05. Alfa=0.05
Criterio de Decisión
Si P < Alfa Se rechaza Ho
Si p >= Alfa No se rechaza Ho
Con la prueba de Jarque Bera, observamos que el p-valor = 0.818 > 0.05 No se rechaza Ho, entonces los Residuos tienen distribución normal, concluyendo que el modelo es adecuado para su implementación.
PREGUNTA_11 <- read_excel("C:/Users/ANGEL/Desktop/MODELO ECONOMETRICO EN RSTUDIO/SESION 6/PREGUNTA 11.xlsx")
head(PREGUNTA_11)
## # A tibble: 6 x 2
## tiempo inf
## <dbl> <dbl>
## 1 1950 10.3
## 2 1951 9.95
## 3 1952 6.92
## 4 1953 9.09
## 5 1954 5.40
## 6 1955 4.70
Inflacion=PREGUNTA_11
head(Inflacion)
## # A tibble: 6 x 2
## tiempo inf
## <dbl> <dbl>
## 1 1950 10.3
## 2 1951 9.95
## 3 1952 6.92
## 4 1953 9.09
## 5 1954 5.40
## 6 1955 4.70
attach(Inflacion)
Aplicando el modelo de regresión lineal con rezago de la variable inflación
ModelReg=dynlm(inf~L(inf),data = Inflacion)
summary(ModelReg)
## Warning in summary.lm(ModelReg): essentially perfect fit: summary may be
## unreliable
##
## Time series regression with "numeric" data:
## Start = 1, End = 66
##
## Call:
## dynlm(formula = inf ~ L(inf), data = Inflacion)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.062e-12 5.380e-14 5.560e-14 6.030e-14 5.217e-13
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.399e-13 6.477e-14 -2.16e+00 0.0345 *
## L(inf) 1.000e+00 6.370e-17 1.57e+16 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.156e-13 on 64 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 2.464e+32 on 1 and 64 DF, p-value: < 2.2e-16
Aplicando el test de Durbin Watson para probar existencia de autocorrelación
dwtest(ModelReg)
##
## Durbin-Watson test
##
## data: ModelReg
## DW = 2.2369, p-value = 0.8194
## alternative hypothesis: true autocorrelation is greater than 0
Ho: No Existe Autocorrelación
Ha: Existe Autocorrelación
El modelo no presenta autocorrelación ya que el p-valor del modelo es mayor del nivel de significancia del 5% (0.8194 > 0.05) ,no se rechaza la hipótesis nula de que no presenta autocorrelación, en el modelo de rezago.
Aplicando el test de Ljung-Box para probar la ausencia de autocorrelación en serie, hasta un retraso especificado k.
Box.test(residuals(ModelReg),type="Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(ModelReg)
## X-squared = 1.1054, df = 1, p-value = 0.2931
Ho: No Existe Autocorrelación
Ha: Existe Autocorrelación
El modelo no presenta autocorrelación ya que el p-valor del modelo es mayor del nivel de significancia del 5% (0.2931 > 0.05) ,no se rechaza la hipótesis nula de que no presenta autocorrelación, en el modelo de rezago.
Aplicando el test de Breusch-Godfrey para la correlación serial de orden superior
bgtest(ModelReg)
##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: ModelReg
## LM test = 1.0575, df = 1, p-value = 0.3038
Ho: No Existe Autocorrelación de n-ésimo orden
\[\begin{equation} \rho_1=\rho_2=\rho_3=\rho_4=......\rho_n=0 \end{equation}\]
Ha: Existe Autocorrelación de n-ésimo orden
El modelo no presenta autocorrelación de n-ésimo orden ya que el p-valor del modelo es mayor del nivel designificancia del 5% (0.3038 > 0.05) ,no se rechaza la hipótesis nula de que no presenta autocorrelación, en el modelo de rezago.