Big Data Analytics - Méthodes statistiques

Lors de l'analyse des données, il est possible d'avoir une approche statistique. Les outils de base nécessaires pour effectuer une analyse de base sont:

  • Analyse de corrélation
  • Analyse de la variance
  • Tests d'hypothèses

Lorsque vous travaillez avec de grands ensembles de données, cela ne pose pas de problème car ces méthodes ne nécessitent pas de calcul intensif, à l'exception de l'analyse de corrélation. Dans ce cas, il est toujours possible de prélever un échantillon et les résultats doivent être robustes.

Analyse de corrélation

L'analyse de corrélation cherche à trouver des relations linéaires entre les variables numériques. Cela peut être utile dans différentes circonstances. Une utilisation courante est l'analyse exploratoire des données, dans la section 16.0.2 du livre il y a un exemple de base de cette approche. Tout d'abord, la métrique de corrélation utilisée dans l'exemple mentionné est basée sur lePearson coefficient. Il existe cependant une autre métrique intéressante de corrélation qui n'est pas affectée par les valeurs aberrantes. Cette métrique est appelée la corrélation du lancier.

le spearman correlation metric est plus robuste à la présence de valeurs aberrantes que la méthode de Pearson et donne de meilleures estimations des relations linéaires entre les variables numériques lorsque les données ne sont pas normalement distribuées.

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))

À partir des histogrammes de la figure suivante, nous pouvons nous attendre à des différences dans les corrélations des deux métriques. Dans ce cas, comme les variables ne sont manifestement pas normalement distribuées, la corrélation du lancier est une meilleure estimation de la relation linéaire entre les variables numériques.

Afin de calculer la corrélation dans R, ouvrez le fichier bda/part2/statistical_methods/correlation/correlation.R qui a cette section de code.

## 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

Test du chi carré

Le test du chi carré nous permet de tester si deux variables aléatoires sont indépendantes. Cela signifie que la distribution de probabilité de chaque variable n'influence pas l'autre. Afin d'évaluer le test dans R, nous devons d'abord créer une table de contingence, puis passer la table auchisq.test R fonction.

Par exemple, vérifions s'il existe une association entre les variables: coupe et couleur du jeu de données diamants. Le test est formellement défini comme -

  • H0: La taille variable et le diamant sont indépendants
  • H1: La taille variable et le diamant ne sont pas indépendants

Nous supposerions qu'il existe une relation entre ces deux variables par leur nom, mais le test peut donner une «règle» objective indiquant à quel point ce résultat est significatif ou non.

Dans l'extrait de code suivant, nous avons constaté que la valeur p du test est 2,2e-16, c'est presque zéro en termes pratiques. Puis après avoir exécuté le test en faisant unMonte Carlo simulation, nous avons constaté que la valeur p est de 0,0004998, ce qui est encore bien inférieur au seuil de 0,05. Ce résultat signifie que nous rejetons l'hypothèse nulle (H0), donc nous croyons que les variablescut et color ne sont pas indépendants.

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

Test T

L'idée de t-testconsiste à évaluer s'il existe des différences dans la distribution d'une variable numérique # entre différents groupes d'une variable nominale. Afin de le démontrer, je sélectionnerai les niveaux des niveaux Passable et Idéal de la variable factorielle coupée, puis nous comparerons les valeurs d'une variable numérique parmi ces deux groupes.

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

Les tests t sont implémentés en R avec le t.testfonction. L'interface de formule vers t.test est la manière la plus simple de l'utiliser, l'idée est qu'une variable numérique est expliquée par une variable de groupe.

Par exemple: t.test(numeric_variable ~ group_variable, data = data). Dans l'exemple précédent, lenumeric_variable est price et le group_variable est cut.

D'un point de vue statistique, nous testons s'il existe des différences dans les distributions de la variable numérique entre deux groupes. Formellement, le test d'hypothèse est décrit avec une hypothèse nulle (H0) et une hypothèse alternative (H1).

  • H0: Il n'y a pas de différences dans les distributions de la variable de prix entre les groupes juste et idéal

  • H1 Il existe des différences dans les distributions de la variable de prix entre les groupes juste et idéal

Ce qui suit peut être implémenté dans R avec le code suivant -

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')

Nous pouvons analyser le résultat du test en vérifiant si la valeur p est inférieure à 0,05. Si tel est le cas, nous conservons l'hypothèse alternative. Cela signifie que nous avons trouvé des différences de prix entre les deux niveaux du facteur de réduction. Par les noms des niveaux, nous aurions attendu ce résultat, mais nous ne nous serions pas attendus à ce que le prix moyen dans le groupe Fail soit plus élevé que dans le groupe Idéal. Nous pouvons le voir en comparant les moyennes de chaque facteur.

le plotLa commande produit un graphique qui montre la relation entre le prix et la variable de réduction. C'est un box-plot; nous avons couvert ce graphique dans la section 16.0.1 mais il montre essentiellement la distribution de la variable de prix pour les deux niveaux de réduction que nous analysons.

Analyse de la variance

L'analyse de la variance (ANOVA) est un modèle statistique utilisé pour analyser les différences entre la distribution des groupes en comparant la moyenne et la variance de chaque groupe, le modèle a été développé par Ronald Fisher. L'ANOVA fournit un test statistique pour savoir si les moyennes de plusieurs groupes sont égales ou non et généralise donc le test t à plus de deux groupes.

Les ANOVA sont utiles pour comparer trois groupes ou plus pour la signification statistique, car la réalisation de plusieurs tests t à deux échantillons entraînerait une augmentation des chances de commettre une erreur statistique de type I.

Pour ce qui est de fournir une explication mathématique, les éléments suivants sont nécessaires pour comprendre le test.

x ij = x + (x i - x) + (x ij - x)

Cela conduit au modèle suivant -

x ij = μ + α i + ∈ ij

où μ est la grande moyenne et α i est la ième moyenne du groupe. Le terme d'erreur ij est supposé être iid à partir d'une distribution normale. L'hypothèse nulle du test est que -

α 1 = α 2 =… = α k

En termes de calcul de la statistique de test, nous devons calculer deux valeurs -

  • Somme des carrés pour la différence entre les groupes -

$$ SSD_B = \ sum_ {i} ^ {k} \ sum_ {j} ^ {n} (\ bar {x _ {\ bar {i}}} - \ bar {x}) ^ 2 $$

  • Sommes de carrés au sein des groupes

$$ SSD_W = \ sum_ {i} ^ {k} \ sum_ {j} ^ {n} (\ bar {x _ {\ bar {ij}}} - \ bar {x _ {\ bar {i}}}) ^ 2 $$

où SSD B a un degré de liberté de k − 1 et SSD W a un degré de liberté de N − k. Ensuite, nous pouvons définir les différences moyennes au carré pour chaque métrique.

MS B = SSD B / (k - 1)

MS w = SSD avec (N - k)

Enfin, la statistique de test en ANOVA est définie comme le rapport des deux grandeurs ci-dessus

F = MS B / MS w

qui suit une F-distribution avec k − 1 et N − k degrés de liberté. Si l'hypothèse nulle est vraie, F serait probablement proche de 1. Sinon, le carré moyen entre les groupes MSB est susceptible d'être grand, ce qui donne une valeur F élevée.

Fondamentalement, l'ANOVA examine les deux sources de la variance totale et voit quelle partie contribue le plus. C'est pourquoi on l'appelle analyse de la variance bien que l'intention soit de comparer les moyennes des groupes.

En termes de calcul de la statistique, c'est en fait assez simple à faire dans R. L'exemple suivant montrera comment cela est fait et tracer les résultats.

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')

Le code produira la sortie suivante -

La valeur p que nous obtenons dans l'exemple est nettement inférieure à 0,05, donc R renvoie le symbole «***» pour indiquer cela. Cela signifie que nous rejetons l'hypothèse nulle et que nous trouvons des différences entre les moyennes de mpg parmi les différents groupes decyl variable.