빅 데이터 분석-통계적 방법

데이터를 분석 할 때 통계적 접근이 가능합니다. 기본 분석을 수행하는 데 필요한 기본 도구는 다음과 같습니다.

  • 상관 분석
  • 분산 분석
  • 가설 검증

대규모 데이터 세트로 작업 할 때 상관 분석을 제외하고는 이러한 방법이 계산 집약적이지 않으므로 문제가 발생하지 않습니다. 이 경우 항상 샘플을 채취 할 수 있으며 결과는 견고해야합니다.

상관 분석

상관 관계 분석은 숫자 변수 간의 선형 관계를 찾습니다. 이것은 다른 상황에서 사용될 수 있습니다. 한 가지 일반적인 용도는 탐색 적 데이터 분석이며,이 책의 섹션 16.0.2에는이 접근 방식의 기본 예가 있습니다. 우선, 언급 된 예에서 사용 된 상관 관계 측정 항목은Pearson coefficient. 그러나 특이 치의 영향을받지 않는 또 다른 흥미로운 상관 관계 지표가 있습니다. 이 측정 항목을 spearman 상관 관계라고합니다.

그만큼 spearman correlation 메트릭은 Pearson 방법보다 특이 치의 존재에 더 강력하며 데이터가 정규 분포를 따르지 않을 때 숫자 변수 간의 선형 관계에 대한 더 나은 추정치를 제공합니다.

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

다음 그림의 히스토그램에서 두 메트릭의 상관 관계에서 차이를 예상 할 수 있습니다. 이 경우 변수가 명확하게 정규 분포를 따르지 않기 때문에 spearman 상관 관계는 숫자 변수 간의 선형 관계를 더 잘 추정합니다.

R의 상관 관계를 계산하려면 파일을 엽니 다. bda/part2/statistical_methods/correlation/correlation.R 이 코드 섹션이 있습니다.

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

카이 제곱 검정

카이 제곱 테스트를 사용하면 두 개의 랜덤 변수가 독립적인지 테스트 할 수 있습니다. 이는 각 변수의 확률 분포가 다른 변수에 영향을 미치지 않음을 의미합니다. R에서 테스트를 평가하려면 먼저 분할 테이블을 만든 다음 테이블을chisq.test R 함수.

예를 들어, 다이아몬드 데이터 셋의 cut과 color 변수 사이에 연관성이 있는지 확인해 보겠습니다. 테스트는 공식적으로 다음과 같이 정의됩니다.

  • H0 : 가변 컷과 다이아몬드는 독립적입니다.
  • H1 : 가변 컷과 다이아몬드는 독립적이지 않습니다.

이름으로이 두 변수간에 관계가 있다고 가정하지만 테스트는이 결과가 얼마나 중요한지 여부를 나타내는 객관적인 "규칙"을 제공 할 수 있습니다.

다음 코드 스 니펫에서 테스트의 p- 값은 2.2e-16이고 실제적으로는 거의 0입니다. 그런 다음 테스트를 실행 한 후Monte Carlo simulation, 우리는 p- 값이 0.0004998로 여전히 임계 값 0.05보다 훨씬 낮다는 것을 발견했습니다. 이 결과는 귀무 가설 (H0)을 기각한다는 것을 의미하므로 변수가cutcolor 독립적이지 않습니다.

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

T- 테스트

아이디어 t-test명목 변수의 서로 다른 그룹간에 숫자 변수 분포에 차이가 있는지 평가하는 것입니다. 이를 입증하기 위해 요인 변수 컷의 공정 및 이상 수준 수준을 선택한 다음 두 그룹간에 숫자 변수 값을 비교합니다.

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

t- 검정은 R에서 t.test함수. t.test에 대한 공식 인터페이스는 그것을 사용하는 가장 간단한 방법이며, 아이디어는 숫자 변수가 그룹 변수로 설명된다는 것입니다.

예를 들면 : t.test(numeric_variable ~ group_variable, data = data). 이전 예에서numeric_variable 이다 price 그리고 group_variable 이다 cut.

통계적 관점에서 두 그룹 간의 숫자 변수 분포에 차이가 있는지 테스트하고 있습니다. 공식적으로 가설 검정은 귀무 (H0) 가설과 대립 가설 (H1)로 설명됩니다.

  • H0 : 공정한 그룹과 이상적인 그룹 간의 가격 변수 분포에는 차이가 없습니다.

  • H1 공정한 그룹과 이상적인 그룹 간의 가격 변수 분포에 차이가 있습니다.

다음은 다음 코드로 R에서 구현할 수 있습니다.

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

p- 값이 0.05 미만인지 확인하여 검정 결과를 분석 할 수 있습니다. 이 경우 대립 가설을 유지합니다. 이는 컷 팩터의 두 수준간에 가격 차이를 발견했음을 의미합니다. 레벨의 이름으로 우리는이 결과를 예상했을 것이지만 실패 그룹의 평균 가격이 이상적인 그룹보다 높을 것이라고는 예상하지 못했을 것입니다. 각 요인의 평균을 비교하여이를 알 수 있습니다.

그만큼 plot명령은 가격과 컷 변수 사이의 관계를 보여주는 그래프를 생성합니다. 이것은 상자 그림입니다. 섹션 16.0.1에서이 그림을 다루었지만 기본적으로 분석중인 두 가지 수준의 인하에 대한 가격 변수의 분포를 보여줍니다.

분산 분석

분산 분석 (ANOVA)은 각 그룹의 평균과 분산을 비교하여 그룹 분포 간의 차이를 분석하는 데 사용되는 통계 모델이며, 모델은 Ronald Fisher가 개발했습니다. ANOVA는 여러 그룹의 평균이 같은지 여부에 대한 통계 테스트를 제공하므로 t- 테스트를 세 개 이상의 그룹으로 일반화합니다.

ANOVA는 통계적 유의성에 대해 세 개 이상의 그룹을 비교하는 데 유용합니다. 여러 개의 2- 표본 t- 검정을 수행하면 통계 제 1 종 오류를 범할 가능성이 증가하기 때문입니다.

수학적 설명을 제공하는 측면에서 테스트를 이해하려면 다음이 필요합니다.

x ij = x + (x i − x) + (x ij − x)

이것은 다음 모델로 이어집니다-

x ij = μ + α i + ∈ ij

여기서 μ는 총 평균이고 α i 는 i 번째 그룹 평균입니다. 오차항 ij 는 정규 분포의 iid라고 가정합니다. 검정의 귀무 가설은 다음과 같습니다.

α 1 = α 2 =… = α k

테스트 통계를 계산할 때 두 값을 계산해야합니다.

  • 그룹 차이에 대한 제곱합 −

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

  • 그룹 내 제곱의 합

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

여기서 SSD B 의 자유도는 k-1이고 SSD W 의 자유도는 N-k입니다. 그런 다음 각 메트릭에 대한 평균 제곱 차이를 정의 할 수 있습니다.

MS B = SSD B / (k-1)

MS w = SSD w / (N-k)

마지막으로 ANOVA의 검정 통계량은 위의 두 양의 비율로 정의됩니다.

F = MS B / MS w

k-1N-k 자유도를 갖는 F- 분포를 따릅니다 . 귀무 가설이 참이면 F는 1에 가까울 것입니다. 그렇지 않으면 그룹 간 평균 제곱 MSB가 클 가능성이 높아 F 값이 커집니다.

기본적으로 ANOVA는 총 분산의 두 소스를 조사하고 어떤 부분이 더 많은 기여를하는지 확인합니다. 이것이 그룹 평균을 비교하려는 의도이지만 분산 분석이라고하는 이유입니다.

통계 계산 측면에서 실제로 R에서 수행하는 것은 다소 간단합니다. 다음 예제는 수행 방법을 보여주고 결과를 플로팅합니다.

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

코드는 다음 출력을 생성합니다.

예제에서 얻은 p- 값은 0.05보다 훨씬 작으므로 R은이를 나타내는 기호 '***'를 반환합니다. 그것은 우리가 귀무 가설을 기각하고 다른 그룹의 mpg 평균 사이의 차이를 발견한다는 것을 의미합니다.cyl 변하기 쉬운.