library(readxl)
ventas_empresa <- read_excel("C:/Users/mendo/Downloads/ventas_empresa.xlsx")
View(ventas_empresa)
datos <-ventas_empresa
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.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

{r}

residuos <- residuals(modelo)
hist(residuos,
     main = "Histograma de Residuos",
     col = "skyblue",
     xlab = "Residuos")

{r}

qqnorm(residuos)
qqline(residuos, col = "red")

library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
jarque.bera.test(residuos)
## 
##  Jarque Bera Test
## 
## data:  residuos
## X-squared = 1.4004, df = 2, p-value = 0.4965

{r}

densidad <- density(residuos)
plot(densidad,
     main = "Densidad de los residuos",
     lwd = 2)

curve(dnorm(x,
            mean = mean(residuos),
            sd = sd(residuos)),
      add = TRUE,
      col = "red",
      lwd = 2)

legend("topright",
       legend = c("Residuos","Normal teórica"),
       col = c("black","red"),
       lwd = 2)

shapiro.test(residuos)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.95315, p-value = 0.3166
correlaciones <- cor(datos[, c("C","P","M")])
correlaciones
##           C         P        M
## C 1.0000000 0.8204521 0.931240
## P 0.8204521 1.0000000 0.857916
## M 0.9312400 0.8579160 1.000000
library(corrplot)
## corrplot 0.95 loaded
corrplot(correlaciones,
         method = "number",
         type = "upper")

library(car)
## Cargando paquete requerido: carData
vif(modelo)
##        C        P        M 
## 7.631451 3.838911 9.449210
library(olsrr)
## 
## Adjuntando el paquete: 'olsrr'
## The following object is masked from 'package:datasets':
## 
##     rivers
ols_eigen_cindex(modelo)
##     Eigenvalue Condition Index    intercept            C            P
## 1 3.9869237681         1.00000 0.0007213226 9.632167e-05 0.0002714936
## 2 0.0095007154        20.48523 0.8775733849 4.947488e-03 0.0877003286
## 3 0.0027882470        37.81406 0.1182991896 1.594022e-01 0.8478049007
## 4 0.0007872695        71.16349 0.0034061029 8.355540e-01 0.0642232771
##              M
## 1 8.216652e-05
## 2 7.543423e-03
## 3 6.362314e-02
## 4 9.287513e-01
valores <- vif(modelo)
barplot(valores,
        main = "Valores VIF",
        col = "lightblue",
        ylab = "VIF")
abline(h = 10,
       col = "red",
       lwd = 2)

{r}

  plot(fitted(modelo), residuos,
     main = "Residuos vs Valores Ajustados",
     xlab = "Valores Ajustados",
     ylab = "Residuos")
abline(h = 0,
       col = "red")

library(lmtest)
## Cargando paquete requerido: zoo
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(modelo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 0.087869, df = 3, p-value = 0.9933
plot(modelo$fitted.values,
     abs(residuos),
     main = "Magnitud de residuos",
     xlab = "Valores ajustados",
     ylab = "|Residuos|")

abline(lm(abs(residuos) ~ modelo$fitted.values),
       col = "blue",
       lwd = 2)

r

plot(residuos,
     type = "l",
     main = "Serie de residuos",
     ylab = "Residuos",
     xlab = "Observaciones")
abline(h = 0,
       col = "red")

bgtest(modelo, order = 1)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  modelo
## LM test = 2.5963, df = 1, p-value = 0.1071
bgtest(modelo, order = 2)
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  modelo
## LM test = 3.8409, df = 2, p-value = 0.1465
acf(residuos,
    main = "Correlograma de residuos")