통계 자료는 범주형 자료(명목형 / 순서형 으로 나뉨)와 수치형 자료 로 나뉜다.
-기본적인 통계 -평균값, 최솟값, 최댓값, 중앙값 등을 뜻함
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
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
교차 분석을 하는 방법 3가지 1. chisq.test() 2. chisq.test(table()) 3. summary(table())
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
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
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
#단순 회귀 분석
예제: 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
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