El código a continuacion presentado utiliza diversas herramientas y técnicas estadísticas para llevar a cabo un análisis comparativo. Desde la importación de datos y la limpieza hasta la aplicación de pruebas de normalidad, autocorrelación y homogeneidad, se busca validar la robustez del modelo propuesto. Además, se utilizan visualizaciones gráficas, como diagramas de dispersión, residuos versus el tiempo, y gráficos QQ, para proporcionar una comprensión visual de la distribución de los residuos y la validez de los supuestos del modelo.A continuacion se adjuntan un enlace de donde se obtivieron dichos datos https://www.kaggle.com/datasets/checoalejandro/autos-consumo-gasolina-mexico/.
Para una mejor del codigo se adjunta una descripcion de cada una de las funciones utilizadas en el codigo
library(readxl): Cargue la biblioteca
readxlpara leer archivos de Excel.
Cons <- read_excel("juan/Consumo Gasolina Autos Ene 2018 (1).xlsx"):
Lee un archivo de Excel llamado “Consumo Gasolina Autos Ene 2018
(1).xlsx” y almacena los datos en un objeto llamado
Cons.
head(Cons): Muestra las primeras 5 filas del
dataframe Cons.
View(Cons): Abre una vista interactiva de los datos
en el dataframe Cons.
datos <- na.omit(Cons[c(12:80), c(11, 15)]):
Selecciona un subconjunto de datos eliminando las filas que contienen
valores faltantes ( NA) de las columnas 12 a 80 y las
columnas 11 y 15. Los datos resultantes se almacenan en el dataframe
datos.
library(MVN): Carga la biblioteca MVN
para realizar pruebas de normalidad multivariante.
library(lmtest): Carga la biblioteca
lmtest para realizar pruebas asociadas a modelos de
regresión.
data <- data.frame(y = datos$CO2(g/km) , x = datos$R.Ciudad (km/l))
: Crea un nuevo dataframe llamado datacon las columnas yy xtomadas de
las columnas CO2(g/km)y R.Ciudad (km/l)de datos.
resultado <- mvn(data = data, mvnTest = "mardia"):
Realiza pruebas de normalidad multivariante en los datos utilizando el
test de Mardia y almacena los resultados en el objeto
resultado.
print(resultado$univariateNormality): Muestra los
resultados de las pruebas de normalidad univariante realizadas en los
datos.
cor(data): Calcula la matriz de evaluación entre las variables endata`.
modelo <- lm(y ~ x, data = data): Ajusta un
modelo de regresión lineal simple con y como variable
dependiente y x como variable independiente.
resumen <- summary(modelo): Calcula un resumen
del modelo de regresión lineal.
resumen: Muestra el resumen del modelo que incluye
coeficientes estimados, estadísticas de prueba y otros
detalles.
plot(data$y ~ data$x): Cree un diagrama de
dispersión de y contra x.
resumen(modelo): Muestra un resumen adicional del
modelo.
predict(modelo): Calcula los valores predichos por
el modelo.
e <- modelo$residuals: Guarde los residuos del
modelo en el objeto e.
shapiro.test(e): Realice la prueba de normalidad de
Shapiro-Wilk en los residuos del modelo.
dwtest(modelo): Realice la prueba de Durbin-Watson
para verificar la autocorrelación de los errores del modelo.
bptest(modelo): Realice la prueba de Breusch-Pagan
para evaluar la homogeneidad de varianza de los errores.
library(tseries): Carga la biblioteca
tseries para realizar análisis de series
temporales.
tres <- residuals(modelo): Calcula los residuos
del modelo.
rachas <- factor(sign(tres)): Calcula las rachas
de los residuos.
run.test(rachas): Realice el test de rachas para
evaluar si los residuos siguen algún patrón.
library(ggplot2): Cargue la biblioteca
ggplot2para crear gráficos.
ggplot(data, aes(x, y)) + geom_point() + geom_smooth(method = "lm", se = FALSE, color = "blue") + labs(title = "Gráfico de Dispersión", x = "Eje X", y = "Eje Y"):
Crea un gráfico de dispersión con una línea de regresión lineal
ajustada.
plot(e, pch = 20, ylab = 'Residuales', xlab = 'Tiempo'):
Crea un gráfico de los residuos en función del tiempo.
abline(h = 0, lwd = 2, col = 'blue'): Agrega una
línea horizontal en y = 0 al gráfico de residuos.
qqnorm(e, pch = 20, main = 'Gráfico QQ Plot para los residuales', ylab = 'Cuantiles muestrales', xlab = 'Cuantiles teóricos'):
Crea un gráfico QQ plot de los residuos.
qqline(e, col = 'red', lwd = 2): Agrega una línea al
gráfico QQ plot.
sigma2 <- resumen$sigma: Extrae la estimación de
la variación de los residuos del resumen del modelo.
hist(e, freq = FALSE, breaks = 8): Crea un
histograma de los residuos con una curva de densidad
superpuesta.
curve(dnorm(x, mean = 0, sd = sqrt(sigma2)), add = TRUE, col = 'red'):
Agrega una curva normal al histograma de los residuos.
library(readxl)
Cons <-read_excel("juan/Consumo Gasolina Autos Ene 2018 (1).xlsx")
head(Cons) # muestra las primeras 5 filas
View(Cons)
datos<- na.omit(Cons[c(12:80),c(11,15)]) # querdan un total de 49 datos
library(MVN)
library(lmtest)
data<- data.frame(y=datos$`CO2(g/km)`,x=datos$`R. Ciudad (km/l)`); data # datos con los que se va a trabajar
resul<- mvn(data = data, mvnTest = "mardia")
#print(resul$Mardia) # Muestra los resultados de la prueba conjunta
print(resul$univariateNormality) # Muestra resultados de manera univa
cor(data) # correlación
modelo<-lm(y~x, data=data)
resumen<-summary(modelo) ; resumen
un aumento en una unidad en la variable x (R.ciudad) produce una disminución promedio en la respuesta y de -8.219
plot(data$y~data$x)
summary(modelo)
modelo predict(modelo) valores predichos
e=modelo$residuals
shapiro.test(e) prueba de normalidad de los errores del
test de normalidad de Shapiro-Wilk se concluye que los residuos del
modelo no son provenientes de una distribución normal
dwtest(modelo) prueba de autocorrelacion del test de
independencia de Durbin Watson se concluye que los errores del no son
autocorrelacionados
bptest(modelo)
Realiza la prueba de Breusch-Pagan para homogeneidad del test de Homogeneidad de Breush-Pagan se concluye que los errores del modelo tienen varianza constante
prueba de las rachas (aleatoriedad):
library(tseries)
tres = residuals(modelo)
rachas =factor(sign(tres))
runs.test(rachas)
del test Runs tenemos que los errores del modelo siguen algun patron
library(ggplot2)
ggplot(data, aes(x, y)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue") +
labs(title = "Grafico de Dispersion",
x = "Eje X",
y = "Eje Y")
residuales versus el tiempo
plot(e,pch=20,ylab='Residuales',xlab ='Tiempo')
abline(h=0,lwd=2,col='blue')
Garafico QQplot
qqnorm(e,pch=20,main='Grafico QQ Plot para los residuales',ylab='Cuantiles muestrales',xlab='Cuantiles teoricos')
qqline(e,col='red',lwd=2)
sigma2 = resumen$sigma
hist(e,freq=FALSE,breaks=8)
curve(dnorm(x,mean=0,sd=sqrt(sigma2)),add=TRUE,col='red')