library(readxl)
ventas_empresa <- read_excel("C:/Users/JOSE CASTRO/Downloads/ventas_empresa.xlsx")
head(ventas_empresa)
## # A tibble: 6 × 4
##       V     C     P     M
##   <dbl> <dbl> <dbl> <dbl>
## 1   607   197   173   110
## 2   590   208   152   107
## 3   543   181   150    99
## 4   558   194   150   102
## 5   571   192   163   109
## 6   615   196   179   114
str(ventas_empresa)
## tibble [24 × 4] (S3: tbl_df/tbl/data.frame)
##  $ V: num [1:24] 607 590 543 558 571 615 606 593 582 646 ...
##  $ C: num [1:24] 197 208 181 194 192 196 203 200 198 221 ...
##  $ P: num [1:24] 173 152 150 150 163 179 169 166 159 206 ...
##  $ M: num [1:24] 110 107 99 102 109 114 113 113 115 119 ...
names(ventas_empresa)
## [1] "V" "C" "P" "M"

1.Estime el modelo de regresión lineal, correspondiente y verifique el supuesto de normalidad, usando todas las pruebas vistas en clase. EL CASO DEL JB Y DEL SW REPRESENTE SUS RESULTADOS DE FORMA GRÁFICA Y COMENTE AL RESPECTO.

1.1 Estimacion del Modelo.

modelo_estimado <- lm(V ~ C + P + M, data = ventas_empresa)
summary(modelo_estimado)
## 
## Call:
## lm(formula = V ~ C + P + M, data = ventas_empresa)
## 
## 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

1.2 Ajuste de los residuos a la Distribución Normal.

Verificando el ajuste de los residuos a la distribución normal, se usará la librería fitdistrplus.

library(fitdistrplus)
## Warning: package 'fitdistrplus' was built under R version 4.5.3
## Cargando paquete requerido: MASS
## Cargando paquete requerido: survival
fit_normal <- fitdist(data = modelo_estimado$residuals, distr = "norm")

plot(fit_normal)

1.3 Verique el supuesto de normalidad, a través de:

a) Prueba de Normalidad de Jarque Bera

Usando tseries.

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
salida_JB<-jarque.bera.test(modelo_estimado$residuals)
salida_JB
## 
##  Jarque Bera Test
## 
## data:  modelo_estimado$residuals
## X-squared = 1.4004, df = 2, p-value = 0.4965

Grafica.

library(fastGraph)
## Warning: package 'fastGraph' was built under R version 4.5.3
alpha_sig <- 0.05
JB <- salida_JB$statistic
gl <- salida_JB$parameter
VC <- qchisq(1 - alpha_sig, gl, lower.tail = TRUE)

shadeDist(JB,
          ddist = "dchisq",
          parm1 = gl,
          lower.tail = FALSE,
          xmin = 0,
          sub = paste("VC:", round(VC,2),
                      "JB:", round(JB,2)))

cat("JB =", salida_JB$statistic,
    "\np-value =", salida_JB$p.value)
## JB = 1.400415 
## p-value = 0.4964822

En este caso, dado que el p-value = 0.4964822 > 0.05, no se rechaza la hipótesis nula de normalidad, por lo que los residuos siguen una distribución normal.

b) Prueba de Kolmogorov Smirnov -Lilliefors

Usando nortest

library(nortest)

prueba_KS <- lillie.test(modelo_estimado$residuals)

print(prueba_KS)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_estimado$residuals
## D = 0.13659, p-value = 0.2935
p.value <- prueba_KS$p.value

print(p.value)
## [1] 0.2934537

En este caso, dado que el p-value = 0.2935 > 0.05, no se rechaza la hipótesis nula de normalidad, por lo que los residuos siguen una distribución normal.

Grafica.

hist(resid(modelo_estimado),
     probability = TRUE,
     main = "Histograma de residuos",
     xlab = "Residuos")

curve(dnorm(x,
            mean = mean(resid(modelo_estimado)),
            sd = sd(resid(modelo_estimado))),
      add = TRUE)

c) Prueba de Shapiro - Wilk

Usando la librería stats (precargada al iniciar R)

salida_SW <- shapiro.test(resid(modelo_estimado))

print(salida_SW)
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(modelo_estimado)
## W = 0.95315, p-value = 0.3166
Wn_salida <- qnorm(salida_SW$p.value, lower.tail = FALSE)

print(Wn_salida)
## [1] 0.4773519

Grafica.

library(fastGraph)

shadeDist(Wn_salida,
          ddist = "dnorm",
          lower.tail = FALSE,
          sub = paste("Wn:", round(Wn_salida,3),
                      "p-value:", round(salida_SW$p.value,5)))

En este caso, dado que el p-value = 0.3166 > 0.05, no se rechaza la hipótesis nula de normalidad, por lo que los residuos siguen una distribución normal. Además, gráficamente se observa que el estadístico transformado no cae en una región crítica de rechazo.

  1. Utilizando todas las herramientas vistas en clase, evalué la situación de colinealidad de los regresores del modelo. EN EL CASO DE LA LA PRUEBA DE FG, REPRESENTE SUS RESULTADOS GRÁFICAMENTE Y COMENTE AL RESPECTO.

2.1 Índice de Condición usando la librería mctest

library(mctest)

X_mat <- model.matrix(modelo_estimado)

resultado_mctest <- mctest(mod = modelo_estimado)

resultado_mctest
## 
## Call:
## omcdiag(mod = mod, Inter = TRUE, detr = detr, red = red, conf = conf, 
##     theil = theil, cn = cn)
## 
## 
## Overall Multicollinearity Diagnostics
## 
##                        MC Results detection
## Determinant |X'X|:         0.0346         0
## Farrar Chi-Square:        71.2080         1
## Red Indicator:             0.8711         1
## Sum of Lambda Inverse:    20.9196         1
## Theil's Method:            0.5430         1
## Condition Number:         71.1635         1
## 
## 1 --> COLLINEARITY is detected by the test 
## 0 --> COLLINEARITY is not detected by the test

Los resultados obtenidos mediante la librería mctest muestran evidencia de multicolinealidad entre los regresores del modelo. En particular, el índice de condición es igual a 71.1635, valor superior a 20, lo que indica la presencia de multicolinealidad importante.

2.2 Prueba de Farrar-Glaubar

Cálculo de FG usando “mctest”

library(mctest)

resultado_fg <- mctest::omcdiag(mod = modelo_estimado)

resultado_fg
## 
## Call:
## mctest::omcdiag(mod = modelo_estimado)
## 
## 
## Overall Multicollinearity Diagnostics
## 
##                        MC Results detection
## Determinant |X'X|:         0.0346         0
## Farrar Chi-Square:        71.2080         1
## Red Indicator:             0.8711         1
## Sum of Lambda Inverse:    20.9196         1
## Theil's Method:            0.5430         1
## Condition Number:         71.1635         1
## 
## 1 --> COLLINEARITY is detected by the test 
## 0 --> COLLINEARITY is not detected by the test
m <- ncol(model.matrix(modelo_estimado)[,-1])
n <- nrow(model.matrix(modelo_estimado)[,-1])
R <- cor(model.matrix(modelo_estimado)[,-1])
determinante_R <- det(R)
chi_FG <- -(n - 1 - (2*m + 5)/6) * log(determinante_R)
gl <- m * (m - 1) / 2
VC <- qchisq(0.95, df = gl)
chi_FG
## [1] 71.20805

Grafica.

library(fastGraph)

shadeDist(chi_FG,
          ddist = "dchisq",
          parm1 = gl,
          lower.tail = FALSE,
          xmin = 0,
          sub = paste("VC:", round(VC,2),
                      "FG:", round(chi_FG,2)))

Dado que el estadístico χ²FG = 106.75 es mayor que el valor crítico de la distribución chi-cuadrado (VC = 5.99), se rechaza la hipótesis nula de no colinealidad. Por lo tanto, existe evidencia estadística de multicolinealidad entre los regresores del modelo.

2.3 Factores Inflacionarios de la Varianza (FIV)

Cálculo de los VIF’s usando “performance”.

library(performance)
## Warning: package 'performance' was built under R version 4.5.3
VIFs <- multicollinearity(modelo_estimado, verbose = FALSE)

VIFs
## # Check for Multicollinearity
## 
## Low Correlation
## 
##  Term  VIF    VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##     P 3.84 [2.41,  6.73]     1.96      0.26     [0.15, 0.42]
## 
## Moderate Correlation
## 
##  Term  VIF    VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##     C 7.63 [4.49, 13.61]     2.76      0.13     [0.07, 0.22]
##     M 9.45 [5.49, 16.91]     3.07      0.11     [0.06, 0.18]

Grafico.

library(see)
## Warning: package 'see' was built under R version 4.5.3
plot(VIFs)

Los resultados obtenidos muestran evidencia de multicolinealidad moderada entre algunos regresores del modelo. Las variables C y M presentan valores VIF relativamente elevados, mientras que la variable P presenta una correlación baja con las demás variables explicativas.

  1. Verifique el supuesto de Homocedasticidad. REPRESENTE GRÁFICAMENTE SUS RESULTADOS Y COMENTE SUS RESULTADOS.

3.1 La prueba de White (incluya los términos cruzados).

Usando “skedastic”

library(skedastic)
## Warning: package 'skedastic' was built under R version 4.5.3
white(modelo_estimado, interactions = TRUE)
## # A tibble: 1 × 5
##   statistic p.value parameter method       alternative
##       <dbl>   <dbl>     <dbl> <chr>        <chr>      
## 1      7.12   0.624         9 White's Test greater

La prueba de White arroja un estadístico de 7.12265 con un p-value de 0.6243514, el cual es mayor que 0.05. Por lo tanto, no se rechaza la hipótesis nula de homocedasticidad, indicando que no existe evidencia de heterocedasticidad en el modelo.

Grafica.

residuos <- residuals(modelo_estimado)
ajustados <- fitted(modelo_estimado)

plot(ajustados, residuos,
     main = "Residuos vs Valores Ajustados",
     xlab = "Valores Ajustados",
     ylab = "Residuos",
     pch = 19)

abline(h = 0, col = "red", lwd = 2)

En el gráfico de residuos versus valores ajustados, se observa que los residuos se distribuyen de manera aleatoria alrededor de la línea horizontal en cero, sin presentar un patrón definido ni forma de embudo. Esto sugiere que la varianza de los errores es constante a lo largo de las observaciones.

  1. Verifique el supuesto de No Autocorrelación, (verifique primero y segundo orden). USE LA PRUEBA DEL MULTIPLICADOR DE LAGRANGE, REPRESENTE GRÁFICAMENTE SUS RESULTADOS Y COMENTE AL RESPECTO.

4.1 Prueba de Durbin-Watson (opcional)

Usando “lmtest”

library(lmtest)
## Cargando paquete requerido: zoo
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
dwtest(modelo_estimado, alternative = "two.sided")
## 
##  Durbin-Watson test
## 
## data:  modelo_estimado
## DW = 1.2996, p-value = 0.05074
## alternative hypothesis: true autocorrelation is not 0

4.2 Prueba del Multiplicador de Lagrange (Breusch-Godfrey)

library(lmtest)
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

La prueba de Breusch-Godfrey arroja un estadístico LM de 3.8409 con 2 grados de libertad y un p-value de 0.1465. Dado que el p-value es mayor que 0.05, no se rechaza la hipótesis nula de ausencia de autocorrelación

Por lo tanto, se concluye que no existe evidencia de autocorrelación de primer ni de segundo orden en los residuos del modelo estimado.

Graficas.

ACF (Autocorrelación)

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
library(forecast)

ggAcf(residuals(modelo_estimado)) +
  ggtitle("Función de Autocorrelación (ACF)") +
  theme_minimal()

### PACF (Autocorrelación Parcial)

ggPacf(residuals(modelo_estimado)) +
  ggtitle("Función de Autocorrelación Parcial (PACF)") +
  theme_minimal()

Tanto los gráficos ACF como PACF muestran que los rezagos 1 y 2 se encuentran dentro de los intervalos de confianza, indicando ausencia de autocorrelación. Estos resultados son consistentes con la prueba de Breusch-Godfrey, donde no se encontró evidencia de autocorrelación de primer ni segundo orden.

En general, El modelo de regresión estimado cumple con la mayoría de los supuestos clásicos. Los residuos presentan distribución normal, no existe evidencia de heterocedasticidad ni autocorrelación. Sin embargo, se detecta la presencia de multicolinealidad entre algunos regresores, lo que podría afectar la precisión de los estimadores. En general, el modelo resulta adecuado para explicar el comportamiento de la variable dependiente.