library(readxl)
Blackfriday <- read_excel("C:/Users/vale1/Downloads/Blackfriday.xlsx")
View(Blackfriday)
library(ggplot2)
library(fBasics)
library(moments)
##
## Attaching package: 'moments'
## The following objects are masked from 'package:fBasics':
##
## kurtosis, skewness
library(nortest)
library(plotrix)
library(descriptr)
library(stats)
library(devtools)
## Warning: package 'devtools' was built under R version 4.3.2
## Loading required package: usethis
## Warning: package 'usethis' was built under R version 4.3.2
library(stats)
require(stests)
## Loading required package: stests
##
## Attaching package: 'stests'
## The following object is masked from 'package:stats':
##
## var.test
En este documento se desarrollará un análisis descriptivo y de probabilidades de ciertas variables estudiadas en el evento del Blackfriday, donde se clasificará y examinará la información tomada de una muestra de 120 compradores, analizando variables como sus ingresos, la ciudad donde viven, su sexo, entre otras. La muestra será extraida de la base de datos Blackfriday, dada previamente por el docente, usando una semilla compuesta por los últimos dígitos de los documentos de identidad de los integrantes del grupo.
*Análisis descriptivo: Hace referencia a la clasificación, tabulación, ordenamiento y visualización de los datos de una muestra. Las variables estudiadas se pueden dividir en cualitativas y cuantitativas
*Media muestral: Es una medida que representa el promedio de un conjunto de datos de una muestra. Se denota comúnmente como xbarra.
*Media poblacional: Es conocida como la “media”, es un parámetro que describe el centro de una distribución en una población y se denota comúnmente por el símbolo griego μ (mu).
*Desviación estandar: Es una medida de dispersión que indica cuánto se alejan, en promedio, los valores individuales de una distribución con respecto a la media.
*Sesgo: Hace referencia a la tendencia sistemática de un estimador de alejarse del valor real del parámetro que está estimando.
*Curtosis: Es una medida que describe la forma de la distribución de un conjunto de datos. Indica qué tan “picuda” o “aplanada” es la distribución en comparación con una distribución normal.
*Intervalo de confianza: Es un rango de valores que utilizado para estimar el parámetro desconocido de una población, con un cierto nivel de confianza. Es una herramienta que proporciona un margen de error alrededor de un estimador puntual y refleja la incertidumbre de la estimación.
*Prueba de hipótesis: Es una metodología utilizada en estadística que permite evaluar y tomar decisiones sobre la validez de ciertas afirmaciones sobre parámetros poblacionales
*Distribución normal: Es una distribución continua y simétrica que se caracteriza por su forma de campana.
*Estadistico ‘t’: Se asocia con la distribución t de Student y se utiliza en pruebas de hipótesis y estimaciones cuando se trabaja con muestras pequeñas y la desviación estándar de la población es desconocida.
Semilla:
Se planto una semilla con el ultimo dígito del documento de identidad de cada uno de los integrantes
set.seed(82158)
Tabla muestra2:
Se utiliza como base de datos: Blackfriday con una muestra de ciento veinte datos elegidos a partir de la semilla plantada
datos.bf <- data.frame(Blackfriday)
muestra2 <- datos.bf[sample(nrow(datos.bf),size=120),0:13]
View(Blackfriday)
View(muestra2)
attach(muestra2)
Condición que define el sexo del comprador dentro de la base de datos.
Tabla de frecuencia:
frec_gender <- table(muestra2$Gender)
frec_gender
##
## F M
## 30 90
Esta tabla nos permite observar qué la cantidad de compradores en la base de datos del Blackfriday estan clasificados por distintas variables como su sexo; en este caso variando entre el sexo ‘Femenino’ o el sexo ‘Masculino’. De esta manera sabemos que para el grupo del sexo ‘Masculino’ existen 70 personas en dicha condición, mientras que para el sexo ‘Femenino’ hay 30 personas. Ahora, como esta tabla indica la mayoria de las personas que compran en dicho evento pertenecen al sexo masculino.
Diagrama de torta Gender:
count2 <-c(" Femenino 30%","Masculino 70%")
torta2 <- pie3D(frec_gender, labels= count2,radius = 1.8,
explode=0.1, height=0.3,labelcex = 1.5,theta=pi/5,
main="Diagrama de tarta frecuencia de variable Gender (Sexo del comprador)")
Muestra el lugar de residencia del comprador.
Tabla de frecuencia:
frec_city <- table(muestra2$City_Category)
frec_city
##
## A B C
## 31 49 40
Esta tabla representa la cantidad de compradores que se encuentran en las posibles ciudades. En este caso 31 personas se encuentran en la ciudad ‘A’según la muestra. Consiguiente a esto, 49 compradores viven en la ciudad ’B’ y por ultimo40 personas se encuentran en la ciudad ‘C’. De esta manera se entiende que las personas que más compras realizarón en el Blackfriday estan en la ciudad ‘B’.
Diagrama de barras Ciudad de los compradores:
class(muestra2$City_Category);
## [1] "character"
levels(muestra2$City_Category);
## NULL
str(muestra2$City_Category);
## chr [1:120] "B" "C" "A" "A" "A" "A" "A" "C" "A" "B" "C" "C" "C" "B" "B" ...
table(muestra2$City_Category);
##
## A B C
## 31 49 40
tabla_city = table(muestra2$City_Category)
ggplot(data = data.frame(Categoria = names(tabla_city),
Frecuencia = as.numeric(tabla_city)),
aes(x = Categoria, y = Frecuencia, fill = Categoria)) +
geom_bar(stat = "identity", color = "black") +
labs(title = "Lugar de residencia del comprador.",
x = "Categoría",
y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 0.7, color = "black",
size = 10),
plot.title = element_text(hjust = 0.5))
Explica el ingreso mensual de cada uno de los compradores.
media.Income<-mean(muestra2$Income)
media.Income
## [1] 12978.38
La media de los ingresos de los compradores es de 12978.38 dolares mensuales.
hist(muestra2$Income, main = "Histograma de variable Income", xlab = "Ingresos",
ylab = "Frecuencia", col = "lightblue2", breaks =25, border = "black",
cex.axis = 1.0, cex.main = 1.5,)
Esta tabla representa los ingresos de cada uno de los compradores del blackfriday. Mediante la media los de ingresos de los 120 compradores se puede observar que en promedio ellos tienen unos ingresos variables de 12978.38 dolares mensuales
Desviación estandar muestral
sd(muestra2$Purchase, na.rm = FALSE)
## [1] 4492.97
Desviación estandar poblacional
Sigma <- function(x) {n <- length(datos.bf$Purchase)
desvi <- sqrt(sum((x-mean(x))^2) / n)
return(desvi)}
Sigma(datos.bf$Purchase)
## [1] 5001.604
Media muestral
mean(muestra2$Purchase)
## [1] 9281.083
Media poblacional
mean(datos.bf$Purchase)
## [1] 9508.259
De estos datos se puede entender que el estimador de la media y desviacion muestral es la media o desviación estandar poblacional, ya que son aquellas que poseen valores mas altos y cuentan con todos los datos reales de la variable de los valores de la compra en dolares.
Probabilidad de que la variable media muestral sea mayor o igual que el valor de la poblacional.
des.m<-sd(muestra2$Purchase, na.rm = FALSE)
des.m
## [1] 4492.97
Sigma <- function(x) {n <- length(datos.bf$Purchase)
desvi <- sqrt(sum((x-mean(x))^2) / n)
return(desvi)}
Sigma(datos.bf$Purchase)
## [1] 5001.604
mean1<-mean(muestra2$Purchase)
mean1
## [1] 9281.083
mean2<-mean(datos.bf$Purchase)
Se calcula el t-student para poder hallar la prbabilidad
El valor t-student es calculado mediante la fórmula “(xbarra.muestra-mu)/(s.muestra/sqrt(datos de la muestra))”
t<-((mean1- mean2)/(des.m/sqrt(120)))
t
## [1] -0.5538847
De esta manera finalmente podemos decir que la probabilidad de media muestral=> media poblacional es:
probabilidad <- pt(t, df = 119, lower.tail = TRUE)
probabilidad
## [1] 0.2903485
Se entiende entonces que existe una probabilidad del 29% aproximadamente de que la media muestral de los valores de las compras en dolares de los clientes sea igual a la media poblacional de las compras en toda la base de datos.
Histograma de los valores de las compras en dolares de los clientes.
ggplot(data = muestra2 ,
mapping =aes(x=muestra2$Purchase))+
geom_histogram(bins = 15 , fill= "pink" , col ="#080808") +
labs(title = "Histograma de los datos de los valores de la compra en dolares ",
x = "Valores", y = "N°Personas")+
theme_minimal() +
theme(axis.text.x = element_text( hjust = 0.7, color = "black",
size = 10),
plot.title = element_text(hjust = 0.5))
Curtosis
kurtosis(muestra2$Purchase)
## [1] 3.030957
La cantidad de valores atípicos en el Valor de la compra en dólares es: -0.01934832
Como la curtosis > 0 graficamente se puede interpretar que esta distribución apunta a una distribución normal.
ad.test(muestra2$Purchase)
##
## Anderson-Darling normality test
##
## data: muestra2$Purchase
## A = 0.35136, p-value = 0.464
Además del análisis realizado con la curtosis, el valor obtenido de p-value nos indica con gran seguridad que la variable Purchase se comporta con una distribución normal
Sesgo
skewness(muestra2$Purchase)
## [1] -0.08002451
El coeficiente de asimetría es: -0.07902629
La asimetría positiva indica que la media de los datos de los valores de la compra en dolares es mayor que la mediana, y la distribución de los datos es sesgada hacia la derecha.
purchase <-data.frame(table(muestra2$Purchase))
prom <- mean(muestra2$Purchase)
intervalo_promedio <- (t.test(muestra2$Purchase, conf.level = 0.90))
cat(intervalo_promedio$conf.int[1], "<",prom,"<", intervalo_promedio$conf.int[2],"\n")
## 8601.153 < 9281.083 < 9961.014
El intervalo de confianza al 90% para el promedio de la variable PURCHASE es: De 8601.153 a 9961.014. Lo que significa que se tiene un 90% de seguridad de que el promedio esta en el intervalo.
El promedio de la variable PURCHASE es: 9281.083. Asi que: 8601.153 < μ < 9961.014.
Ahora cambiando μ por el promedio de la variable PURCHASE se tiene el siguiente intervalo: 8601.153 < 9281.083 < 9961.014.
Lo anterior muestra que efectivamente el promedio esta en el intervalo realizado.
vent_5000 <- sum(muestra2$Purchase > 5000)
n <- nrow(muestra2)
proporcion_muestral <- vent_5000 / n
proporcion_muestral
## [1] 0.825
intervalo_proporcion <- binom.test(vent_5000, n, conf.level = 0.95)
cat(intervalo_proporcion$conf.int[1], "<",proporcion_muestral,"<", intervalo_proporcion$conf.int[2], "\n")
## 0.74502 < 0.825 < 0.8882857
Con el intervalo construido, se puede concluir que se tiene un 95% de seguridad de que la proporción de ventas superiores a US$5000 se encuentra en este intervalo: 0.74502 < p < 0.8882857.
La proporción de ventas superiores a US$5000 es: 0.825. Así que cambiando p por la proporción hallada en el intervalo se tiene: 0.74502 < 0.825 < 0.8882857.
Lo anterior muestra que efectivamente la proporción poblacional se encuentra en el intervalo realizado.
Compras por genero
compras_hombres <- muestra2$Purchase[muestra2$Gender == "M"]
compras_mujeres <- muestra2$Purchase[muestra2$Gender == "F"]
media_hombres <- mean(compras_hombres)
media_mujeres <- mean(compras_mujeres)
diferencia_medias <- round(media_hombres - media_mujeres,5)
Intervalo de confianza para la diferencia de medias de las compras entre hombres y mujeres
intervalo_diferencia_medias <- t.test(compras_hombres, compras_mujeres, conf.level = 0.90)
cat(intervalo_diferencia_medias$conf.int[1], "<",diferencia_medias,"<", intervalo_diferencia_medias$conf.int[2], "\n")
## -999.5406 < 689.7556 < 2379.052
La media de compras hechas por hombres es de: 9453.522 , la media de compras hechas por mujeres es: 8763.767 y la diferencia de sus medias es: 689.7556. El intervalo de confianza al 90% para la diferencia de medias de las compras entre hombres y mujeres es: -999.5406 < μh - μm < 2379.052.
El intervalo anterior representa que se esta un 90% seguro que la diferencia de medias se encuentra ahí, como se mostrará en el siguiente intervalo: -999.5406 < 689.7556 < 2379.052.
Ahora se puede ver que la diferencia de las medias de las compras hechas por hombres y mujeres esta dentro del intervalo realizado. También se puede decir que dado a que el intervalo incluye el valor cero (0), la diferencia de medias (2.155) no es estadisticamente significativa en un nivel de confianza al 90%; lo que quiere decir que tomando en cuenta el intervalo anterior la diferencia entre las compras de hombres y mujeres no difieren significativamente en promedio.
compras_mujeres_var <- muestra2$Purchase[muestra2$Gender == "F"]
varianza_mujeres<- var(compras_mujeres_var)
Debido a que el enunciado no presenta el porcentaje del nivel de confianza para el intervalo, se hará con un 98%
intervalo_var_mujeres <- stests::var.test(x = compras_mujeres_var, conf.level=0.98)$conf.int
cat(intervalo_var_mujeres[1],"<",varianza_mujeres,"<",intervalo_var_mujeres[2],"\n" )
## 14043944 < 24014119 < 48848714
data <- data.frame(
group = factor(rep(c("HOMBRES", "MUJERES"), c(length(compras_hombres), length(compras_mujeres)))),
value = c(compras_hombres, compras_mujeres)
)
ggplot(data, aes(x = group, y = value, fill = group)) +
geom_boxplot() +
labs(title = "DIFERENCIA DE ENTRE COMPRAS DE HOMBRES Y COMPRAS DE MUJERES", y = "PURCHASE") +
theme(legend.position = "none")+
scale_fill_manual(values = c("lavenderblush2","deeppink3"))
El intervalo es de 14043944 a 48848714. Esto quiere decir que se tiene un 98% de seguridad de que la varianza esta contenida en el intervalo: 14043944 < var_mu < 48848714.
La varianza es: 24014119. Así que intercambiando var_mu por el valor de la varianza se el siguiente intervalo: 14043944 < 24014119 < 48848714.
Este último intervalo propuesto deja ver claramente que la varianza esta contenida en el intervalo realizado.
‘Media poblacional’
mu.p<- mean(datos.bf$Purchase); mu.p
## [1] 9508.259
‘Media muestral’
mu.m<- mean(muestra2$Purchase); mu.m
## [1] 9281.083
Planteando entonces las dos hipótesis de tal manera:
H0: mu.m es menor a mu.p
H1: mu.m es mayor a mu.p (Actividad 1 ítem c.)
Pero antes se tiene que corroborar que la muestra provenga de una normal, por lo que se le aplican varias pruebas como:
ad.test(muestra2$Purchase)
##
## Anderson-Darling normality test
##
## data: muestra2$Purchase
## A = 0.35136, p-value = 0.464
lillie.test(muestra2$Purchase)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: muestra2$Purchase
## D = 0.061873, p-value = 0.3136
Como el valor-P de la prueba Anderson-Darling y de la prueba Lillie es 0.464 y 0.3136 respectivamente, ambos valores mayores al 10% y mayor que el nivel de significancia del 5%, se puede asumir que la muestra proviene de una población normal.
pdf_t <- dt(muestra2$Purchase, df = 119)
Por lo que se procede a realizar la prueba de hipotesis
t.test(muestra2$Purchase, y = NULL,
alternative = 'two.sided',
conf.level=0.95, mu=mu.p)
##
## One Sample t-test
##
## data: muestra2$Purchase
## t = -0.55388, df = 119, p-value = 0.5807
## alternative hypothesis: true mean is not equal to 9508.259
## 95 percent confidence interval:
## 8468.945 10093.222
## sample estimates:
## mean of x
## 9281.083
Como el valor-P es 0.5807 y mayor que el nivel de significancia 5%, no se rechaza la hipótesis nula, es decir, las evidencias no son suficientes para afirmar que la media muestral de las ventas promedio en dolares sea mayor al promedio de las ventas en dolares de la población total.
Esta prueba tambien indica que la hipotesis viene de un estadístico “t” y a su vez posee 119 grados de libertad.
compras_h <- muestra2$Purchase[muestra2$Gender == "M"]; compras_h
## [1] 12783 9266 10709 15178 8230 5759 9803 10765 22508 10730 9401 13896
## [13] 8409 15593 8861 10733 9725 2460 15257 11518 1435 15679 11997 3069
## [25] 12375 7645 13846 12476 12900 6818 3130 2397 8147 10743 3098 14211
## [37] 11911 12984 13121 18171 5877 9133 16505 5583 6190 7178 5315 9761
## [49] 1585 2523 4157 10647 7223 9094 13519 -2411 7613 7939 12091 9679
## [61] 13038 11316 4432 10969 7876 10558 5030 4100 9477 8720 9362 10789
## [73] 7854 6839 12584 13261 6602 6231 14075 15265 10879 5836 12151 -764
## [85] 17438 10821 8046 8333 13117 9644
compras_m <- muestra2$Purchase[muestra2$Gender == "F"];compras_m
## [1] 10632 13753 10904 11527 9557 11571 -1178 10868 2455 12998 2417 13198
## [13] 9910 3172 13490 4943 12488 6292 19585 3083 5972 8575 4633 6343
## [25] 5152 16625 7960 9289 14699 2000
datos <- data.frame(compras=c(compras_h, compras_m),
sexo=rep(c('Masculino', 'Femenino'), each=240))
boxplot(compras ~ sexo, data=datos, las=1.0,
xlab='Sexo del comprador', ylab='Valores de las compras en dolares')
De esta manera podemos intuir que a pesar de que los hombres realizan más compras que las mujeres, los valores de sus compras en dolares son basicamente iguales.
Entonces podemos plantear las siguientes hipotesis
H0: mu1−mu2= 0
H1: mu1−mu2≠0
Comprobando con la prueba de hipotesis que:
t.test(x=compras_h, y=compras_m, alternative="two.sided", mu=0,
paired=FALSE, var.equal=FALSE, conf.level=0.95)
##
## Welch Two Sample t-test
##
## data: compras_h and compras_m
## t = 0.68562, df = 45.328, p-value = 0.4964
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -1336.087 2715.598
## sample estimates:
## mean of x mean of y
## 9453.522 8763.767
De la prueba se obtiene un valor-P grande, por lo tanto, podemos concluir que no hay diferencias significativas entre las compras en dolares de las mujeres y los hombres en el Blackfriday, resultado que ya se esperaba al ver el boxplot anterior.
res1 <- stests::var.test(x=muestra2$Purchase[muestra2$Gender == "M"], y=muestra2$Purchase[muestra2$Gender == "F"], conf.level=0.95)
res1<-res1$conf.int
res1
## [1] 0.4147882 1.3824999
## attr(,"conf.level")
## [1] 0.95
Se puede concluir que la varianza de las compras de los hombres como de las mujeres estan en el intervalo de 0.4147882 a 1.3824999
Con esto se evidencia que las varianzas de las compras tanto de hombres como mujeres son iguales, puesto que el 1 está presente en el intervalo con una confianza del 95%
H0: Var(1)=Var(2)
H1: Var(1)diferente Var(2)
x <- muestra2$Purchase[muestra2$Gender == "M"]; x
## [1] 12783 9266 10709 15178 8230 5759 9803 10765 22508 10730 9401 13896
## [13] 8409 15593 8861 10733 9725 2460 15257 11518 1435 15679 11997 3069
## [25] 12375 7645 13846 12476 12900 6818 3130 2397 8147 10743 3098 14211
## [37] 11911 12984 13121 18171 5877 9133 16505 5583 6190 7178 5315 9761
## [49] 1585 2523 4157 10647 7223 9094 13519 -2411 7613 7939 12091 9679
## [61] 13038 11316 4432 10969 7876 10558 5030 4100 9477 8720 9362 10789
## [73] 7854 6839 12584 13261 6602 6231 14075 15265 10879 5836 12151 -764
## [85] 17438 10821 8046 8333 13117 9644
y<-muestra2$Purchase[muestra2$Gender == "F"];y
## [1] 10632 13753 10904 11527 9557 11571 -1178 10868 2455 12998 2417 13198
## [13] 9910 3172 13490 4943 12488 6292 19585 3083 5972 8575 4633 6343
## [25] 5152 16625 7960 9289 14699 2000
datos <- data.frame(compras=c(x,y),
sexo=rep(c('Masculino', 'Femenino'), each=240))
boxplot(compras ~ sexo, data=datos, las=1.0,
xlab='Sexo del comprador', ylab='Valores de las compras en dolares')
t.test(x, y = NULL,
alternative = c("two.sided"),
mu = 0, paired = FALSE, var.equal = TRUE,
conf.level = 0.95)
##
## One Sample t-test
##
## data: x
## t = 20.55, df = 89, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 8539.459 10367.586
## sample estimates:
## mean of x
## 9453.522
Se puede observar un valor p muy pequeño de lo que se puede concluir que si hay diferencias en la varianza de las compras realizadas por mujeres respecto a la varianza de las compras por los hombres en el Blackfriday.