Continuaremos utilizando los datos del CallCenter para realizar test de hipótesis en R. Recordemos que estos datos estan en el archivo “QuickCall.xls”. Importemoslos:

library(readxl)
QuickCall <- read_excel("QuickCall.xls")
head(QuickCall, n=5)
## # A tibble: 5 x 9
##   name  fdate                week dayofweek  hour   min duration failure
##   <chr> <dttm>              <dbl>     <dbl> <dbl> <dbl>    <dbl>   <dbl>
## 1 Marta 2014-04-23 00:00:00    17         3    10    31     3.38       0
## 2 Marta 2014-04-24 00:00:00    17         4    10    31     4.25       0
## 3 Marta 2014-04-25 00:00:00    17         5    10    31     3.43       0
## 4 Marta 2014-04-28 00:00:00    17         1    10    31     2.86       0
## 5 Marta 2014-04-29 00:00:00    17         2    10    31     3.29       0
## # ... with 1 more variable: holiday_week <dbl>

Ejercicio Propuesto del tutorial 3

Recordemos que lo que le interesaba al CEO cuando introdujimos este caso es verificar si los agentes cuando vuelven de sus vacaciones se demoran más en las llamadas o no. Para comprobar esto, realizaremos un test de hipótesis de diferencia de medias para uno de los agentes. La hipótesis nula que debe testear es la siguiente:

\[ H_{0}: \bar{X}_{preHoliday} = \bar{X}_{weekPostHoliday}\\ H_{A}: \bar{X}_{preHoliday} < \bar{X}_{weekPostHoliday}\]

Haremos el test de Hipótesis para Javier. Seleccionamos las llamadas atendidas por Javier en el periodo previo a sus vacaciones y en la semana de vuelta de sus vacaciones.

df_javier <- QuickCall[QuickCall$name=="Javier",] #seleccionamos los datos de Javier
holiday_week <- df_javier$holiday_week[1] #identificamos su semana de vacaciones
df_pre <- df_javier[df_javier$week < holiday_week, ]$duration
df_post <- df_javier[df_javier$week == (holiday_week+1), ]$duration

Ahora, ocupamos la función t.test de R para realizar el test. Notar que es un test de una cola, por lo cual debemos indicar esto en la función de R:

t.test(x = df_pre,
       y = df_post,
       alternative = "less", var.equal = TRUE, conf.level = 0.95)
## 
##  Two Sample t-test
## 
## data:  df_pre and df_post
## t = 0.050642, df = 78, p-value = 0.5201
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##       -Inf 0.7580465
## sample estimates:
## mean of x mean of y 
##  4.302889  4.280508

Obtenemos un p-valor de 0.52, por lo cual, para Javier no existen diferencias significativas entre el promedio de duración de las llamadas que atendió en el periodo pre-vacaciones comparado con la semana de vuelta de sus vacaciones. En este caso, la sospecha del CEO no puede ser sustentada con los datos (en el caso de Javier).

Pueden probar con otros agentes, para algunos puede que se rechace la hipótesis nula, para otros no. Ya sabemos que para Javier no.

Test de Proporciones

Realicemos ahora un test de proporciones. Vamos a comparar si la tasa de falla de dos agentes presenta diferencias significativas o no. Para realizar el test seleccionaremos a Felipe y Tomás.

Observemos las estadísticas descriptivas de la tasa de fallas para Tomás y Felipe:

library(dplyr)
QuickCall %>% 
  group_by(name) %>% 
  summarize(mean_failure = mean(failure),
            std_failure = sd(failure))
## # A tibble: 5 x 3
##   name      mean_failure std_failure
##   <chr>            <dbl>       <dbl>
## 1 Felipe          0.0607       0.239
## 2 Francisca       0.075        0.264
## 3 Javier          0.075        0.264
## 4 Marta           0.075        0.264
## 5 Tomas           0.0893       0.286

Vemos que la tasa de fallas para Felipe es de 0.0607 (6,7%) con una desviación estándar de 0.24 y en el caso de Tomás, su tasa de falla es de 0.089 (8,9%) con una desviación estándar de 0.29. Seleccionemos los datos solo de estos dos agentes para realizar el test.

df_felipe <-  QuickCall[QuickCall$name=="Felipe",]$failure
df_tomas <-  QuickCall[QuickCall$name=="Tomas",]$failure

n_felipe <- length(df_felipe)
n_tomas <- length(df_tomas)

print(paste("n Felipe: ", n_felipe))
## [1] "n Felipe:  280"
print(paste("n Tomas: ", n_tomas))
## [1] "n Tomas:  280"

Recordemos cómo se construye un test de proporciones. Asumimos que las variables aleatorias que queremos comparar son Binomiales (como lo es la variable failure en este caso). Entonces, aplicandolo a nuestro caso, tenemos que: \(X_{Felipe} \sim Binomial(n_{Felipe}, p_{Felipe})\) y \(X_{Tomas} \sim Binomial(n_{Tomas}, p_{Tomas})\). Donde ambas variables representan la cantidad de fallas que tiene cada agente de las observaciones que poseen. La hipótesis nula es: \[ H_{0}: p_{Tomas} = p_{Felipe} \\ H_{A}: \sim\]

Recordemos también que \(p_{i}\) representa la probabilidad de falla del agente \(i\) y que ésta probabilidad puede ser estimada usando enfoque frecuentista: \[ \hat{p}_{i} = \frac{nfallas_{i}}{totalObs_{i}} \]

El estadístico que necesitamos construir para el test es: \[ Z = \frac{\hat{p}_{Tomas} - \hat{p}_{Tomas}}{\sqrt{Var(\hat{p}_{Tomas} - \hat{p}_{Tomas})}}\] Y bajo la hipótesis nula, la varianza de la diferencia de proporciones es: \[ Var(\hat{p}_{Tomas} - \hat{p}_{Tomas}) = p(1-p)(\frac{1}{n_{Tomas}} + \frac{1}{n_{Felipe}})\] Este resultado lo obtenemos porque Bajo \(H_{0}\) \(\hat{p}_{Tomas}=\hat{p}_{Tomas}=\hat{p}\) donde \(\hat{p}\) lo estimamos como: \[ \hat{p} = \frac{X_{Felipe} + X_{Tomas}}{n_{Felipe} + n_{Tomas}}\] pues estamos asumiendo que en realidad ambos agentes vienen de la misma distribución, asi que podemos estimar la probabilidad conjunta como la suma de sus cantidades de fallas por el total de observaciones entre los dos. Calculemos entonces \(\hat{p}\) con los datos que poseemos:

x_felipe <- sum(df_felipe[df_felipe>0])
x_tomas <- sum(df_tomas[df_tomas>0])

p_hat <- (x_felipe + x_tomas)/(n_felipe + n_tomas)
print(paste("p_hat: ", p_hat))
## [1] "p_hat:  0.075"

Luego, la desviación estándar para el estadístico es:

SE_p <- sqrt(p_hat*(1-p_hat)*((1/n_felipe) + (1/n_tomas)))
print(paste("SE de p_hat: ", SE_p))
## [1] "SE de p_hat:  0.0222606314889249"

Entonces, el valor de nuestro estadístico es de:

Z <- (mean(df_tomas)-mean(df_felipe))/SE_p
print(paste("Z : ", Z))
## [1] "Z :  1.28349586963171"

Como tenemos un n grande (280 obs por cada agente) podemos contrastar nuestro estadístico contra el valor de una \(\mathcal{N}(0,1)\). Para un \(\alpha = 0.05\), tenemos que:

z_alpha = qnorm(0.975)
print(z_alpha)
## [1] 1.959964

Observamos que \(Z \ngtr z_{alpha}\) por lo cual no podemos rechazar la hipótesis nula de que las tasas de falla de Felipe y Tomas son iguales. ¿Por qué obtenemos este resultado? Probablemente por las desviaciones estándar de ambos agentes.

Usando funciones de R

En R existe una función análoga a t.test para hacer test de proporciones. Este test NO ES EXACTAMENTE IGUAL al que vimos en clases, pues utiliza una chi-cuadrado. Esta función se llama prop.test, puede revisar la documentación en https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/prop.test e investigar cuál es el test Chi-Cuadrado. Por esta razón, el estadístico NO nos da el mismo valor, pero la conclusión del test es la misma.

prop.test(x = c(x_tomas, x_felipe), n = c(n_tomas, n_felipe), conf.level = 0.95,
          alternative = "two.sided", correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity
##  correction
## 
## data:  c(x_tomas, x_felipe) out of c(n_tomas, n_felipe)
## X-squared = 1.6474, df = 1, p-value = 0.1993
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.01499439  0.07213724
## sample estimates:
##     prop 1     prop 2 
## 0.08928571 0.06071429

Test de Diferencia en Varianzas

Realicemos ahora un test de diferencia en varianzas. Para esto, utilizaremos otros dos agentes: Francisca y Tomás. Y lo haremos sobre las varianzas de la duración de las llamadas que atienden.

Recordemos que el test de diferencia en varianzas compara las varianzas muestrales de dos variables aleatorias en forma de ratio. La hipótesis nula es la siguiente:

\[ H_{0}: \frac{\sigma^{2}_{x}}{\sigma^{2}_{y}} = 1 \\ H_{A}: \sim \] Y el estadístico que utilizamos, al cual llamamos F, es exactamente ese ratio con las varianzas estimadas. \[ F = \frac{S^{2}_{x}/(n_{x}-1)}{S^{2}_{y}/(n_{y}-1)} \sim F_{n_x-1,n_y-1}\]
Obtengamos los datos necesarios para los dos agentes que queremos comparar:

var_francisca <- sd(QuickCall[QuickCall$name=="Francisca",]$duration)*sd(QuickCall[QuickCall$name=="Francisca",]$duration)
n_francisca <- length(QuickCall[QuickCall$name=="Francisca",]$duration)

var_tomas <- sd(QuickCall[QuickCall$name=="Tomas",]$duration)*sd(QuickCall[QuickCall$name=="Tomas",]$duration)
n_tomas <- length(QuickCall[QuickCall$name=="Tomas",]$duration)

print(paste("Varianza muestral Francisca: ", var_francisca ))
## [1] "Varianza muestral Francisca:  0.253107110515001"
print(paste("Varianza muestral Tomas: ", var_tomas ))
## [1] "Varianza muestral Tomas:  3.33039669924806"

Calculamos el estadístico:

F = (var_tomas/(n_tomas -1))/(var_francisca/(n_francisca-1))
print(paste("F: ", F))
## [1] "F:  13.1580527013708"

Necesitamos el valor de una distribución F con (\(n_{tomas}-1\), \(n_{francisca}-1\)) grados de libertad. A un 5% de significancia:

F_alpha = qf(.95, df1=n_tomas-1, df2=n_francisca-1)
print(paste("F_alpha: ", F_alpha))
## [1] "F_alpha:  1.21809194927247"

Observamos que \(F > F_{alpha}\) por lo cual rechazamos la hipótesis nula de igualdad de varianza de la duración de sus llamadas para Francisca y Tomás.

Usando Función en R

En R también existe una función para realizar el test de diferencia en varianzas. Se llama var.test(). Puede revisar la documentación de esta función aquí: https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/var.test

var.test(QuickCall[QuickCall$name=="Tomas",]$duration, QuickCall[QuickCall$name=="Francisca",]$duration, ratio = 1)
## 
##  F test to compare two variances
## 
## data:  QuickCall[QuickCall$name == "Tomas", ]$duration and QuickCall[QuickCall$name == "Francisca", ]$duration
## F = 13.158, num df = 279, denom df = 279, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  10.40071 16.64640
## sample estimates:
## ratio of variances 
##           13.15805

Observe que obtenemos los mismos valores calculados de manera manual.

Ejercicios Propuestos

  1. Realice un test de proporciones para comparar si la tasa de fallas de las agentes mujeres del Call Center (Marta y Francisca) es distinta a la tasa de falla de los agentes hombres.

  2. Realice un test ANOVA para comparar las medias de duracion de llamadas entre todos los agentes. Puede revisar el archivo “Ejemplos_ANOVA.rmd” que vimos en clase para obtener los códigos que permiten realizar ANOVA en R.