Análise de Big Data - Métodos Estatísticos

Ao analisar os dados, é possível ter uma abordagem estatística. As ferramentas básicas necessárias para realizar a análise básica são -

  • Análise de correlação
  • Análise de variação
  • Testando hipóteses

Ao trabalhar com grandes conjuntos de dados, isso não envolve um problema, pois esses métodos não são computacionalmente intensivos, com exceção da análise de correlação. Nesse caso, sempre é possível tirar uma amostra e os resultados devem ser robustos.

Análise de correlação

A Análise de Correlação procura encontrar relações lineares entre variáveis ​​numéricas. Isso pode ser útil em diferentes circunstâncias. Um uso comum é a análise exploratória de dados, na seção 16.0.2 do livro há um exemplo básico dessa abordagem. Em primeiro lugar, a métrica de correlação usada no exemplo mencionado é baseada naPearson coefficient. No entanto, há outra métrica interessante de correlação que não é afetada por outliers. Essa métrica é chamada de correlação spearman.

o spearman correlation métrica é mais robusta à presença de outliers do que o método de Pearson e fornece melhores estimativas das relações lineares entre as variáveis ​​numéricas quando os dados não são normalmente distribuídos.

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 dos histogramas da figura a seguir, podemos esperar diferenças nas correlações de ambas as métricas. Nesse caso, como as variáveis ​​claramente não têm distribuição normal, a correlação de Spearman é uma estimativa melhor da relação linear entre as variáveis ​​numéricas.

Para calcular a correlação em R, abra o arquivo bda/part2/statistical_methods/correlation/correlation.R que tem esta seção 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

Teste Qui-quadrado

O teste qui-quadrado nos permite testar se duas variáveis ​​aleatórias são independentes. Isso significa que a distribuição de probabilidade de cada variável não influencia a outra. Para avaliar o teste em R, precisamos primeiro criar uma tabela de contingência e, em seguida, passá-la para ochisq.test R função.

Por exemplo, vamos verificar se existe uma associação entre as variáveis: corte e cor do conjunto de dados de diamantes. O teste é formalmente definido como -

  • H0: O corte variável e o diamante são independentes
  • H1: O corte variável e o diamante não são independentes

Suporíamos que existe uma relação entre essas duas variáveis ​​por seus nomes, mas o teste pode fornecer uma "regra" objetiva dizendo o quão significativo é esse resultado ou não.

No fragmento de código a seguir, descobrimos que o valor p do teste é 2,2e-16, isso é quase zero em termos práticos. Então, depois de executar o teste, fazer umMonte Carlo simulation, descobrimos que o valor p é 0,0004998, que ainda é bastante inferior ao limite 0,05. Este resultado significa que rejeitamos a hipótese nula (H0), então acreditamos nas variáveiscut e color não são independentes.

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

Teste t

A ideia de t-testé avaliar se existem diferenças na distribuição de uma variável numérica # entre diferentes grupos de uma variável nominal. Para demonstrar isso, selecionarei os níveis dos níveis Justo e Ideal do fator de corte variável, em seguida, compararemos os valores de uma variável numérica entre esses dois 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

Os testes t são implementados em R com o t.testfunção. A interface da fórmula para t.test é a maneira mais simples de usá-la, a ideia é que uma variável numérica é explicada por uma variável de grupo.

Por exemplo: t.test(numeric_variable ~ group_variable, data = data). No exemplo anterior, onumeric_variable é price e a group_variable é cut.

Do ponto de vista estatístico, estamos testando se há diferenças nas distribuições da variável numérica entre dois grupos. Formalmente, o teste de hipótese é descrito com uma hipótese nula (H0) e uma hipótese alternativa (H1).

  • H0: Não há diferenças nas distribuições da variável de preço entre os grupos Justo e Ideal

  • H1 Existem diferenças nas distribuições da variável preço entre os grupos Justo e Ideal

O seguinte pode ser implementado em R com o seguinte 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 analisar o resultado do teste verificando se o valor p é menor que 0,05. Se for esse o caso, mantemos a hipótese alternativa. Isso significa que encontramos diferenças de preço entre os dois níveis do fator de corte. Pelos nomes dos níveis, esperaríamos esse resultado, mas não esperaríamos que o preço médio no grupo Fail fosse maior do que no grupo Ideal. Podemos ver isso comparando as médias de cada fator.

o plotcomando produz um gráfico que mostra a relação entre o preço e a variável de corte. É um enredo de caixa; cobrimos esse gráfico na seção 16.0.1, mas basicamente mostra a distribuição da variável de preço para os dois níveis de corte que estamos analisando.

Análise de variação

A Análise de Variância (ANOVA) é um modelo estatístico utilizado para analisar as diferenças entre a distribuição dos grupos, comparando a média e a variância de cada grupo, o modelo foi desenvolvido por Ronald Fisher. A ANOVA fornece um teste estatístico para determinar se as médias de vários grupos são iguais ou não e, portanto, generaliza o teste t para mais de dois grupos.

ANOVAs são úteis para comparar três ou mais grupos para significância estatística porque fazer vários testes t de duas amostras resultaria em uma chance maior de cometer um erro estatístico tipo I.

Em termos de fornecer uma explicação matemática, o seguinte é necessário para entender o teste.

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

Isso leva ao seguinte modelo -

x ij = μ + α i + ∈ ij

onde μ é a grande média e α i é a i-ésima média do grupo. O termo de erro ij é assumido como sendo iid de uma distribuição normal. A hipótese nula do teste é que -

α 1 = α 2 =… = α k

Em termos de cálculo da estatística de teste, precisamos calcular dois valores -

  • Soma dos quadrados para diferença entre os grupos -

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

  • Soma dos quadrados dentro dos grupos

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

onde SSD B tem um grau de liberdade de k − 1 e SSD W tem um grau de liberdade de N − k. Em seguida, podemos definir as diferenças médias quadradas para cada métrica.

MS B = SSD B / (k - 1)

MS w = SSD w / (N - k)

Finalmente, a estatística de teste em ANOVA é definida como a razão das duas quantidades acima

F = MS B / MS w

que segue uma distribuição F com k − 1 e N − k graus de liberdade. Se a hipótese nula for verdadeira, F provavelmente seria próximo de 1. Caso contrário, o MSB do quadrado médio entre os grupos provavelmente será grande, o que resulta em um grande valor de F.

Basicamente, ANOVA examina as duas fontes da variância total e vê qual parte contribui mais. É por isso que é chamada de análise de variância, embora a intenção seja comparar as médias dos grupos.

Em termos de cálculo da estatística, é realmente bastante simples de fazer em R. O exemplo a seguir demonstrará como isso é feito e representará graficamente os 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')

O código produzirá a seguinte saída -

O valor de p obtido no exemplo é significativamente menor do que 0,05, então R retorna o símbolo '***' para denotar isso. Isso significa que rejeitamos a hipótese nula e que encontramos diferenças entre as médias de mpg entre os diferentes grupos docyl variável.