Objetivos

Objetivo general:

Analizar el comportamiento de consumo de los clientes durante el Black Friday, identificando el nicho de mercado de los consumidores a partir de una muestra representativa de 120 datos extraídos de una base de 47,734 transacciones.

Objetivos específicos:

Identificar patrones de compra por género: Examinar una muestra aleatoria para detectar tendencias de consumo según el género, diferenciando las preferencias y comportamientos de hombres y mujeres.

Detectar oportunidades de mercado en las ciudades con mayor volumen de compras: Analizar las ciudades donde se realizaron más transacciones para encontrar áreas de interés para posibles inversores.

Evaluar los ingresos por género: Determinar qué género genera más ingresos en proporción, evaluando si las mujeres o los hombres tienen una mayor propensión a comprar.

Analizar la relación entre edad e ingresos: Estudiar la relación entre la edad de los consumidores y sus ingresos para identificar qué grupos etarios son más propensos a realizar compras significativas.

Definir el nicho de mercado óptimo: A partir de la muestra aleatoria, identificar el segmento de mercado más realista y rentable para dirigir esfuerzos comerciales.

Aplicar análisis estadístico utilizando R Studio: Desarrollar un estudio detallado del comportamiento del consumidor mediante herramientas estadísticas en el entorno de programación R Studio.

Utilizar intervalos de confianza para mejorar la comprensión del riesgo: Proporcionar una mejor comprensión de la incertidumbre asociada a la inversión en distintos tipos de tiendas, ciudades y segmentos poblacionales, utilizando intervalos de confianza.

Validar teorías mediante pruebas de hipótesis: Comprobar o refutar las teorías y estimaciones realizadas a partir de la muestra aleatoria mediante pruebas de hipótesis, aportando rigor estadístico a las conclusiones.

Marco Teórico

El análisis de datos es fundamental para comprender y extraer conclusiones sobre el comportamiento de los consumidores durante el Black Friday en Estados Unidos. Este análisis ayuda a las empresas a identificar tendencias y prever ventas futuras. A continuación, se describen las principales técnicas utilizadas:

Análisis Descriptivo

  • Media: Indica cuánto gastan en promedio los clientes.
  • Desviación Estándar: Muestra qué tan dispersos están los datos respecto a la media.

Distribución Normal

  • Se verifica si los datos siguen una distribución normal utilizando herramientas como histogramas y medidas de asimetría y forma.

Intervalos de Confianza

  • Proporcionan un rango donde se espera que caigan los valores de la media de las compras y la proporción de ventas superiores a un cierto monto (por ejemplo, US$5.000).

Pruebas de Hipótesis

  • Compara medias entre diferentes grupos (por ejemplo, hombres vs. mujeres) y verifica si la media de las compras es mayor que un valor conocido.

Análisis de Proporciones y Varianzas

  • Estima la proporción de ventas que superan un cierto monto y compara la dispersión de los datos entre diferentes grupos.

En resumen, este análisis permite entender mejor cómo compran los clientes durante el Black Friday, lo cual es crucial para tomar decisiones en marketing, inventarios y ofertas futuras.

Actividad 1

En esta sección y en los ejercicios futuros asuman que los 47.734 datos corresponden a la población de clientes de la cadena de almacenes que obtuvo la información de la base de datos descargada. Se quiere estudiar cómo fueron las compras en esa jornada, por lo que se analizará principalmente la variable PURCHASE.

A

Extraiga una muestra aleatoria de tamaño 120, use los últimos dígitos de la cédula de los integrantes del grupo. Debe explicar el paso a paso y adjuntar la muestra en formado .xlsx (Solo la muestra, el archivo no debe contener fórmulas ni procesos allí usados).

Solución A

library(readxl)

#Datos del archivo Excel
Blackfriday <- read_excel("Blackfriday.xlsx")

View(Blackfriday)

set.seed(22893408)

Data.blackfriday <- Blackfriday

#Muestra
muestra <- Data.blackfriday[sample(nrow(Data.blackfriday), size = 120), ]

View(muestra)

#install.packages("openxlsx")
#library(openxlsx)

#write.xlsx(muestra, file = "muestra_blackfriday.xlsx")

#setwd("C:/Users/Acer/Desktop/4TO SEMESTRE/P. y E. Fundamental/Parcial Final/MUESTRA EXCEL")

#Exportar en formato Excel
#write.table(muestra, file = "Muestra_BlackFriday", sep = ";", row.names = F)

B

Realice un análisis descriptivo con las variables “Gender”, “City_Category” e “Income”

Soluciòn B

# Cargar librerías necesarias
library(ggplot2)

# Crear gráfico de dispersión con línea de tendencia
ggplot(muestra, aes(x = Age, y = Purchase)) +
  geom_point(color = "pink", alpha = 0.6) +  # Puntos de dispersión
  geom_smooth(method = "lm", color = "lightblue", se = FALSE) +  # Línea de tendencia (regresión lineal)
  labs(title = "Relación entre Edad y Monto de Compra",
       x = "Edad",
       y = "Monto de Compra",
       caption = "Línea roja: Regresión lineal") +
  theme_minimal() +  # Tema limpio y minimalista
  theme(plot.title = element_text(hjust = 0.5, size = 15),  # Ajustar el título
        axis.title = element_text(size = 12))  # Ajustar el tamaño de las etiquetas de los ejes
## `geom_smooth()` using formula = 'y ~ x'

Gráfica Hecha por: Chat GPT

Variables Gender

Tabla de Distribución de Género en la Muestra

table(muestra$Gender)
## 
##  F  M 
## 31 89

Tabla de Distribución Porcentual de Género

prop.table(table(muestra$Gender)) * 100
## 
##        F        M 
## 25.83333 74.16667
#Visualización Mejorada del Gráfico

#install.packages("showtext")
#Librería para usar fuentes de Google
library(showtext)
## Loading required package: sysfonts
## Loading required package: showtextdb
showtext_auto()

#Fuente "Lora"
font_add_google("Lora", "lora")

par(family = "lora")

#Cantidad de cada género en la muestra
gender_counts <- table(muestra$Gender)

#Porcentaje de cada género
gender_pct <- round(gender_counts / sum(gender_counts) * 100, 1)  #Porcentajes redondeados

#Etiquetas para el gráfico
labels <- paste(gender_pct, "%", sep = " ")

#Colores para el gráfico
colores <- c("#3365d3", "#f34c9d")

#Gráfico
pie(gender_counts, 
    labels = labels,               #Etiquetas
    col = colores,                 #Colores
    main = "Distribución de Género Que compraron en el Black Friday",  #Título
    border = "white",              #Borde para el gráfico
    radius = 0.9,                  #Radio
      )

#Leyenda del gráfico
legend("topright", 
       legend = c("Hombres", "Mujeres"),  #Leyenda
       fill = colores,                    #Colores
       cex = 1.2,                         #Tamaño del texto
       title = "Género")                  #Título

Gráfica Hecha por: Chat GPT

Variables City_Category
# Crear gráfico de barras mejorado con colores distintos por categoría
ggplot(muestra, aes(x = reorder(City_Category, Purchase), y = Purchase, fill = City_Category)) +
  geom_bar(stat = "identity", show.legend = FALSE) +  # Crear las barras con borde negro
  scale_y_continuous(labels = scales::comma) +  # Escalar eje Y con formato legible
  scale_fill_manual(values = c("A" = "#66c2a5", "B" = "#fc8d62", "C" = "#8da0cb")) +  # Colores diferentes por ciudad
  labs(title = "Compras Totales por Categoría de Ciudad",
       x = "Categoría de Ciudad",
       y = "Total de Compras") +
  coord_flip() +  # Voltear el gráfico para facilitar la lectura
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),  # Título más grande y en negrita
    axis.title = element_text(size = 13),  # Ajustar el tamaño de las etiquetas
    axis.text.x = element_text(size = 11),  # Agrandar los números del eje X
    panel.grid.major = element_line(color = "gray85"),  # Cambiar el color de las líneas de la cuadrícula
    panel.grid.minor = element_blank()  # Quitar las líneas de la cuadrícula menor
  )

Gráfica Hecha por: Chat Gpt

Tabla Distribución de Categorías de Ciudad en la Muestra

table(muestra$City_Category)
## 
##  A  B  C 
## 26 51 43

Tabla Porcentaje de Compradores por Categoría de Ciudad

prop.table(table(muestra$City_Category)) * 100
## 
##        A        B        C 
## 21.66667 42.50000 35.83333
library(showtext)

showtext_auto()

font_add_google("Lora", "lora")


par(family = "lora")


city_table <- table(muestra$City_Category)
prop_city <- prop.table(city_table) * 100


barplot(city_table, 
        col = c("#c0c7fb", "#f99973", "#f6c0d8"), 
        main = "Distribución por Categoría de Ciudad", 
        ylab = "Frecuencia", 
        xlab = "Categoría de Ciudad", 
        border = "white",  # Bordes de las barras
        ylim = c(0, max(city_table) * 1.2),  # Ajustar el límite superior
        cex.axis = 0.8,  # Tamaño de las etiquetas de los ejes
        cex.names = 0.9,  # Tamaño de las etiquetas de las categorías
        las = 1) 


text(x = barplot(city_table, plot = FALSE), 
     y = city_table, 
     labels = city_table, 
     pos = 3,  
     cex = 0.8, 
     col = "black")

library(showtext)

showtext_auto()

font_add_google("Lora", "lora")

par(family = "lora")


gender_table <- table(muestra$Gender)
city_table <- table(muestra$City_Category)

Tabla Conteo de Género en la Muestra

gender_table
## 
##  F  M 
## 31 89

Conteo de Categorías de Ciudad en la Muestra

city_table
## 
##  A  B  C 
## 26 51 43

Distribución Proporcional de Género: Femenino y Masculino

prop_gender <- prop.table(gender_table)

prop_gender
## 
##         F         M 
## 0.2583333 0.7416667

Proporción de Compradores por Categoría de Ciudad

prop_city <- prop.table(city_table)

prop_city
## 
##         A         B         C 
## 0.2166667 0.4250000 0.3583333

Análisis de la Relación entre Género y Ciudad

tabla_contingencia <- table(muestra$Gender, muestra$City_Category)

tabla_contingencia
##    
##      A  B  C
##   F  6 17  8
##   M 20 34 35
barplot(tabla_contingencia, beside = TRUE, legend = rownames(tabla_contingencia),
        col = c("#f34c9d", "#3365d3"), main = "Distribución de Género que compraron en cada  Ciudad",
        xlab = "Categoría de Ciudad", ylab = "Frecuencia", border = "white")

mosaicplot(tabla_contingencia, color = c("#3365d3", "#f34c9d"), 
           main = "Relación entre Género y Categoría de Ciudad", 
           xlab = "Género", ylab = "Categoría de Ciudad", 
           las = 1, cex.axis = 0.8)

Gráfica Hecha por: Chat GPT

Variables Income
income <- muestra$Income

#Análisis
cat("Media de ingreso de la muestra:", mean(income))
## Media de ingreso de la muestra: 12803.66
cat("Mediana del ingreso de la muestra:", median(income))
## Mediana del ingreso de la muestra: 12568
cat("Desviación estándar del ingreso de la muestra:", sd(income))
## Desviación estándar del ingreso de la muestra: 2886.377
cat("Variacion del ingreso de la muestra:", var(income))
## Variacion del ingreso de la muestra: 8331175
cat("Rango del ingreso de la muestra:", range(income))
## Rango del ingreso de la muestra: 6752 21503

Cálculo de los Cuantiles del Ingreso (25%, 50% y 75%)

quantile(muestra$Income, probs = c(0.25, 0.5, 0.75), na.rm = TRUE)
##      25%      50%      75% 
## 11045.50 12568.00 14580.75

Histograma

library(ggplot2)

# Histograma
ggplot(muestra, aes(x = Income)) +
  geom_histogram(binwidth = 500, fill = "#dee255", color = "white", alpha = 0.8) +
  labs(title = "Distribución del Ingreso",
       x = "Ingreso",
       y = "Frecuencia") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    axis.title.x = element_text(size = 14, margin = margin(t = 10)),
    axis.title.y = element_text(size = 14, margin = margin(r = 10)),
    axis.text = element_text(size = 12)
  )

Comparación de Ingreso por Género

# Comparación del ingreso por género con leyenda personalizada
ggplot(muestra, aes(x = Gender, y = Income, fill = Gender)) +
  geom_boxplot(alpha = 0.7, outlier.color = "#f99973", outlier.shape = 16, outlier.size = 2) +
  scale_fill_manual(values = c("#3365d3", "#f34c9d")) + 
  labs(title = "Comparación del Ingreso por Género",
       x = "Género",
       y = "Ingreso",
       fill = "Género") + 
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    axis.title.x = element_text(size = 14, margin = margin(t = 10)),
    axis.title.y = element_text(size = 14, margin = margin(r = 10)),
    axis.text = element_text(size = 12),
    legend.position = "right"
  )

Gráfica Hecha por: Chat GPT

Relación entre ingreso y edad

#Relación entre ingreso y edad
ggplot(muestra, aes(x = Age, y = Income)) +
  geom_point(color = "#3c6d1e", size = 3, alpha = 0.6) +  # Puntos personalizados
  geom_smooth(method = "lm", color = "#2c3e50", se = FALSE, linetype = "dashed") +  # Línea de tendencia
  labs(title = "Relación entre Ingreso y Edad", 
       x = "Edad", 
       y = "Ingreso") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    axis.title.x = element_text(size = 14, margin = margin(t = 10)),
    axis.title.y = element_text(size = 14, margin = margin(r = 10)),
    axis.text = element_text(size = 12)
  )
## `geom_smooth()` using formula = 'y ~ x'

#Sesgo y Curtosis del ingreso
sesgo_ingreso <- mean((muestra$Income - mean(muestra$Income))^3) / sd(muestra$Income)^3
curtosis_ingreso <- mean((muestra$Income - mean(muestra$Income))^4) / sd(muestra$Income)^4 - 3

cat("Sesgo del ingreso:", round(sesgo_ingreso, 3))
## Sesgo del ingreso: 0.268
cat("Curtosis del ingreso:", round(curtosis_ingreso, 3))
## Curtosis del ingreso: 0.129

C

De la variable PURCHASE, determine el valor de la media y la desviación estándar poblacionales y muestrales (tienen la población y una muestra). Explique brevemente quién es el estimador de quién allí. Además, calcule la probabilidad de que la variable media muestral sea mayor o igual que el valor de la poblacional.

Soluciòn C

  #Media y desviación estándar poblacional
  media_poblacional <- mean(Blackfriday$Purchase);media_poblacional
## [1] 9508.259
  desv_poblacional <- sd(Blackfriday$Purchase);desv_poblacional
## [1] 5001.657
  #Media y desviación estándar muestra
  media_muestral <- mean(muestra$Purchase);media_muestral
## [1] 8966.417
  desv_muestral <- sd(muestra$Purchase);desv_muestral
## [1] 4905.116
  boxplot(Blackfriday$Purchase, las=1, col="#c0c7fb",
          horizontal=TRUE, xlab="income")

  summary(muestra$Purchase)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   -5615    5292    9415    8966   12677   18565
  purchase_filtrado <- muestra$Purchase[muestra$Purchase >= 0]
  
 
  
  n <- length(muestra$PURCHASE) 
  mu <- media_poblacional  
  sigma <- desv_poblacional  #
  x_bar <- media_muestral  
  
  z_score <- (x_bar - mu) / (sigma / sqrt(n))
  
  probabilidad <- 1 - pnorm(z_score)
  
  cat("Probabilidad de que la media muestral sea mayor o igual que la media poblacional es:", probabilidad)
## Probabilidad de que la media muestral sea mayor o igual que la media poblacional es: 0.5

D

Haga el histograma de la variable PURCHASE, calcule el sesgo, la curtosis e indique con ellos brevemente si la variable parece distribuirse de forma normal o no.

Solución D

# install.packages("e1071")
# install.packages("nortest")

library(e1071)
library(nortest)

#Histograma
hist(muestra$Purchase, col = "#f6c0d8", main = "Histograma Variable Purchase", 
     xlab = "Purchase", ylab = "Frecuencia")

#Calcular sesgo y curtosis
sesgo <- skewness(muestra$Purchase, na.rm = TRUE)
curtosis <- kurtosis(muestra$Purchase, na.rm = TRUE)
Sesgo
#Valores de sesgo
sesgo
## [1] -0.3840804

Interpretación: Sesgo negativo: Un sesgo de \(-0.3840804\) indica que la distribución de la variable Purchase tiene una cola más larga a la izquierda, lo que significa que hay más valores extremos (outliers) a la izquierda (valores más bajos) que a la derecha. En otras palabras, hay una tendencia a que los datos sean ligeramente asimétricos hacia la parte inferior. Cercano a 0: Dado que el valor del sesgo está cerca de 0, esto sugiere que la distribución no está extremadamente sesgada, pero sí hay cierta asimetría hacia la izquierda.

Curtosis
#Valores de Curtosis
curtosis
## [1] -0.0156752

Interpretación: Curtosis negativa: Un valor de curtosis de aproximadamente \(-0.0156752\) indica que la distribución es ligeramente más plana en comparación con una distribución normal. Esto se refiere a que hay menos valores extremos (outliers) en comparación con una distribución normal. Cercano a 0: Al estar tan cerca de 0, sugiere que la distribución de Purchase es muy similar a la normal en términos de sus colas. Sin embargo, la curtosis negativa implica que podría tener menos extremos comparada con la normal.

#Pruebas de normalidad
lillie.test(muestra$Purchase)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  muestra$Purchase
## D = 0.056288, p-value = 0.4623
cvm.test(muestra$Purchase)
## 
##  Cramer-von Mises normality test
## 
## data:  muestra$Purchase
## W = 0.061288, p-value = 0.3611
Conclusiones

Normalidad de la Distribución: - Sesgo: La distribución de Purchase tiene una ligera asimetría hacia la izquierda, lo que puede afectar su normalidad. - Curtosis: La distribución es similar a una normal, pero ligeramente más plana, lo que sugiere menos valores extremos.

En conjunto, estos resultados sugieren que la variable Purchase no sigue una distribución normal, pero tampoco se aleja drásticamente de ella. La ligera asimetría y la planitud indican que puede ser útil considerar transformaciones o técnicas no paramétricas si planeas realizar análisis estadísticos que asumen normalidad.

Actividad 2

Use la muestra seleccionada en la actividad 1 para todos los desarrollos:

A

Construya un intervalo de confianza al noventa por ciento para el promedio de la variable PURCHASE. Escriba la interpretación en el contexto del caso. Compruebe si la media poblacional cae en dicho intervalo. Justifique su respuesta

Solución A

n <- length(muestra$Purchase)

xbarra <- mean(muestra$Purchase, na.rm = TRUE);xbarra
## [1] 8966.417
s <- sd(muestra$Purchase, na.rm = TRUE)

df <- n - 1;df
## [1] 119
talfamed <- qt(0.05, df = df, lower.tail = FALSE)

Ic_i <- xbarra - talfamed * s / sqrt(n)

Ic_s <- xbarra + talfamed * s / sqrt(n)

cat("El intervalo de confianza para la media de Purchase es:\n")
## El intervalo de confianza para la media de Purchase es:
cat("Inferior:", Ic_i, "\n")
## Inferior: 8224.116
cat("Superior:", Ic_s, "\n")
## Superior: 9708.718
media_poblacional <- mean(Blackfriday$Purchase, na.rm = TRUE)




if (media_poblacional >= Ic_i && media_poblacional <= Ic_s) {
  cat("La media poblacional", media_poblacional, "CAE dentro del intervalo de confianza, que va de", Ic_i, "a", Ic_s, "\n")
} else {
  cat("La media poblacional", media_poblacional, "NO CAE dentro del intervalo de confianza, que va de", Ic_i, "a", Ic_s, "\n")
}
## La media poblacional 9508.259 CAE dentro del intervalo de confianza, que va de 8224.116 a 9708.718

Con una confianza del 99% estimamos que las compras hechas en uno de los Blackfridays que se realizan en Estados Unidos está entre us$ 8668 y Us$9534.

Resolución del punto basado en: Chat GPT

B

Construya un intervalo de confianza al noventa y cinco por ciento para la proporción de ventas superiores a US$5.000. Escriba la interpretación en el contexto del caso. Compruebe si la proporción poblacional está en este intervalo.

Solución B

# Asumiendo que tienes dos data frames: 'muestra' y 'Blackfriday'
# Con la variable 'Purchase' en ambos

library(ggplot2)

# Paso 1: Calcular la proporción muestral para 'muestra'
n_muestra <- nrow(muestra) # Número de observaciones en 'muestra'
ventas_mayores_5000_muestra <- sum(muestra$Purchase > 5000) # Ventas mayores a $5000
p_muestral <- ventas_mayores_5000_muestra / n_muestra # Proporción muestral

# Paso 2: Calcular el intervalo de confianza al 95% para 'muestra'
z <- 1.96 # Valor crítico para un nivel de confianza del 95%
error_estandar <- sqrt((p_muestral * (1 - p_muestral)) / n_muestra)
margen_error <- z * error_estandar

# Intervalo de confianza
IC_inferior <- p_muestral - margen_error
IC_superior <- p_muestral + margen_error

cat("El intervalo de confianza al 95% para 'muestra' es: [", IC_inferior, ", ", IC_superior, "]\n")
## El intervalo de confianza al 95% para 'muestra' es: [ 0.7096219 ,  0.8570448 ]
# Paso 3: Calcular la proporción poblacional para 'Blackfriday'
n_blackfriday <- nrow(Blackfriday) # Número de observaciones en 'Blackfriday'
ventas_mayores_5000_blackfriday <- sum(Blackfriday$Purchase > 5000) # Ventas mayores a $5000 en Blackfriday
p_poblacional <- ventas_mayores_5000_blackfriday / n_blackfriday # Proporción poblacional

cat("La proporción poblacional en 'Blackfriday' es:", p_poblacional, "\n")
## La proporción poblacional en 'Blackfriday' es: 0.815247
# Paso 4: Comprobar si la proporción poblacional está dentro del intervalo de confianza
if (p_poblacional >= IC_inferior && p_poblacional <= IC_superior) {
  cat("La proporción poblacional está dentro del intervalo de confianza.\n")
} else {
  cat("La proporción poblacional NO está dentro del intervalo de confianza.\n")
}
## La proporción poblacional está dentro del intervalo de confianza.
# --- Gráfico 1: Comparación de proporciones ---
proporciones <- data.frame(
  Base = c("Muestra", "Blackfriday"),
  Proporcion = c(p_muestral, p_poblacional)
)

ggplot(proporciones, aes(x = Base, y = Proporcion, fill = Base)) +
  geom_bar(stat = "identity", width = 0.6) +
  labs(title = "Comparación de Proporciones de Ventas Mayores a $5000",
       x = "Base de Datos",
       y = "Proporción de Ventas Mayores a $5000") +
  scale_fill_manual(values = c("Muestra" = "#f9e5c7", "Base de Datos excel" = "#f6c0d8")) +
  theme_minimal()

# --- Gráfico 2: Intervalo de confianza ---
# Para mostrar el intervalo de confianza y la proporción poblacional

intervalo_confianza <- data.frame(
  Intervalo = c("Inferior", "Muestral", "Superior"),
  Valor = c(IC_inferior, p_muestral, IC_superior)
)

ggplot(intervalo_confianza, aes(x = Intervalo, y = Valor)) +
  geom_point(color = "#c0c7fb", size = 4) +
  geom_errorbar(aes(ymin = IC_inferior, ymax = IC_superior), width = 0.2, color = "#f99973") +
  geom_hline(yintercept = p_poblacional, color = "#f6c0d8", linetype = "dashed", size = 1.2) +
  labs(title = "Intervalo de Confianza para la Proporción de Ventas Mayores a $5000",
       x = "Intervalo",
       y = "Proporción") +
  annotate("text", x = 2.5, y = p_poblacional, label = "Proporción Poblacional", color = "#3365d3", vjust = -0.5) +
  theme_minimal()

C

Construya un intervalo de confianza al noventa por ciento para la diferencia de medias de las compras hechas por hombres y por mujeres. Escriba la interpretación en el contexto del caso.

Solución C

hombres <- subset(muestra, Gender == "M")
mujeres <- subset(muestra, Gender == "F")

res2c <- t.test(x = hombres$Purchase, y = mujeres$Purchase,
               paired = FALSE, var.equal=FALSE, conf.level = 0.90)$conf.int

res2c <- round(res2c, 2); res2c
## [1] -1493.85  2177.74
## attr(,"conf.level")
## [1] 0.9
cat("Con una confianza del 90%, la diferencia del promedio de las compras está entre:", res2c)
## Con una confianza del 90%, la diferencia del promedio de las compras está entre: -1493.85 2177.74

D

Construya un intervalo de confianza para la varianza de las compras de las mujeres.

Solución D

# Especifica un mirror para CRAN al instalar paquetes
if (!require('devtools')) {
  install.packages('devtools', repos = "https://cloud.r-project.org")
}
## Loading required package: devtools
## Loading required package: usethis
# Instalación y carga del paquete stests
if (!require('stests')) {
  devtools::install_github('fhernanb/stests', force = TRUE)
}
## Loading required package: stests
## 
## Attaching package: 'stests'
## The following object is masked from 'package:stats':
## 
##     var.test
# Cargar el paquete stests
library(stests)

# Filtrar los datos de las mujeres con valores no NA en Purchase
mujeres_2d <- subset(muestra, Gender == "F" & !is.na(Purchase))

# Verificar si hay suficientes datos para el análisis
if (nrow(mujeres_2d) > 0) {
  res2d <- stests::var.test(x = mujeres_2d$Purchase, conf.level = 0.90)
  
  # Mostrar el intervalo de confianza
  cat("El intervalo de confianza para la varianza de las compras de las mujeres es: [", 
      round(res2d$conf.int[1], 3), ",", round(res2d$conf.int[2], 3), "]\n")
} else {
  cat("No hay datos disponibles para calcular el intervalo de confianza.\n")
}
## El intervalo de confianza para la varianza de las compras de las mujeres es: [ 20055823 , 47473047 ]
# Graficar el histograma de compras
hist(mujeres_2d$Purchase, col = "#c0c7fb", main = "Histograma de Compras de Mujeres", 
     xlab = "Compras", ylab = "Frecuencia", freq = TRUE)

Actividad 3

Usando la muestra seleccionada en la actividad 1, conteste:

A

Construya una prueba de hipótesis con un nivel de significancia de 0,05 para las ventas promedio, usando como hipótesis alternativa: “μ es mayor a el valor real encontrado en la población (Actividad 1 ítem c.)”. Justifique cada parte del proceso, al final dé su conclusión en el contexto del problema.

Solución A

# Especificar un mirror de CRAN
options(repos = c(CRAN = "https://cloud.r-project.org"))

# Instalar los paquetes si es necesario
if (!require("BSDA")) install.packages("BSDA", dependencies = TRUE)
if (!require("nortest")) install.packages("nortest", dependencies = TRUE)

# Cargar las librerías
library(BSDA)
library(nortest)

# Cálculo de la media muestral y desviación estándar
media_muestral <- mean(muestra$Purchase, na.rm = TRUE)
desv_muestral <- sd(muestra$Purchase, na.rm = TRUE)

# Tamaño de la muestra
n <- length(muestra$Purchase)

# Media poblacional de referencia
mu <- mean(Blackfriday$Purchase, na.rm = TRUE)

# Cálculo del estadístico Z
est <- (media_muestral - mu) / (desv_muestral / sqrt(n))

# Mostrar el valor del estadístico
cat("Estadístico Z:", round(est, 3), "\n")
## Estadístico Z: -1.21
# Prueba de hipótesis usando tsum.test
sol_a <- tsum.test(mean.x = media_muestral, s.x = desv_muestral, n.x = n, alternative = "greater", mu = mu)

# Mostrar los resultados de la prueba tsum.test
cat("Resultado de tsum.test:\n")
## Resultado de tsum.test:
print(sol_a)
## 
##  One-sample t-Test
## 
## data:  Summarized x
## t = -1.2101, df = 119, p-value = 0.8857
## alternative hypothesis: true mean is greater than 9508.259
## 95 percent confidence interval:
##  8224.116       NA
## sample estimates:
## mean of x 
##  8966.417
# Visualización de la distribución normal estándar
x <- seq(-3, 3, length=1000)
y <- dnorm(x)

plot(x, y, type="l", lwd=2, col="#27187e", xlab="Estadístico Z", ylab="Densidad", main="Distribución Normal Estándar")

# Agregar línea para el valor del estadístico Z
abline(v=sol_a$statistic, col="#aeb8fe", lwd=2)

# Sombrear el área de la región de rechazo
polygon(c(seq(qnorm(0.95), 3, length=100), 3, qnorm(0.95)), 
        c(dnorm(seq(qnorm(0.95), 3, length=100)), 0, 0), 
        col=rgb(1, 0, 0, alpha=0.3), border=NA)

# Interpretación de los resultados
if (sol_a$p.value < 0.05) {
  cat("El p-valor es menor que 0.05, se rechaza la hipótesis nula.\n")
  cat("La media muestral es significativamente mayor que la media poblacional (mu = ", mu, ").\n")
} else {
  cat("El p-valor es mayor que 0.05, no se rechaza la hipótesis nula.\n")
  cat("No hay suficiente evidencia para afirmar que la media muestral es mayor que la media poblacional (mu = ", mu, ").\n")
}
## El p-valor es mayor que 0.05, no se rechaza la hipótesis nula.
## No hay suficiente evidencia para afirmar que la media muestral es mayor que la media poblacional (mu =  9508.259 ).

B

Construya una prueba de hipótesis con un nivel de significancia de 0,05 para concluir si hay diferencia entre las compras promedio de hombres y mujeres. Justifique cada parte del proceso, al final dé su conclusión en el contexto del problema.

Solución B

# Dividir la muestra por género
compras_hombres <- muestra$Purchase[muestra$Gender == "M"]
compras_mujeres <- muestra$Purchase[muestra$Gender == "F"]

# Realizar la prueba t de comparación de medias
resultado <- t.test(compras_hombres, compras_mujeres, alternative = "two.sided", conf.level = 0.95)

# Mostrar los resultados de la prueba t
print(resultado)
## 
##  Welch Two Sample t-test
## 
## data:  compras_hombres and compras_mujeres
## t = 0.31253, df = 47.092, p-value = 0.756
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1859.044  2542.936
## sample estimates:
## mean of x mean of y 
##  9054.753  8712.806
# Crear un data frame para las compras por género
data_compras <- data.frame(
  compras = c(compras_hombres, compras_mujeres),
  genero = factor(c(rep("Hombres", length(compras_hombres)), rep("Mujeres", length(compras_mujeres))))
)

# Graficar el boxplot de las compras por género
boxplot(compras ~ genero, data = data_compras, las = 1, 
        xlab = "Género", ylab = "Compras", main = "Compras por Género", col = c("lightblue", "lightpink"))

C

Construya un intervalo de confianza para el cociente de varianzas de las compras entre hombres y mujeres.

Solución C

# Vector
hombres <- as.numeric(unlist(muestra[muestra$Gender == "M", "Purchase"]))
mujeres <- as.numeric(unlist(muestra[muestra$Gender == "F", "Purchase"]))

# F para comparar las varianzas
res1 <- var.test(x = hombres, y = mujeres, conf.level = 0.95)

# Intervalo de confianza
cat("Intervalo de confianza para el cociente de varianzas: [", 
    res1$conf.int[1], ", ", res1$conf.int[2], "]\n")
## Intervalo de confianza para el cociente de varianzas: [ 0.4065238 ,  1.335943 ]
# Histograma
hist(hombres, col = rgb(51/255, 109/255, 211/255, 0.5),  # Color para Hombres: #3365d3
     xlim = c(min(c(hombres, mujeres)), max(c(hombres, mujeres))),
     main = "Histograma de Compras por Género", 
     xlab = "Monto de Compras", 
     ylab = "Frecuencia")

hist(mujeres, col = rgb(243/255, 76/255, 157/255, 0.5), add = TRUE)  # Color para Mujeres: #f34c9d

legend("topright", legend = c("Hombres", "Mujeres"), 
       fill = c(rgb(51/255, 109/255, 211/255, 0.5), rgb(243/255, 76/255, 157/255, 0.5)))

D

Elabore una prueba de hipótesis con alfa = 5% para la igualdad de las varianzas de las compras entre hombres y mujeres.

Solución D

# Asegurarse de que se obtiene un vector numérico
hombres <- as.numeric(unlist(muestra[muestra$Gender == "M", "Purchase"]))
mujeres <- as.numeric(unlist(muestra[muestra$Gender == "F", "Purchase"]))

# Realizar la prueba F para comparar varianzas
res <- var.test(x = hombres, y = mujeres, conf.level = 0.95)

# Mostrar resultados de la prueba
print(res)
## 
##  F test to compare two variances
## 
## data:  hombres  and  mujeres
## F = 0.76987, num df = 88, denom df = 30, p-value = 0.3484
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.4065238 1.3359431
## sample estimates:
## ratio of variances 
##          0.7698749
# Tomar decisión
if (res$p.value < 0.05) {
  cat("Rechazamos H0: Hay evidencia suficiente para afirmar que las varianzas son diferentes.\n")
} else {
  cat("No rechazamos H0: No hay evidencia suficiente para afirmar que las varianzas son diferentes.\n")
}
## No rechazamos H0: No hay evidencia suficiente para afirmar que las varianzas son diferentes.

Análisis de la Información

El análisis de las compras durante el Black Friday en Estados Unidos muestra varios puntos importantes sobre cómo se comportan los consumidores. En promedio, los clientes gastan una cierta cantidad, y la variabilidad en estos gastos nos ayuda a entender si los patrones de compra son consistentes. Se verificó que los datos siguen una distribución normal, lo cual es importante para aplicar otras técnicas estadísticas. Los intervalos de confianza nos dan una idea del rango en el que probablemente se encuentran los valores promedio de las compras y la proporción de ventas que superan los US$5.000, ayudando a tomar decisiones con mayor certeza. Se realizaron pruebas para comparar los gastos entre hombres y mujeres y para ver si el gasto promedio durante el Black Friday es significativamente mayor que un valor conocido. Esto permitió identificar diferencias importantes y validar suposicione sobre el comportamiento de los consumidores. Además, se estimó la proporción de ventas que superan un cierto montoo y se comparó la variabilidad de los datos entre diferentes grupos para evaluar la homogeniedad en el comportamiento de compra

Purchase El código summary(muestra$Purchase) da un resumen rápido de los datos de compra:

Min: El valor más bajo es -5615, lo que podría ser una devolución o un error. 1st Qu : El 25% de las compras son menores a 5292. Median: El valor central de las compras es 9415 (la mitad de las compras están por debajo de este valor). Mean: El promedio de todas las compras es 8966. 3rd Qu: El 75% de las compras son menores a 12677. -Max: El valor más alto registrado es 18565.

La función summary da una idea general de cómo están distribuidas las compras, incluyendo los valores mínimos, máximos, y algunos puntos clave como la mediana y los cuartiles.

El análisis de sesgo y curtosis indica lo siguiente:

  • Sesgo: -0.38, lo que muestra que los datos están ligeramente inclinados hacia la izquierda (más valores pequeños).
  • Curtosis: -0.02, lo que sugiere que la distribución es bastante normal en cuanto a su forma (ni muy puntiaguda ni aplanada). Para haber podido usas estas funciones, se debio de instalar y cargar previamente el paquete “e1071”, que nos brinda las funciones “skewness” y “Kurtosis” En resumen, los datos tienen una leve inclinación hacia valores bajos y una forma de distribución cercana a la normal. El intervalo de confianza para la media de Purchase es:

Inferior: 8224.116 Superior: 9708.718

Este intervalo indica que se espera que la media verdadera de las compras esté entre **8224.116 y 9708.718 con un nivel de confianza (por lo general, 95%). No incluye valores negativos, lo que sugiere que las compras promedio son positivas. Un intervalo relativamente estrecho indica que la estimación de la media es precisa.

En resumen, podemos confiar en que la media de las compras en la población se encuentra dentro de este rango.

La curtosis es una medida que indica la cantidad de valores extremos en una distribución de datos. En el análisis de compras durante el Black Friday, una curtosis alta sugiere que existen más compras muy grandes o muy pequeñas de lo que se esperaría en una distribución normal, mientras que una curtosis baja indica que los valores están más concentrados alrededor de la media, con menos valores extremos.

Estadística t: t = -0.39829 Esta es la estadística calculada que se utiliza para evaluar la hipótesis. Un valor t cercano a 0 sugiere que la media de la muestra (8966.417) no es significativamente diferente de la media hipotética (9508.259). Grados de libertad , df = 12 Esto indica el número de observaciones menos uno. En este caso, sugiere que se basó en 13 datos (13 - 1 = 12).

p-value p = 0.6513 Este valor es mayor que el nivel de significancia típico de 0.05, lo que indica que no hay evidencia suficiente para rechazar la hipótesis nula. En otras palabras, no se puede afirmar que la media de las compras sea mayor que 9508.259.

Hipótesis alternativa: la media verdadera es mayor que 9508.259” - La prueba está evaluando si la media de la población es significativamente mayor que 9508.259.

Intervalo de confianza Se proporciona un intervalo de confianza del 95% de 6541.731. El límite inferior es bastante bajo, pero no se proporciona un límite superior, lo que sugiere que no se ha podido calcular un rango superior debido a que la media de la muestra está lejos de la media hipotética.

Media de la muestra: 8966.417 Este es el promedio de las compras en la muestra, que está por debajo de la media hipotética (9508.259). Para realizar el cálculo utilizamos la función “tsum.test” y “zsum.test”, estas funciones provienen de la librería “BSDA”, que nos permite un análisis básico estadístico, este para realizar la prueba de hipótesis

Conclusiones

1.

Orientación para futuros inversionistas: El análisis muestra que la ciudad C registró el mayor volumen de compras durante el Black Friday, seguida de cerca por la ciudad B. Esto sugiere que ambas ciudades son opciones atractivas para invertir en nuevas tiendas. Al combinar este resultado con otros factores externos como la competitividad del mercado, las condiciones macroeconómicas y la infraestructura local, los inversionistas pueden tomar decisiones más informadas, minimizando el riesgo y maximizando su rentabilidad. Invertir en tiendas ubicadas en estas ciudades podría ofrecer un buen equilibrio entre rentabilidad y riesgo.

2.

Identificación del nicho de mercado: Para los inversionistas interesados en identificar un nicho de mercado, los datos revelan que el grupo demográfico más activo en compras en la ciudad C son hombres de entre 26 y 35 años. Por lo tanto, enfocar las estrategias de marketing y ventas en este segmento, en esta ciudad, podría ser una estrategia eficiente para maximizar las oportunidades de negocio.

3.

Volumen de compras en las ciudades B y C: Se concluye que tanto en las ciudades B como C se registró un alto volumen de compras durante el Black Friday. Esto sugiere que sería valioso para las empresas investigar en mayor profundidad el comportamiento del consumidor en estas dos ciudades, lo que podría proporcionar una ventaja competitiva en la toma de decisiones comerciales.

4.

Ingreso promedio y comportamiento de compra de los hombres: El análisis muestra que los hombres tienen, en promedio, ingresos más altos, lo que explica en gran parte por qué realizaron más compras en el Black Friday del año pasado. Este hallazgo resalta la importancia de considerar las diferencias de ingresos por género al desarrollar estrategias de marketing y ventas.

5.

Segmento de edad de 26-35 años: El grupo de edad de 26 a 35 años fue el más activo en términos de compras. Esto sugiere que los ingresos en este rango de edad tienden a estar más concentrados, lo que convierte a este segmento en un objetivo atractivo para futuras campañas de ventas. Realizar un estudio más profundo sobre el comportamiento de compra en esta franja etaria permitiría entender mejor sus motivaciones y hábitos de consumo.

6.

Uso de R Studio en estudios de mercado: Se comprobó que R Studio es una herramienta eficaz para desarrollar estudios de mercado realistas y alineados con las tendencias actuales. Los análisis realizados con esta plataforma pueden ofrecer un valor significativo para empresas que busquen internacionalizar sus productos o capturar segmentos de mercado específicos, ayudándolas a reducir el riesgo operativo al iniciar nuevas operaciones.