#2 Leer base de datos
df <- read.csv("C:/Users/chave/OneDrive/Documentos/Analisis de Datos 7/Sample - Superstore.csv")
head(df)
## Row.ID Order.ID Order.Date Ship.Date Ship.Mode Customer.ID
## 1 1 CA-2016-152156 11/8/2016 11/11/2016 Second Class CG-12520
## 2 2 CA-2016-152156 11/8/2016 11/11/2016 Second Class CG-12520
## 3 3 CA-2016-138688 6/12/2016 6/16/2016 Second Class DV-13045
## 4 4 US-2015-108966 10/11/2015 10/18/2015 Standard Class SO-20335
## 5 5 US-2015-108966 10/11/2015 10/18/2015 Standard Class SO-20335
## 6 6 CA-2014-115812 6/9/2014 6/14/2014 Standard Class BH-11710
## Customer.Name Segment Country City State
## 1 Claire Gute Consumer United States Henderson Kentucky
## 2 Claire Gute Consumer United States Henderson Kentucky
## 3 Darrin Van Huff Corporate United States Los Angeles California
## 4 Sean O'Donnell Consumer United States Fort Lauderdale Florida
## 5 Sean O'Donnell Consumer United States Fort Lauderdale Florida
## 6 Brosina Hoffman Consumer United States Los Angeles California
## Postal.Code Region Product.ID Category Sub.Category
## 1 42420 South FUR-BO-10001798 Furniture Bookcases
## 2 42420 South FUR-CH-10000454 Furniture Chairs
## 3 90036 West OFF-LA-10000240 Office Supplies Labels
## 4 33311 South FUR-TA-10000577 Furniture Tables
## 5 33311 South OFF-ST-10000760 Office Supplies Storage
## 6 90032 West FUR-FU-10001487 Furniture Furnishings
## Product.Name Sales
## 1 Bush Somerset Collection Bookcase 261.9600
## 2 Hon Deluxe Fabric Upholstered Stacking Chairs, Rounded Back 731.9400
## 3 Self-Adhesive Address Labels for Typewriters by Universal 14.6200
## 4 Bretford CR4500 Series Slim Rectangular Table 957.5775
## 5 Eldon Fold 'N Roll Cart System 22.3680
## 6 Eldon Expressions Wood and Plastic Desk Accessories, Cherry Wood 48.8600
## Quantity Discount Profit
## 1 2 0.00 41.9136
## 2 3 0.00 219.5820
## 3 2 0.00 6.8714
## 4 5 0.45 -383.0310
## 5 2 0.20 2.5164
## 6 7 0.00 14.1694
#3 Construcción de variables
#Nota, la predicción que vamos a hacer es de ventas en valores corrientes
df_reg <-df %>% #Llamar la base de datos
filter(State == "Kentucky") %>%
select(Order.Date, Sales) %>% #Seleccionar 2 columnas Order.Date y sales
mutate(Order.Date = mdy(Order.Date)) %>% #Cambiar a fecha
mutate(Fecha = floor_date(Order.Date, unit="month")) %>%
group_by(Fecha) %>%
summarise(Ventas = sum (Sales)) %>%
mutate(Mes = seq_along (Fecha))# Crear variable x
head(df_reg)
## # A tibble: 6 × 3
## Fecha Ventas Mes
## <date> <dbl> <int>
## 1 2014-01-01 4375. 1
## 2 2014-03-01 783. 2
## 3 2014-04-01 1945. 3
## 4 2014-05-01 199. 4
## 5 2014-08-01 25.5 5
## 6 2014-11-01 941. 6
#4 Visualización
df_reg %>%
ggplot(., aes(x=Mes, y=Ventas)) +
geom_point() +
geom_line()+
geom_smooth(method = "lm", formula = "y ~ x")
#5 Gráficas de caja y bigotes
#Esta gráfica sirve para encontrar valores atípicos
df_reg %>%
ggplot(., aes(x=Ventas)) +
geom_boxplot()
#6 Revisar si la variable y tiene una distribución aproximadamente normal
df_reg %>%
ggplot(., aes(x=Ventas)) +
geom_histogram(bins=30, aes(y=after_stat(density))) +
geom_density()
#7 Análisis de correlación
#Calculamos coeficiente de correlación de Pearson, con Mes como x
with(df_reg, cor.test(Mes, Ventas))
##
## Pearson's product-moment correlation
##
## data: Mes and Ventas
## t = 1.1681, df = 27, p-value = 0.253
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1600369 0.5422495
## sample estimates:
## cor
## 0.2193337
#La correlación va de -1 a 1
#Valores extremos indican correlación más fuerte
#Puede ser positiva (suben o bajan juntas), o negativa (si una sube, la otra baja)
#8 Modelo de regresión
modelo_lineal <- lm(Ventas ~ Mes, data = df_reg)
stargazer(modelo_lineal, type = "text")
##
## ===============================================
## Dependent variable:
## ---------------------------
## Ventas
## -----------------------------------------------
## Mes 39.553
## (33.860)
##
## Constant 668.487
## (581.566)
##
## -----------------------------------------------
## Observations 29
## R2 0.048
## Adjusted R2 0.013
## Residual Std. Error 1,525.585 (df = 27)
## F Statistic 1.365 (df = 1; 27)
## ===============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
#el modelo es y = a + bx
#COnstant = a
#Pendiente= b
#Mes = x
#9 Obtener los coeficientes del modelo
coeficientes <- coef(modelo_lineal)
intercepto <- coeficientes["(Intercept)"]
pendiente <- coeficientes["Mes"]
coeficientes
## (Intercept) Mes
## 668.48660 39.55319
#10 Obtención de datos
#Extender la serie temporal para 6 meses
df_futuro <- data.frame(Fecha = seq.Date(from = max(df_reg$Fecha) + month(1),
by = "month",
length.out = 6),
Mes = seq(49, 54, 1))
#Generar predicciones
predicciones <- predict(modelo_lineal, newdata = df_futuro, interval = "confidence")
#Convertir las predicciones a un DataFrame
df_predicciones <- as.data.frame(predicciones)
colnames(df_predicciones) <- c("Ventas", "Bajo", "Alto") #Nombrar las columnas
#Unir las predicciones y los intervalos de confianza al DataFrame futuro
df_futuro <- cbind(df_futuro, df_predicciones)
df_futuro
## Fecha Mes Ventas Bajo Alto
## 1 2017-12-02 49 2606.593 173.96892 5039.217
## 2 2018-01-02 50 2646.146 146.00434 5146.288
## 3 2018-02-02 51 2685.699 117.93533 5253.463
## 4 2018-03-02 52 2725.253 89.76992 5360.735
## 5 2018-04-02 53 2764.806 61.51536 5468.096
## 6 2018-05-02 54 2804.359 33.17819 5575.540
#11 Combinar data frames
#Combinar datos actuales con las predicciones futuras
df_total <-bind_rows(df_reg, df_futuro)
#Mostrar las últimas filas con las predicciones y los intervalos
tail (df_total, 6)
## # A tibble: 6 × 5
## Fecha Ventas Mes Bajo Alto
## <date> <dbl> <dbl> <dbl> <dbl>
## 1 2017-12-02 2607. 49 174. 5039.
## 2 2018-01-02 2646. 50 146. 5146.
## 3 2018-02-02 2686. 51 118. 5253.
## 4 2018-03-02 2725. 52 89.8 5361.
## 5 2018-04-02 2765. 53 61.5 5468.
## 6 2018-05-02 2804. 54 33.2 5576.
#12 Gráfica con predicción
# Graficar los valores pasados y predicciones con intervalos de confianza
ggplot(df_total, aes(x = Fecha, y = Ventas)) +
geom_point(data = df_reg) + # Valores históricos
geom_line(data = df_reg) + # Linea de valores históricos
geom_smooth(method = "lm", formula = y ~ x, color = "blue", data = df_reg) +
geom_ribbon(data = df_futuro, aes(ymin = Bajo, ymax =Alto), fill = "lightblue") +
geom_point(data = df_futuro, aes(y = Ventas), color = "red") + #Valores predichos
geom_line(data = df_futuro, aes(y = Ventas), color = "red", linetype = "dashed") +
labs(tittle = "Predicción de ventas enero-junio 2018",
x = "Mes",
y="Ventas")