Big Data Analytics: métodos estadísticos
Al analizar los datos, es posible tener un enfoque estadístico. Las herramientas básicas que se necesitan para realizar un análisis básico son:
- Análisis de correlación
- Análisis de variación
- Evaluación de la hipótesis
Cuando se trabaja con grandes conjuntos de datos, no implica ningún problema, ya que estos métodos no son computacionalmente intensivos con la excepción del análisis de correlación. En este caso, siempre es posible tomar una muestra y los resultados deben ser sólidos.
Análisis de correlación
El análisis de correlación busca encontrar relaciones lineales entre variables numéricas. Esto puede ser útil en diferentes circunstancias. Un uso común es el análisis de datos exploratorios, en la sección 16.0.2 del libro hay un ejemplo básico de este enfoque. En primer lugar, la métrica de correlación utilizada en el ejemplo mencionado se basa en laPearson coefficient. Sin embargo, existe otra métrica interesante de correlación que no se ve afectada por valores atípicos. Esta métrica se llama correlación de Spearman.
los spearman correlation La métrica es más robusta a la presencia de valores atípicos que el método de Pearson y proporciona mejores estimaciones de las relaciones lineales entre variables numéricas cuando los datos no se distribuyen normalmente.
library(ggplot2)
# Select variables that are interesting to compare pearson and spearman
correlation methods.
x = diamonds[, c('x', 'y', 'z', 'price')]
# From the histograms we can expect differences in the correlations of both
metrics.
# In this case as the variables are clearly not normally distributed, the
spearman correlation
# is a better estimate of the linear relation among numeric variables.
par(mfrow = c(2,2))
colnm = names(x)
for(i in 1:4) {
hist(x[[i]], col = 'deepskyblue3', main = sprintf('Histogram of %s', colnm[i]))
}
par(mfrow = c(1,1))
A partir de los histogramas de la siguiente figura, podemos esperar diferencias en las correlaciones de ambas métricas. En este caso, como las variables claramente no están distribuidas normalmente, la correlación de Spearman es una mejor estimación de la relación lineal entre variables numéricas.
Para calcular la correlación en R, abra el archivo bda/part2/statistical_methods/correlation/correlation.R que tiene esta sección de código.
## Correlation Matrix - Pearson and spearman
cor_pearson <- cor(x, method = 'pearson')
cor_spearman <- cor(x, method = 'spearman')
### Pearson Correlation
print(cor_pearson)
# x y z price
# x 1.0000000 0.9747015 0.9707718 0.8844352
# y 0.9747015 1.0000000 0.9520057 0.8654209
# z 0.9707718 0.9520057 1.0000000 0.8612494
# price 0.8844352 0.8654209 0.8612494 1.0000000
### Spearman Correlation
print(cor_spearman)
# x y z price
# x 1.0000000 0.9978949 0.9873553 0.9631961
# y 0.9978949 1.0000000 0.9870675 0.9627188
# z 0.9873553 0.9870675 1.0000000 0.9572323
# price 0.9631961 0.9627188 0.9572323 1.0000000
Prueba de chi-cuadrado
La prueba de chi-cuadrado nos permite probar si dos variables aleatorias son independientes. Esto significa que la distribución de probabilidad de cada variable no influye en la otra. Para evaluar la prueba en R, primero debemos crear una tabla de contingencia y luego pasar la tabla a lachisq.test R función.
Por ejemplo, verifiquemos si existe una asociación entre las variables: corte y color del conjunto de datos de diamantes. La prueba se define formalmente como:
- H0: el corte variable y el diamante son independientes
- H1: El corte variable y el diamante no son independientes.
Supondríamos que existe una relación entre estas dos variables por su nombre, pero la prueba puede dar una "regla" objetiva que indique qué tan significativo es o no este resultado.
En el siguiente fragmento de código, encontramos que el valor p de la prueba es 2.2e-16, esto es casi cero en términos prácticos. Luego, después de ejecutar la prueba,Monte Carlo simulation, encontramos que el valor p es 0,0004998, que sigue siendo bastante inferior al umbral 0,05. Este resultado significa que rechazamos la hipótesis nula (H0), por lo que creemos que las variablescut y color no son independientes.
library(ggplot2)
# Use the table function to compute the contingency table
tbl = table(diamonds$cut, diamonds$color)
tbl
# D E F G H I J
# Fair 163 224 312 314 303 175 119
# Good 662 933 909 871 702 522 307
# Very Good 1513 2400 2164 2299 1824 1204 678
# Premium 1603 2337 2331 2924 2360 1428 808
# Ideal 2834 3903 3826 4884 3115 2093 896
# In order to run the test we just use the chisq.test function.
chisq.test(tbl)
# Pearson’s Chi-squared test
# data: tbl
# X-squared = 310.32, df = 24, p-value < 2.2e-16
# It is also possible to compute the p-values using a monte-carlo simulation
# It's needed to add the simulate.p.value = TRUE flag and the amount of
simulations
chisq.test(tbl, simulate.p.value = TRUE, B = 2000)
# Pearson’s Chi-squared test with simulated p-value (based on 2000 replicates)
# data: tbl
# X-squared = 310.32, df = NA, p-value = 0.0004998
Prueba t
La idea de t-testes evaluar si existen diferencias en la distribución de una variable numérica # entre diferentes grupos de una variable nominal. Para demostrar esto, seleccionaré los niveles de los niveles Justo e Ideal del corte de la variable factorial, luego compararemos los valores de una variable numérica entre esos dos grupos.
data = diamonds[diamonds$cut %in% c('Fair', 'Ideal'), ]
data$cut = droplevels.factor(data$cut) # Drop levels that aren’t used from the
cut variable
df1 = data[, c('cut', 'price')]
# We can see the price means are different for each group
tapply(df1$price, df1$cut, mean)
# Fair Ideal
# 4358.758 3457.542
Las pruebas t se implementan en R con el t.testfunción. La interfaz de fórmula para t.test es la forma más sencilla de usarla, la idea es que una variable numérica se explique mediante una variable de grupo.
Por ejemplo: t.test(numeric_variable ~ group_variable, data = data). En el ejemplo anterior, elnumeric_variable es price y el group_variable es cut.
Desde una perspectiva estadística, estamos probando si existen diferencias en las distribuciones de la variable numérica entre dos grupos. Formalmente, la prueba de hipótesis se describe con una hipótesis nula (H0) y una hipótesis alternativa (H1).
H0: No existen diferencias en las distribuciones de la variable precio entre los grupos Justo e Ideal
H1 Existen diferencias en las distribuciones de la variable precio entre los grupos Justo e Ideal
Lo siguiente se puede implementar en R con el siguiente código:
t.test(price ~ cut, data = data)
# Welch Two Sample t-test
#
# data: price by cut
# t = 9.7484, df = 1894.8, p-value < 2.2e-16
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# 719.9065 1082.5251
# sample estimates:
# mean in group Fair mean in group Ideal
# 4358.758 3457.542
# Another way to validate the previous results is to just plot the
distributions using a box-plot
plot(price ~ cut, data = data, ylim = c(0,12000),
col = 'deepskyblue3')
Podemos analizar el resultado de la prueba comprobando si el valor p es inferior a 0,05. Si este es el caso, mantenemos la hipótesis alternativa. Esto significa que hemos encontrado diferencias de precio entre los dos niveles del factor de corte. Por los nombres de los niveles, hubiéramos esperado este resultado, pero no hubiéramos esperado que el precio medio en el grupo Fallido fuera más alto que en el grupo Ideal. Podemos ver esto comparando las medias de cada factor.
los plotEl comando produce un gráfico que muestra la relación entre el precio y la variable de corte. Es un diagrama de caja; hemos cubierto este gráfico en la sección 16.0.1 pero básicamente muestra la distribución de la variable precio para los dos niveles de corte que estamos analizando.
Análisis de variación
El análisis de varianza (ANOVA) es un modelo estadístico que se utiliza para analizar las diferencias entre la distribución de los grupos al comparar la media y la varianza de cada grupo, el modelo fue desarrollado por Ronald Fisher. ANOVA proporciona una prueba estadística de si las medias de varios grupos son iguales o no y, por lo tanto, generaliza la prueba t a más de dos grupos.
Los ANOVA son útiles para comparar tres o más grupos en cuanto a significancia estadística porque la realización de múltiples pruebas t de dos muestras daría como resultado una mayor probabilidad de cometer un error estadístico de tipo I.
En términos de proporcionar una explicación matemática, se necesita lo siguiente para comprender la prueba.
x ij = x + (x i - x) + (x ij - x)
Esto conduce al siguiente modelo:
x ij = μ + α i + ∈ ij
donde μ es la gran media y α i es la media del i-ésimo grupo. Se supone que el término de error ∈ ij es iid de una distribución normal. La hipótesis nula de la prueba es que:
α 1 = α 2 =… = α k
En términos de calcular la estadística de prueba, necesitamos calcular dos valores:
- Suma de cuadrados para diferencia entre grupos -
$$ SSD_B = \ sum_ {i} ^ {k} \ sum_ {j} ^ {n} (\ bar {x _ {\ bar {i}}} - \ bar {x}) ^ 2 $$
- Sumas de cuadrados dentro de grupos
$$ SSD_W = \ sum_ {i} ^ {k} \ sum_ {j} ^ {n} (\ bar {x _ {\ bar {ij}}} - \ bar {x _ {\ bar {i}}}) ^ 2 $$
donde SSD B tiene un grado de libertad de k − 1 y SSD W tiene un grado de libertad de N − k. Entonces podemos definir las diferencias cuadráticas medias para cada métrica.
MS B = SSD B / (k - 1)
MS w = SSD con (N - k)
Finalmente, el estadístico de prueba en ANOVA se define como la relación de las dos cantidades anteriores
F = MS B / MS w
que sigue una distribución F con k − 1 y N − k grados de libertad. Si la hipótesis nula es cierta, F probablemente estaría cerca de 1. De lo contrario, es probable que la media cuadrática entre grupos MSB sea grande, lo que da como resultado un valor F grande.
Básicamente, ANOVA examina las dos fuentes de la varianza total y ve qué parte contribuye más. Por eso se denomina análisis de varianza aunque la intención es comparar medias de grupo.
En términos de calcular la estadística, en realidad es bastante simple hacerlo en R. El siguiente ejemplo demostrará cómo se hace y trazará los resultados.
library(ggplot2)
# We will be using the mtcars dataset
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
# Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
# Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Let's see if there are differences between the groups of cyl in the mpg variable.
data = mtcars[, c('mpg', 'cyl')]
fit = lm(mpg ~ cyl, data = mtcars)
anova(fit)
# Analysis of Variance Table
# Response: mpg
# Df Sum Sq Mean Sq F value Pr(>F)
# cyl 1 817.71 817.71 79.561 6.113e-10 ***
# Residuals 30 308.33 10.28
# Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 .
# Plot the distribution
plot(mpg ~ as.factor(cyl), data = mtcars, col = 'deepskyblue3')
El código producirá la siguiente salida:
El valor p que obtenemos en el ejemplo es significativamente menor que 0.05, por lo que R devuelve el símbolo '***' para denotar esto. Significa que rechazamos la hipótesis nula y que encontramos diferencias entre las medias de mpg entre los diferentes grupos decyl variable.