# Cargar las bibliotecas necesarias
#install.packages("ggmap")
library(readxl)
library(dplyr)
library(ggplot2)
library(ggmap)

# Leer los datos desde el archivo Excel
datos <- read_excel("Adisol_Clientes.xlsx")

# Ver las primeras filas de los datos
head(datos)
## # A tibble: 6 × 7
##   Cliente        Dirección `Departamento cliente` Producto `Precio original ($)`
##   <chr>          <chr>     <chr>                  <chr>                    <dbl>
## 1 Adam Bianchi   7116 Rub… Sonsonate              ADISOL …                  12.3
## 2 Zaria Lindberg 3836 Gol… Santa Ana              ADI CRE…                  30.0
## 3 Kai Swinburn   4063 Sys… Sonsonate              ADIDUR …                  67.9
## 4 Coby Newton    4211 Cha… Chalatenango           ADIDUR …                 104. 
## 5 Ryleigh Rodrí… 610 Basi… Morazán                ADISOL …                  68.2
## 6 Chris Hartwell 326 Sens… San Salvador           ADIDUR …                  91.4
## # ℹ 2 more variables: Descuento <dbl>, `Precio con descuento` <dbl>
# Resumen estadístico de los precios y descuentos
summary(datos$`Precio con descuento`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    -2.0    97.0   208.0   453.3   464.1  7525.5
# Análisis de la rentabilidad por producto
rentabilidad <- datos %>%
  group_by(`Producto`) %>%
  summarise(Ventas_Totales = sum(`Precio con descuento`), 
            Descuento_Medio = mean(`Descuento`), 
            Cantidad = n(),
            Precio_Promedio = mean(`Precio con descuento`)) %>%
  arrange(desc(Ventas_Totales))

# Ver los resultados del análisis de rentabilidad
print(rentabilidad)
## # A tibble: 14 × 5
##    Producto              Ventas_Totales Descuento_Medio Cantidad Precio_Promedio
##    <chr>                          <dbl>           <dbl>    <int>           <dbl>
##  1 ADIDUR INYECCIÓN              47683.             0.2       89            536.
##  2 ADIDUR LPL                    44127.             0.2       78            566.
##  3 ADI 1 PLUS                    40242.             0.2       82            491.
##  4 ADIBOND PLUS                  37998.             0.2       65            585.
##  5 ADIDUR ANCLAJE                37633.             0.2       75            502.
##  6 ADISOL ROJO                   34892.             0.2       87            401.
##  7 ADITECHO                      34299.             0.2       77            445.
##  8 ADIPRIMER                     33337.             0.2       66            505.
##  9 ADISOL BLANCO                 32507.             0.2       80            406.
## 10 ADIBOND AZUL                  29685.             0.2       72            412.
## 11 ADI CRETE                     28124.             0.2       72            391.
## 12 ADISOL BLANCO AGUA L…         26880.             0.2       68            395.
## 13 ADIDUR GEL                    26775.             0.2       69            388.
## 14 ADILATEX                      23107.             0.2       73            317.
# Gráfico de barras de ventas totales por producto
ggplot(rentabilidad, aes(x = reorder(Producto, -Ventas_Totales), y = Ventas_Totales, fill = Producto)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  labs(title = "Ventas Totales por Producto", x = "Producto", y = "Ventas Totales ($)") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Gráfico de dispersión para visualizar la relación entre el descuento y el precio promedio
ggplot(rentabilidad, aes(x = Descuento_Medio, y = Precio_Promedio)) +
  geom_point(aes(color = Producto), size = 4) +
  geom_smooth(method = "lm") +
  labs(title = "Relación entre Descuento Medio y Precio Promedio por Producto",
       x = "Descuento Medio", y = "Precio Promedio") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# Análisis por departamento
ventas_por_departamento <- datos %>%
  group_by(`Departamento cliente`) %>%
  summarise(Ventas_Totales = sum(`Precio con descuento`),
            Cantidad_Ventas = n(),
            Clientes_Únicos = n_distinct(Cliente)) %>%
  arrange(desc(Ventas_Totales))

# Mostrar resultados
print(ventas_por_departamento)
## # A tibble: 13 × 4
##    `Departamento cliente` Ventas_Totales Cantidad_Ventas Clientes_Únicos
##    <chr>                           <dbl>           <int>           <int>
##  1 San Salvador                   62007.             156             153
##  2 Sonsonate                      56779.             100              97
##  3 San Vicente                    52835.              80              79
##  4 San Miguel                     34685.              75              70
##  5 Morazán                        34099.              76              74
##  6 La Unión                       32583.              70              70
##  7 Cabañas                        31733.              72              72
##  8 La Paz                         31067.              62              60
##  9 Chalatenango                   30513.              79              78
## 10 Santa Ana                      30306.              85              84
## 11 Cuscatlán                      30215.              68              65
## 12 Usulután                       26737.              58              56
## 13 La Libertad                    23732.              72              71
# Gráfico de ventas totales por departamento
ggplot(ventas_por_departamento, aes(x = reorder(`Departamento cliente`, -Ventas_Totales), y = Ventas_Totales, fill = `Departamento cliente`)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  labs(title = "Ventas Totales por Departamento", x = "Departamento", y = "Ventas Totales ($)") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Análisis de concentración de clientes
clientes_por_departamento <- datos %>%
  group_by(`Departamento cliente`, `Cliente`) %>%
  summarise(Ventas_Totales_Cliente = sum(`Precio con descuento`)) %>%
  ungroup() %>%
  arrange(`Departamento cliente`, desc(Ventas_Totales_Cliente))
## `summarise()` has grouped output by 'Departamento cliente'. You can override
## using the `.groups` argument.
# Mostrar concentración de clientes top en cada departamento
print(clientes_por_departamento)
## # A tibble: 1,029 × 3
##    `Departamento cliente` Cliente           Ventas_Totales_Cliente
##    <chr>                  <chr>                              <dbl>
##  1 Cabañas                Jax Robert                         3598 
##  2 Cabañas                Jarod Ralston                      3561.
##  3 Cabañas                Quinten Toro                       1715.
##  4 Cabañas                Rolando Hawes                      1713.
##  5 Cabañas                Mollie Petersson                   1664.
##  6 Cabañas                Lorelei Jackson                    1071.
##  7 Cabañas                Skye Boscawen                       996.
##  8 Cabañas                Rachael Pelletier                   791.
##  9 Cabañas                Gabriela Durden                     736 
## 10 Cabañas                Randall Moreno                      735.
## # ℹ 1,019 more rows
#las variables categóricas son tratadas adecuadamente
datos$Producto <- as.factor(datos$Producto)
datos$`Departamento cliente` <- as.factor(datos$`Departamento cliente`)

# Construir el modelo de regresión para predecir el Precio con descuento
modelo <- lm(`Precio con descuento` ~ Descuento + Producto + `Departamento cliente`, data = datos)

# Resumen del modelo para ver los resultados
summary(modelo)
## 
## Call:
## lm(formula = `Precio con descuento` ~ Descuento + Producto + 
##     `Departamento cliente`, data = datos)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -700.4 -344.7 -209.4   39.4 7001.1 
## 
## Coefficients: (1 not defined because of singularities)
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                         473.242    123.357   3.836 0.000132 ***
## Descuento                                NA         NA      NA       NA    
## ProductoADI CRETE                   -94.656    122.924  -0.770 0.441455    
## ProductoADIBOND AZUL                -67.251    123.142  -0.546 0.585100    
## ProductoADIBOND PLUS                103.498    126.560   0.818 0.413676    
## ProductoADIDUR ANCLAJE               25.197    121.244   0.208 0.835409    
## ProductoADIDUR GEL                  -94.470    124.344  -0.760 0.447577    
## ProductoADIDUR INYECCIÓN             37.641    116.235   0.324 0.746130    
## ProductoADIDUR LPL                   86.488    120.125   0.720 0.471703    
## ProductoADILATEX                   -167.070    122.206  -1.367 0.171886    
## ProductoADIPRIMER                    48.095    125.940   0.382 0.702623    
## ProductoADISOL BLANCO               -64.845    119.615  -0.542 0.587855    
## ProductoADISOL BLANCO AGUA LFG      -79.018    125.067  -0.632 0.527658    
## ProductoADISOL ROJO                 -86.636    117.036  -0.740 0.459315    
## ProductoADITECHO                    -35.463    120.351  -0.295 0.768310    
## `Departamento cliente`Chalatenango  -55.934    123.215  -0.454 0.649960    
## `Departamento cliente`Cuscatlán     -12.580    128.418  -0.098 0.921983    
## `Departamento cliente`La Libertad  -126.871    126.543  -1.003 0.316294    
## `Departamento cliente`La Paz         55.423    131.171   0.423 0.672730    
## `Departamento cliente`La Unión       21.391    127.043   0.168 0.866320    
## `Departamento cliente`Morazán         6.095    124.988   0.049 0.961116    
## `Departamento cliente`San Miguel     30.099    125.126   0.241 0.809955    
## `Departamento cliente`San Salvador  -44.582    107.990  -0.413 0.679816    
## `Departamento cliente`San Vicente   214.198    123.371   1.736 0.082826 .  
## `Departamento cliente`Santa Ana     -91.432    121.229  -0.754 0.450898    
## `Departamento cliente`Sonsonate     118.423    116.974   1.012 0.311593    
## `Departamento cliente`Usulután       13.504    133.765   0.101 0.919608    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 753.7 on 1027 degrees of freedom
## Multiple R-squared:  0.02269,    Adjusted R-squared:  -0.001096 
## F-statistic: 0.9539 on 25 and 1027 DF,  p-value: 0.5287
# Graficar los residuales para evaluar la adecuación del modelo
plot(modelo$residuals)

hist(modelo$residuals)

#Interpretación General del Modelo

  1. Formula del Modelo: Precio con descuento ~ Descuento + Producto + Departamento cliente: El modelo intenta predecir el Precio con descuento basado en el Descuento aplicado, el tipo de Producto, y el Departamento cliente.

  2. Residuales: Los residuales muestran una variación considerable, con un mínimo de -700.4 y un máximo de 7001.1. Esto indica una gran dispersión en los errores de predicción, y la presencia de valores extremos o outliers que pueden estar influyendo significativamente en el modelo.

  3. Coeficientes: (Intercepto): El precio base con descuento, cuando todas las otras variables son cero, es de 473.242. Este es significativamente diferente de cero (p < 0.001). Descuento: No se define debido a singularidades, lo que podría indicar problemas de multicolinealidad o que esta variable no varía entre los datos. Productos y Departamentos: La mayoría de los coeficientes para productos y departamentos no son estadísticamente significativos (p > 0.05), con algunas excepciones como ProductoADISOL BLANCO AGUA LFG y Departamento clienteSan Vicente, que muestran p-values que se acercan a ser significativos.

4.Significancia de los Coeficientes: La mayoría de los coeficientes tienen un valor p alto, lo que indica que no son estadísticamente significativos. Esto sugiere que ni el tipo de producto ni el departamento son predictores fuertes del Precio con descuento.

  1. Error Estándar Residual: El error estándar residual es bastante alto (753.7), lo que refleja la alta variabilidad de los residuos.

  2. R-cuadrado y R-cuadrado Ajustado: R-cuadrado es 0.02269, lo que significa que solo aproximadamente el 2.27% de la variabilidad en el Precio con descuento es explicada por el modelo. R-cuadrado ajustado es incluso menor (-0.001096), indicando que el modelo no es adecuado y no mejora significativamente la predicción sobre la media general.

  3. F-statistic y su p-value: El estadístico F es 0.9539 con un p-value de 0.5287, lo cual indica que el modelo en conjunto no es estadísticamente significativo. Esto sugiere que las variables incluidas en el modelo no proporcionan una buena explicación del Precio con descuento.

El modelo actual no parece ser efectivo para predecir el Precio con descuento basado en las variables proporcionadas. Las siguientes acciones podrían mejorar el modelo:

Revisar Datos: Verificar por errores, valores atípicos o inexactitudes en los datos. Explorar Otras Variables: Incluir otras variables que podrían tener un impacto en el Precio con descuento. Revisar Multicolinealidad: El hecho de que el coeficiente para Descuento no se haya definido sugiere que puede haber un problema de multicolinealidad que debe ser investigado. Modelo de Transformación: Considerar transformaciones de los datos o de la respuesta para mejorar la homogeneidad de los residuos y el ajuste del modelo.

Interpretación de la Gráfica de Residuos

  1. Patrón de los Residuos: Aleatoriedad: Idealmente, los residuos deben estar distribuidos aleatoriamente alrededor de la línea horizontal en cero, sin mostrar patrones discernibles. En tu gráfico, la mayoría de los residuos se concentran cerca del cero, lo cual es un buen signo. Outliers: Hay algunos puntos que se desvían significativamente de la mayoría de los residuos, especialmente algunos con valores residuales muy altos (por encima de 2000 y hasta 6000). Estos pueden ser outliers o puntos influyentes que podrían estar afectando la precisión de tu modelo.

  2. Homoscedasticidad: Los residuos deben mostrar varianza constante (homoscedasticidad) en diferentes rangos de valores predichos. Aunque no se muestra directamente la relación con los valores predichos en esta gráfica, no parece haber un patrón claro de cambio en la dispersión de los residuos a lo largo del índice, lo que generalmente es positivo. Sin embargo, los puntos extremos sugieren que podrían existir problemas en ciertos rangos.

  3. Independencia: La independencia de los residuos es otro aspecto importante. Dado que el gráfico muestra los residuos ordenados por índice y no hay patrones obvios de secuencialidad o ciclos, esto puede indicar que los residuos son independientes entre sí, aunque este aspecto es mejor evaluado con pruebas estadísticas específicas o gráficas de autocorrelación.

Recomendaciones Basadas en la Gráfica

Investigar Outliers: Dado que hay varios residuos que son considerablemente más altos que otros, sería útil examinar estos puntos para determinar si hay errores en los datos, si son casos atípicos legítimos, o si son influenciados por alguna especificidad no capturada por el modelo. Verificar Modelado: Considera si tu modelo necesita incorporar términos de interacción, transformaciones de variables (como logaritmos si los datos son muy sesgados), o si hay variables omitidas que podrían mejorar el modelo. Pruebas Adicionales: Realizar pruebas de diagnóstico adicionales como la prueba de Breusch-Pagan para la homoscedasticidad o la prueba de Durbin-Watson para la autocorrelación de los residuos.

El modelo parece comportarse adecuadamente en términos de la distribución general de los residuos, pero los outliers destacados necesitan ser investigados más a fondo para mejorar la robustez y precisión del modelo.