library(readxl)   
library(nortest)  
library(tseries)  
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(car)      
## Cargando paquete requerido: carData
library(lmtest)   
## Cargando paquete requerido: zoo
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(mctest)   
library(ggplot2)

#Carga de datos
datos <- read_excel("ventas_empresa.xlsx")

# Estimación del modelo 
modelo_estimado<- lm(V ~ C + P + M, data = datos)
summary(modelo_estimado)
## 
## Call:
## lm(formula = V ~ C + P + M, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -17.279  -6.966   1.555   6.721  14.719 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 107.4435    18.0575   5.950 8.08e-06 ***
## C             0.9226     0.2227   4.142 0.000505 ***
## P             0.9502     0.1558   6.097 5.86e-06 ***
## M             1.2978     0.4307   3.013 0.006872 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.506 on 20 degrees of freedom
## Multiple R-squared:  0.9798, Adjusted R-squared:  0.9768 
## F-statistic: 323.6 on 3 and 20 DF,  p-value: < 2.2e-16

Supuesto de normalidad JB y SW

prueba de Jarque-Bera (JB) y Shapiro-Wilk (SW)

# Extracción de residuos
residuos <- residuals(modelo_estimado)

# Pruebas Estadísticas
shapiro.test(residuos)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.95315, p-value = 0.3166
jarque.bera.test(residuos)
## 
##  Jarque Bera Test
## 
## data:  residuos
## X-squared = 1.4004, df = 2, p-value = 0.4965
# Representación Gráfica
par(mfrow=c(1,2))
# Histograma con curva normal
hist(residuos, prob=T, main="Histograma de Residuos", col="lightblue", border="white")
curve(dnorm(x, mean=mean(residuos), sd=sd(residuos)), add=T, col="red", lwd=2)

# Q-Q Plot
qqnorm(residuos, main="Gráfico Q-Q Normal")
qqline(residuos, col="red")

INTERPRETACIÓN: Si el p-valor > 0.05 en ambas pruebas, no se rechaza la hipótesis nula (H0); por lo tanto, los residuos siguen una distribución normal.

Colinealidad (Farrar-Glauber)

library(psych)
## Warning: package 'psych' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## The following object is masked from 'package:car':
## 
##     logit
library(car)
# variables independientes
X <- datos[, c("C", "P", "M")]

# 2. Prueba de Esfericidad de Bartlett (Equivalente a Farrar-Glauber Global)
# Si el p-value es < 0.05, hay colinealidad.
print("--- Prueba de Bartlett (Farrar-Glauber) ---")
## [1] "--- Prueba de Bartlett (Farrar-Glauber) ---"
cortest.bartlett(cor(X), n = nrow(datos))
## $chisq
## [1] 71.20805
## 
## $p.value
## [1] 2.352605e-15
## 
## $df
## [1] 3
modelo_estimado <- lm(V ~ C + P + M, data = datos)

print("--- Factores de Inflación de la Varianza (VIF) ---")
## [1] "--- Factores de Inflación de la Varianza (VIF) ---"
vif_values <- vif(modelo_estimado)
print(vif_values)
##        C        P        M 
## 7.631451 3.838911 9.449210
# 4. Gráfico de diagnóstico
barplot(vif_values, 
        main = "Diagnóstico de Colinealidad (VIF)", 
        col = "steelblue", 
        ylim = c(0, 10))
abline(h = 5, col = "red", lty = 2)

INTERPRETACIÓN: Los resultados de la prueba de Farrar-Glauber muestran un p-valor significativamente bajo (< 0.05), lo que confirma la presencia de multicolinealidad en el modelo. Al analizar los Factores de Inflación de la Varianza (VIF), se observa que las variables M (VIF = 9.45) y C (VIF = 7.63) presentan los mayores niveles de colinealidad, sugiriendo que existe una redundancia severa de información entre estas variables independientes.

Supuesto de Homocedasticidad

# Prueba de Breusch-Pagan
bptest(modelo_estimado)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_estimado
## BP = 0.087869, df = 3, p-value = 0.9933
# Representación Gráfica
plot(modelo_estimado$fitted.values, residuos, 
     main="Residuos vs Valores Ajustados",
     xlab="Valores Predichos", ylab="Residuos",
     pch=19, col="darkblue")
abline(h=0, col="red", lwd=2)

INTERPRETACIÓN: El modelo cumple con Homecedasticidad.

No Autocorrelación (Multiplicador de Lagrange - BG)

# Prueba de Breusch-Godfrey (Orden 1 y 2)
bgtest(modelo_estimado, order = 1)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  modelo_estimado
## LM test = 2.5963, df = 1, p-value = 0.1071
bgtest(modelo_estimado, order = 2)
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  modelo_estimado
## LM test = 3.8409, df = 2, p-value = 0.1465
# Representación Gráfica (Correlograma ACF)
acf(residuos, main="Gráfico de Autocorrelación (ACF)")

INTERPRETACIÓN: Basado en los resultados de la prueba de Breusch-Godfrey, el modelo de regresión para estimar el nivel de ventas cumple satisfactoriamente con el supuesto de No Autocorrelación. Estadísticamente, los errores en un mes determinado no dependen de los errores de meses anteriores. Esto garantiza que las pruebas de significancia individual y los intervalos de confianza del modelo son válidos, asegurando que los estimadores obtenidos son eficientes.