Big Data Analytics - metody statystyczne

Analizując dane, można przyjąć podejście statystyczne. Podstawowe narzędzia potrzebne do wykonania podstawowej analizy to -

  • Analiza korelacji
  • Analiza wariancji
  • Testowanie hipotez

Podczas pracy z dużymi zbiorami danych nie stanowi to problemu, ponieważ te metody nie wymagają intensywnych obliczeń, z wyjątkiem analizy korelacji. W takim przypadku zawsze można pobrać próbkę, a wyniki powinny być rzetelne.

Analiza korelacji

Analiza korelacji ma na celu znalezienie liniowych zależności między zmiennymi numerycznymi. Może to być przydatne w różnych okolicznościach. Jednym z powszechnych zastosowań jest eksploracyjna analiza danych, w sekcji 16.0.2 książki znajduje się podstawowy przykład tego podejścia. Po pierwsze, metryka korelacji użyta w tym przykładzie jest oparta naPearson coefficient. Istnieje jednak inna interesująca miara korelacji, na którą wartości odstające nie mają wpływu. Ta miara nazywa się korelacją włócznika.

Plik spearman correlation metryka jest bardziej odporna na obecność wartości odstających niż metoda Pearsona i daje lepsze oszacowania zależności liniowych między zmiennymi liczbowymi, gdy dane nie mają rozkładu normalnego.

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

Z histogramów na poniższym rysunku możemy spodziewać się różnic w korelacjach obu wskaźników. W tym przypadku, ponieważ zmienne wyraźnie nie mają rozkładu normalnego, korelacja Spearmana jest lepszym oszacowaniem liniowej zależności między zmiennymi numerycznymi.

Aby obliczyć korelację w R, otwórz plik bda/part2/statistical_methods/correlation/correlation.R który ma tę sekcję kodu.

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

Test chi kwadrat pozwala nam sprawdzić, czy dwie zmienne losowe są niezależne. Oznacza to, że rozkład prawdopodobieństwa każdej zmiennej nie wpływa na drugą. Aby ocenić test w R, musimy najpierw utworzyć tabelę kontyngencji, a następnie przekazać ją dochisq.test R funkcjonować.

Na przykład, sprawdźmy, czy istnieje powiązanie między zmiennymi: szlifem i kolorem ze zbioru danych o diamentach. Test jest formalnie zdefiniowany jako -

  • H0: Zmienne cięcie i diament są niezależne
  • H1: Zmienna szlif i diament nie są niezależne

Zakładalibyśmy, że istnieje związek między tymi dwiema zmiennymi poprzez ich nazwy, ale test może dać obiektywną „regułę” mówiącą, jak istotny jest ten wynik, czy nie.

W poniższym fragmencie kodu stwierdziliśmy, że wartość p testu wynosi 2,2e-16, co w praktyce jest prawie zerowe. Następnie po uruchomieniu testu wykonując plikMonte Carlo simulation, stwierdziliśmy, że wartość p wynosi 0,0004998, co jest nadal dość niższe niż próg 0,05. Ten wynik oznacza, że ​​odrzucamy hipotezę zerową (H0), więc wierzymy zmiennymcut i color nie są niezależni.

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.

Pomysł t-testpolega na ocenie, czy istnieją różnice w liczbowym rozkładzie zmiennych # między różnymi grupami zmiennej nominalnej. Aby to zademonstrować, wybiorę poziomy Dostatecznego i Idealnego cięcia zmiennej czynnikowej, a następnie porównamy wartości zmiennej numerycznej między tymi dwiema grupami.

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

Testy t są implementowane w języku R z rozszerzeniem t.testfunkcjonować. Interfejs formuły do ​​t.test jest najprostszym sposobem jego użycia, chodzi o to, że zmienna numeryczna jest wyjaśniona przez zmienną grupową.

Na przykład: t.test(numeric_variable ~ group_variable, data = data). W poprzednim przykładzienumeric_variable jest price i group_variable jest cut.

Z perspektywy statystycznej sprawdzamy, czy istnieją różnice w rozkładach zmiennej liczbowej między dwiema grupami. Formalnie test hipotezy jest opisany hipotezą zerową (H0) i hipotezą alternatywną (H1).

  • H0: Nie ma różnic w rozkładach zmiennej ceny między grupami Fair i Ideal

  • H1 Występują różnice w rozkładach zmiennej ceny między grupami Fair i Ideal

Poniższe można zaimplementować w języku R za pomocą następującego kodu -

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

Możemy przeanalizować wynik testu, sprawdzając, czy wartość p jest niższa niż 0,05. W takim przypadku zachowujemy hipotezę alternatywną. Oznacza to, że znaleźliśmy różnice cen między dwoma poziomami współczynnika obniżki. Po nazwach poziomów spodziewalibyśmy się takiego wyniku, ale nie spodziewalibyśmy się, że średnia cena w grupie Fail będzie wyższa niż w grupie Ideal. Możemy to zobaczyć, porównując średnie każdego czynnika.

Plik plotpolecenie tworzy wykres pokazujący zależność między ceną a zmienną cięcia. To jest wykres pudełkowy; wykres ten omówiliśmy w sekcji 16.0.1, ale zasadniczo pokazuje on rozkład zmiennej ceny dla dwóch analizowanych przez nas poziomów cięcia.

Analiza wariancji

Analiza wariancji (ANOVA) to model statystyczny używany do analizy różnic między rozkładami grup poprzez porównanie średniej i wariancji w każdej grupie, model został opracowany przez Ronalda Fishera. ANOVA zapewnia statystyczny test tego, czy średnie z kilku grup są równe, a zatem uogólnia test t na więcej niż dwie grupy.

ANOVA są przydatne do porównywania trzech lub więcej grup pod kątem istotności statystycznej, ponieważ wykonanie wielu testów t dla dwóch prób skutkowałoby zwiększeniem szansy popełnienia błędu statystycznego typu I.

Jeśli chodzi o wyjaśnienie matematyczne, do zrozumienia testu potrzebne są następujące informacje.

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

Prowadzi to do następującego modelu -

x ij = μ + α i + ∈ ij

gdzie μ jest średnią wielką, a α i jest średnią i -tej grupy. Zakłada się, że składnik błędu ij jest iid z rozkładu normalnego. Hipoteza zerowa testu jest taka, że ​​-

α 1 = α 2 =… = α k

Jeśli chodzi o obliczanie statystyki testowej, musimy obliczyć dwie wartości -

  • Suma kwadratów różnicy między grupami -

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

  • Sumy kwadratów w grupach

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

gdzie SSD B ma stopień swobody k-1, a SSD W ma stopień swobody N-k. Następnie możemy zdefiniować średnie kwadratowe różnice dla każdej metryki.

MS B = SSD B / (k - 1)

MS w = SSD z / (N - k)

Wreszcie statystyka testowa w ANOVA jest definiowana jako stosunek powyższych dwóch wielkości

F = MS B / MS w

który następuje po rozkładzie F z k-1 i N-k stopniami swobody. Jeśli hipoteza zerowa jest prawdziwa, F prawdopodobnie będzie bliskie 1. W przeciwnym razie średni kwadratowy MSB między grupami będzie prawdopodobnie duży, co skutkuje dużą wartością F.

Zasadniczo ANOVA bada dwa źródła całkowitej wariancji i widzi, która część ma większy wpływ. Dlatego nazywa się to analizą wariancji, chociaż celem jest porównanie średnich grupowych.

Jeśli chodzi o obliczanie statystyki, jest to raczej proste do zrobienia w R. Poniższy przykład pokaże, jak to się robi i wykreśli wyniki.

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

Kod wygeneruje następujący wynik -

Wartość p, którą otrzymujemy w przykładzie, jest znacznie mniejsza niż 0,05, więc R zwraca symbol „***”, aby to oznaczyć. Oznacza to, że odrzucamy hipotezę zerową i znajdujemy różnice między średnimi mpg między różnymi grupamicyl zmienna.