# Cargar las librerías necesarias
if(!require(nortest)) install.packages("nortest")
## Cargando paquete requerido: nortest
if(!require(car)) install.packages("car")
## Cargando paquete requerido: car
## Warning: package 'car' was built under R version 4.5.3
## Cargando paquete requerido: carData
## Warning: package 'carData' was built under R version 4.5.3
if(!require(lmtest)) install.packages("lmtest")
## Cargando paquete requerido: lmtest
## Warning: package 'lmtest' was built under R version 4.5.3
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
if(!require(mctest)) install.packages("mctest")
## Cargando paquete requerido: mctest
if(!require(ggplot2)) install.packages("ggplot2")
## Cargando paquete requerido: ggplot2
if(!require(tseries)) install.packages("tseries") # Jarque-Bera
## Cargando paquete requerido: 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
if(!require(corrplot)) install.packages("corrplot") # Gráfico de Colinealidad
## Cargando paquete requerido: corrplot
## Warning: package 'corrplot' was built under R version 4.5.3
## corrplot 0.95 loaded
library(nortest)
library(ggplot2)
library(tseries)
library(car)
library(lmtest)
library(mctest)
library(corrplot)
library(readxl)
ventas_empresa <- read_excel("C:/Users/gisel/Downloads/ventas_empresa.xlsx")
View(ventas_empresa)
# 2. CARGA DE DATOS
datos <- data.frame(
V = c(607, 590, 543, 558, 571, 615, 606, 593, 582, 646, 619, 651,
648, 694, 697, 707, 693, 680, 664, 747, 708, 702, 726, 734),
C = c(197, 208, 181, 194, 192, 196, 203, 200, 198, 221, 218, 213,
207, 228, 249, 225, 237, 236, 231, 260, 254, 239, 251, 256),
P = c(173, 152, 150, 150, 163, 179, 169, 166, 159, 206, 181, 192,
191, 217, 190, 221, 189, 192, 193, 233, 196, 199, 213, 224),
M = c(110, 107, 99, 102, 109, 114, 113, 113, 115, 119, 120, 123,
122, 131, 133, 135, 133, 128, 134, 135, 139, 138, 142, 145)
)
# 3. ESTIMACIÓN DEL MODELO DE REGRESIÓN LINEAL
# Modelo: V = beta0 + beta1*C + beta2*P + beta3*M + u
modelo <- lm(V ~ C + P + M, data = datos)
summary(modelo)
##
## Call:
## lm(formula = V ~ C + P + M, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -17.319 -4.766 1.927 6.070 13.672
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 102.7952 19.0326 5.401 2.75e-05 ***
## C 0.9046 0.2277 3.972 0.000751 ***
## P 0.9143 0.1644 5.560 1.92e-05 ***
## M 1.4238 0.4712 3.022 0.006737 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.491 on 20 degrees of freedom
## Multiple R-squared: 0.9781, Adjusted R-squared: 0.9748
## F-statistic: 297.7 on 3 and 20 DF, p-value: < 2.2e-16
# 4. PRUEBAS DE NORMALIDAD (JB Y SW + GRÁFICOS)
print("PRUEBAS DE NORMALIDAD")
## [1] "PRUEBAS DE NORMALIDAD"
shapiro.test(residuals(modelo)) # Shapiro-Wilk
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo)
## W = 0.93977, p-value = 0.1612
jarque.bera.test(residuals(modelo)) # Jarque-Bera
##
## Jarque Bera Test
##
## data: residuals(modelo)
## X-squared = 1.6865, df = 2, p-value = 0.4303
lillie.test(residuals(modelo)) # Lilliefors
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: residuals(modelo)
## D = 0.16587, p-value = 0.08641
# Gráficos de Normalidad
par(mfrow=c(1,2))
hist(residuals(modelo), probability = TRUE, main="Histograma (Normalidad)",
xlab="Residuales", col="lightblue")
curve(dnorm(x, mean=mean(residuals(modelo)), sd=sd(residuals(modelo))), add=TRUE, col="red", lwd=2)
qqPlot(modelo, main="QQ-Plot (Normalidad)", ylab="Residuales")

## [1] 10 11
# 5. COLINEALIDAD (FARRAR-GLAUBER + GRÁFICO)
#Preparar la matriz de correlación de los regresores
X_vars <- as.matrix(datos[, c("C", "P", "M")])
R <- cor(X_vars) # Matriz de correlación
#CALCULAR EL DETERMINANTE (Base de la prueba de Farrar-Glauber)
# Si el det es cercano a 0, hay colinealidad.
det_R <- det(R)
cat("Determinante de la matriz de correlación (R):", det_R, "\n")
## Determinante de la matriz de correlación (R): 0.03461025
#CALCULAR EL ESTADÍSTICO CHI-CUADRADO DE FARRAR-GLAUBER
n <- nrow(datos) # Número de observaciones
k <- ncol(X_vars) # Número de regresores
chi_fg <- -(n - 1 - (2 * k + 5) / 6) * log(det_R)
p_val_fg <- pchisq(chi_fg, df = k*(k-1)/2, lower.tail = FALSE)
#MOSTRAR RESULTADOS COMO TABLA
res_fg <- data.frame(Estadistico_Chi2 = chi_fg,
GL = k*(k-1)/2,
P_Valor = p_val_fg)
print("Resultado Manual de Farrar-Glauber (Global)")
## [1] "Resultado Manual de Farrar-Glauber (Global)"
print(res_fg)
## Estadistico_Chi2 GL P_Valor
## 1 71.19631 3 2.366261e-15
#REPRESENTACIÓN GRÁFICA (Obligatorio en tu examen)
# Usamos una alternativa que casi nunca da error
library(corrplot)
corrplot.mixed(R, lower = "number", upper = "pie",
tl.col = "black", title = "Diagnóstico de Colinealidad",
mar = c(0,0,1,0))

# COMPLEMENTO: VIF
library(car)
print("Factores de Inflación de la Varianza (VIF)")
## [1] "Factores de Inflación de la Varianza (VIF)"
vif(modelo)
## C P M
## 7.246812 3.991871 9.934857
# 6. HOMOCEDASTICIDAD (BP + GRÁFICO)
print("PRUEBA DE HOMOCEDASTICIDAD")
## [1] "PRUEBA DE HOMOCEDASTICIDAD"
bptest(modelo)
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 0.19636, df = 3, p-value = 0.9782
# Gráfico de Homocedasticidad
plot(modelo$fitted.values, residuals(modelo), main="Residuales vs Valores Ajustados",
xlab="V Predicha", ylab="Residuales", pch=19, col="darkblue")
abline(h=0, col="red", lwd=2)

# 7. NO AUTOCORRELACIÓN (BREUSCH-GODFREY 1° Y 2° ORDEN + ACF)
print("PRUEBAS DE AUTOCORRELACIÓN")
## [1] "PRUEBAS DE AUTOCORRELACIÓN"
bgtest(modelo, order = 1)
##
## Breusch-Godfrey test for serial correlation of order up to 1
##
## data: modelo
## LM test = 2.0047, df = 1, p-value = 0.1568
bgtest(modelo, order = 2)
##
## Breusch-Godfrey test for serial correlation of order up to 2
##
## data: modelo
## LM test = 3.016, df = 2, p-value = 0.2213
# Gráfico ACF (Multiplicador de Lagrange)
acf(residuals(modelo), main="Correlograma ACF de Residuales")
