통계 분석

통계 자료는 범주형 자료(명목형 / 순서형 으로 나뉨)와 수치형 자료 로 나뉜다.

기술통계

-기본적인 통계 -평균값, 최솟값, 최댓값, 중앙값 등을 뜻함

setwd("~/R_edu/source_2021/2_day_stat_regression/source")
albums = read.csv("album.csv")
albums$sales
##   [1] 330 120 360 270 220 170  70 210 200 300 290  70 150 190 240 100 250 210
##  [19] 280 230 210 230 320 210 230 250  60 330 150 150 180  80 180 130 320 280
##  [37] 200 130 190 150 230 310 340 240 180 220  40 190 290 340 250 190 120 230
##  [55] 190 210 170 310  90 140 300 340 170 100 200  80 100  70  50 240 160 290
##  [73] 140 210 300 230 280 160 200 110 110  70 100 190  70 360 360 300 120 150
##  [91] 220 280 300 140 290 180 140 210 250 250 120 290  60 140 290 160 100 160
## [109] 150 140 230 230  30  80 190  90 120 150 230 150 210 180 140 360  10 240
## [127] 270 290 220 230 220 240 260 170 130 270 140  60 210 210 240 210 200 140
## [145]  90 120 100 360 180 150 110  90 160 230  40  60 230 230 120 150 120  60
## [163] 280 120 230 230  40 140 360 210 260 250 200 150 250 100 260 210 290 220
## [181]  70 110 250 320 300 180 180 200 320 140 100 120 230 150 250 190 240 250
## [199] 230 110
sort(albums$sales)
##   [1]  10  30  40  40  40  50  60  60  60  60  60  70  70  70  70  70  70  80
##  [19]  80  80  90  90  90  90 100 100 100 100 100 100 100 100 110 110 110 110
##  [37] 110 120 120 120 120 120 120 120 120 120 120 130 130 130 140 140 140 140
##  [55] 140 140 140 140 140 140 140 150 150 150 150 150 150 150 150 150 150 150
##  [73] 150 160 160 160 160 160 170 170 170 170 180 180 180 180 180 180 180 180
##  [91] 190 190 190 190 190 190 190 190 200 200 200 200 200 200 200 210 210 210
## [109] 210 210 210 210 210 210 210 210 210 210 220 220 220 220 220 220 230 230
## [127] 230 230 230 230 230 230 230 230 230 230 230 230 230 230 230 240 240 240
## [145] 240 240 240 240 250 250 250 250 250 250 250 250 250 250 260 260 260 270
## [163] 270 270 280 280 280 280 280 290 290 290 290 290 290 290 290 300 300 300
## [181] 300 300 300 310 310 320 320 320 320 330 330 340 340 340 360 360 360 360
## [199] 360 360

#최소값

sort(albums$sales)[1]
## [1] 10
min(albums$sales)
## [1] 10

최댓값

sort(albums$sales)[200]
## [1] 360
max(albums$sales)
## [1] 360

#최빈값

table(albums$sales)
## 
##  10  30  40  50  60  70  80  90 100 110 120 130 140 150 160 170 180 190 200 210 
##   1   1   3   1   5   6   3   4   8   5  10   3  11  12   5   4   8   8   7  13 
## 220 230 240 250 260 270 280 290 300 310 320 330 340 360 
##   6  17   7  10   3   3   5   8   6   2   4   2   3   6
sort(table(albums$sales), decreasing = TRUE)[1]
## 230 
##  17

평균값 , 중간값

mean(albums$sales)
## [1] 193.2
median(albums$sales)
## [1] 200

#결측치 데이터 추가

sales2 = c(albums$sales, NA)
tail(sales2)
## [1] 190 240 250 230 110  NA
mean(sales2)
## [1] NA
mean(sales2, na.rm = TRUE) # na.rm=TRUE NA 값을 없앤다.
## [1] 193.2

#평균의 가장 큰 단점 # 극단적 값에 굉장히 민감함 #중간값은 극단적 값에 둔감함

weight=c(64,68,70,72,76)
weight_mean = mean(weight) # 평균
weight_mean
## [1] 70
weight_deviation = weight - weight_mean #편차차
weight_deviation
## [1] -6 -2  0  2  6
sum(weight_deviation)
## [1] 0
weight_deviation_2 = weight_deviation ^2
sum(weight_deviation_2)
## [1] 80
mean(weight_deviation_2) # 분산
## [1] 16

#표준 편차

sqrt(mean(weight_deviation_2))
## [1] 4

표본 분산

var(weight)
## [1] 20

표본 표준 편차

sd(weight) 
## [1] 4.472136

#변동계수 : 표준편차를 평균으로 나눈값 (cv)

————————————-

변동 계수

cv(변동 계수) = sd(표본 표준 편차) / mean(평균)

추론통계

  • 변수 간의 관계를 파악, 변수 간의 인과관계나 새로운 사실들을 밝히는것

평균차이 검정

  • 집단 별 평균 차이가 실제로 있는지 검정하는 과정

  • 남녀 등, 두 집단 사이의 평균 차이를 분석할 때 독립표본 t 검정 사용

  • R에 내장된 t.test() 함수 사용

방법 1: t.test(data=데이터세트, 종속변수(비교값)~독립변수(비교대상)) 방법 2: t.test(데이터세트\(종속변수(비교값)~데이터세트\)독립변수(비교대상))

예제인 mpg1.csv 에서 trans 변수의 기어 변속 방법으로 auto 와 manual 두 방식으로 나누어져 있고, 두 방식에 따라 cty(1갤런당 달리는 거리) 평균이 통계적으로 유의미한 차이가 있는가?를 알아보려 한다. 독립변수는 trans, 종속 변수는 cty 이다. 귀무가설: auto와 manual의 cty 평균은 차이가 없다. 대립가설: auto와 manual의 cty 평균은 차이가 있다.

setwd("~/R_edu/source_2021/1_day_eda/solution/data/public_dataset")
mpg1<- read.csv("mpg1.csv", stringsAsFactors=F)

t.test(data=mpg1, cty~trans) # 방법 2 : t.test(mpg1$cty~mpg1$trans) 
## 
##  Welch Two Sample t-test
## 
## data:  cty by trans
## t = -4.5375, df = 132.32, p-value = 1.263e-05
## alternative hypothesis: true difference in means between group auto and group manual is not equal to 0
## 95 percent confidence interval:
##  -3.887311 -1.527033
## sample estimates:
##   mean in group auto mean in group manual 
##             15.96815             18.67532
  • p-value = 1.263e-0.5 = 1.263/100000 의 유의수준을 갖고있다는 뜻
  • 유의 수준이 0.05보다 훨씬 적기 때문에 유의수준 허용 조건(p<0.05)을 만족시키므로 대립가설이 충족 되었음.
  • 95 percent confidence interval 은 신뢰수준이 95%라는 뜻

교차 분석

  • 교차 분석은 범주형 변수들이 관게가 있다는 것을 입증하는 것.
  • 평균의 차이가 아니라, 비율에 차이가 있는지 검정.
  • R에서 chisq.test() 함수로 진행
setwd("~/R_edu/source_2021/1_day_eda/solution/data/public_dataset")
mpg1<- read.csv("mpg1.csv", stringsAsFactors = F)

table(mpg1$trans,mpg1$drv) # trans와 drv의 교차분석
##         
##           4  f  r
##   auto   75 65 17
##   manual 28 41  8
prop.table(table(mpg1$trans, mpg1$drv),1) # auto와 manual의 drv 비율 분석
##         
##                  4         f         r
##   auto   0.4777070 0.4140127 0.1082803
##   manual 0.3636364 0.5324675 0.1038961
  • auto 에서는 4륜구동이 47.8%, manual 에서는 전륜구동이 53.2%로 가장 많아서 trans에 따라 drv에 차이가 있는 것같다. 그리고 이 정보가 정말 맞는지 통계적으로 분석하는 것이 교차 분석

교차 분석을 하는 방법 3가지 1. chisq.test() 2. chisq.test(table()) 3. summary(table())

1번 방법

chisq.test(mpg1$trans, mpg1$drv)
## 
##  Pearson's Chi-squared test
## 
## data:  mpg1$trans and mpg1$drv
## X-squared = 3.1368, df = 2, p-value = 0.2084

2번 방법

chisq.test(table(mpg1$trans, mpg1$drv))
## 
##  Pearson's Chi-squared test
## 
## data:  table(mpg1$trans, mpg1$drv)
## X-squared = 3.1368, df = 2, p-value = 0.2084

3번 방법

summary(table(mpg1$trans, mpg1$drv))
## Number of cases in table: 234 
## Number of factors: 2 
## Test for independence of all factors:
##  Chisq = 3.1368, df = 2, p-value = 0.2084

p-value(유의수준) = 0.2084이므로 p > 0.05 입니다. 대립가설을 기각하지 못하므로 trans에 따라 drv에 차이가 있다고 할 수 없습니다.

상관관계분석

  • 변수 간의 상관관계와 그 강도를 알아보는 분석

  • 상관 관계 분석은 R에 내장되어 있는 cor.test() 함수로 합니다.

cor.test(데이터세트\(비교변수1, 데이터세트\)비교변수2)

mpg1 속 cty(도시에서 1갤런당 달리는 거리) 와 hwy(고속도로에서 1갤런당 달리는 거리) 사이의 상관관계를 분석

귀무가설: cty와 hwy는 상관관계가 없다. 대립가설: cty와 hwy는 상관관계가 있다.

setwd("~/R_edu/source_2021/1_day_eda/solution/data/public_dataset")
mpg1<- read.csv("mpg1.csv", stringsAsFactors = F)

cor.test(mpg1$cty, mpg1$hwy) #상관관계분석
## 
##  Pearson's product-moment correlation
## 
## data:  mpg1$cty and mpg1$hwy
## t = 49.585, df = 232, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.9433129 0.9657663
## sample estimates:
##       cor 
## 0.9559159
  • p-value < 2.2e-16 이므로 유의수준 p < 0.05 입니다. 대립가설을 채택할 수 있습니다.
  • cor(상관관계) = 0.9559159 입니다. “cty와 hwy는 유의미하게 매우 높은 상관관계에 있다.”는 뜻입니다.

회귀 분석

  • 상관관계 분석으로는 알 수 없는 인과관계를 알 기 위한 분석
  • 영향을 주는 것과 영향을 받는 것을 구별

#단순 회귀 분석

  • 단순 회귀 분석은 독립변수가 1개, 종속변수가 1개일 때 합니다.
  • 회귀분석은 R의 lm() 함수로 합니다. 방법 1. lm(data=데이터세트, 종속변수~독립변수) 방법 2. lm(종속변수 ~ 독립변수, data=데이터세트) 방법 3. lm(데이터세트\(종속변수 ~ 데이터세트\)독립변수)

예제: R이 자체적으로 가지고 있는 mtcars 데이터 셋 사용 총 11개 변수 , 32개 자동차의 정보 중 disp(배기량)이 mpg(1갤런당 주행 마일)에 끼치는 영향

str(mtcars) 로 mtcars에 있는 변수들을 살펴 보면, disp와 mpg 모두 실수형(num) 변수이기 때문에 회귀분석 가능. 귀무가설: disp는 mpg에 영향을 주지 않는다. 대립가설: disp는 mpg에 영향을 준다.

lm(data=mtcars, mpg~disp) #lm(mpg~disp, data=mtcars), lm(mtcars$mpg~mtcars$disp)의 결과도 같다
## 
## Call:
## lm(formula = mpg ~ disp, data = mtcars)
## 
## Coefficients:
## (Intercept)         disp  
##    29.59985     -0.04122
  • 결과에 따르면 disp의 계수는 -0.04122, 절편은 29.59985(단순 회귀 분석은 1차 함수를 구하는 것과 같음)
  • mpg = 29.59985 - 0.04122 * disp
  • 그러나 유의수준 분석결과가 없거나 유의 수준이 0.05 이상이면 회귀 계수는 의미가 없어짐.
  • 따라서 회귀 분석의 유의 수준 값을 알아 볼 필요가 있다.
  • lm()결과를 summary() 함수에 넣으면 유의수준을 비롯한 상세한 회귀 분석 결과를 알 수 있음.
RA <- lm(data=mtcars, mpg~disp) # 회귀분석 결과를 RA 에

summary(RA) # 상세한 분석 결과 출력
## 
## Call:
## lm(formula = mpg ~ disp, data = mtcars)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.8922 -2.2022 -0.9631  1.6272  7.2305 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 29.599855   1.229720  24.070  < 2e-16 ***
## disp        -0.041215   0.004712  -8.747 9.38e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.251 on 30 degrees of freedom
## Multiple R-squared:  0.7183, Adjusted R-squared:  0.709 
## F-statistic: 76.51 on 1 and 30 DF,  p-value: 9.38e-10

마지막 항목에서 p-value 확인 가능(해당 값은 9.38e-10 으로 p<0.05 이므로 회귀모형이 적합하다고 해석할 수 있다.)

다중 회귀 분석

방법 1. lm(data=데이터세트, 종속변수 ~ 독립변수1 + 독립변수2+…) 방법 2. lm(종속 변수 ~ 독립변수1+독립변수2+…, data=데이터세트) 방법 3. lm(데이터세트\(종속변수 ~ 데이터세트\)독립변수1 + 데이터세트$독립변수2+….)

예제: mtcars 데이터로 실습(mpg 와 독립변수들 disp(배기량), hp(마력), wt(중량))

lm(data = mtcars, mpg~disp + hp +wt)
## 
## Call:
## lm(formula = mpg ~ disp + hp + wt, data = mtcars)
## 
## Coefficients:
## (Intercept)         disp           hp           wt  
##   37.105505    -0.000937    -0.031157    -3.800891
# lm(mpg~disp+hp+wt, data=mtcars), lm(mtcars$mpg~mtcars$disp+mtcars$hp+mtcars$wt) 모두 동일한 결과
RA <- lm(data=mtcars, mpg~disp+hp+wt) 
summary(RA)
## 
## Call:
## lm(formula = mpg ~ disp + hp + wt, data = mtcars)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -3.891 -1.640 -0.172  1.061  5.861 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 37.105505   2.110815  17.579  < 2e-16 ***
## disp        -0.000937   0.010350  -0.091  0.92851    
## hp          -0.031157   0.011436  -2.724  0.01097 *  
## wt          -3.800891   1.066191  -3.565  0.00133 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.639 on 28 degrees of freedom
## Multiple R-squared:  0.8268, Adjusted R-squared:  0.8083 
## F-statistic: 44.57 on 3 and 28 DF,  p-value: 8.65e-11