1.교육수준과 흡연정도의 상관관계

※ 
x2 (chi_square) 검정
카이제곱검정은 카이제곱 분포에 기초한 통계적 방법으로, 관찰된 빈도가 기대되는 빈도와 의미있게 다른지의 여부를 검증하기 위해
사용되는 검증방법이다. 자료가 빈도로 주어졌을 때, 특히 명목척도 자료의 분석에 이용된다. 

카이제곱 값은 χ2 = Σ (관측값 - 기댓값)2 / 기댓값 으로 계산한다.

검증유형
- 동질성 검증: '변인의 분포가 이항분포나 정규분포와 동일하다'라는 가설을 설정한다. 이는 어떤 모집단의 표본이 그 모집단을
  대표하고  있는지를 검증하는 데 사용한다.
- 독립성 검증: 변인이 두 개 이상일 때 사용되며, 기대빈도는 '두 변인이 서로 상관이 없고 독립적'이라고 기대하는 것을 의미하며
  관찰빈도와의 차이를 통해 기대빈도의 진위여부를 밝힌다.

기본가정
- 변인의 제한: 종속변인이 명목변인에 의한 질적변인이거나 범주변인이어야 한다.

- 무선표집: 표본이 모집단에서 무선으로 추출되어야 한다.
- 기대빈도의 크기: 각 범주에 포함할 수 있도록 기대되는 빈도를 기대빈도라고 하는데, 이 기대빈도가 5 이상이어야 한다.
  
5보다 적으면 사례 수를 증가시켜야 한다.
- 관찰의 독립: 각 칸에 있는 빈도는 다른 칸의 사례와 상관없이 독립적이어야 한다.


문제 : 교육수준과 흡연정도는 서로 관련성이 있을까?
 
데이터:교육수준에 따른 흡연 정도에 대한 데이터
       (mystudy.xlsx의 mysmoke시트)
 
변수명:education:1-대졸,2-고졸,3-중졸
       smoke:1-과다흡연,2-보통흡연,3-비흡연
 
분석문제:
1)교육수준변수와 흡연 정보 변수를 이용한 교차 테이블 생성
2)변수보기 항목을 이용한 교차 테이블 작성
3)교육수준과 흡연 정도 간에는 서로 관련성이 있는가?
 

(1) 패키지 설치 및 데이터 읽어오기
 
#엑셀파일을 읽어오기 위한 패키지 설치
install.packages("XLConnect")
library(XLConnect)
 
#엑셀에서 mysmoke 시트 읽어오기
mystudy <- loadWorkbook("./data/mystudy.xlsx",create=T)
mysmoke <- readWorksheet(mystudy, sheet = "mysmoke")
 
mysmoke
 
#교육수준별 흡연유형 빈도수 생성
> table(mysmoke$education,mysmoke$smoking)
   
     1  2  3
  1 51 92 68
  2 22 21  9
  3 43 28 21
 
#교육수준의 항목별 데이터에 이름부여
mysmoke$education2[mysmoke$education==1] <- "university"
mysmoke$education2[mysmoke$education==2] <- "highschool"
mysmoke$education2[mysmoke$education==3] <- "elementary"
 
#흡연정도의 항목별 데이터 이름 부여
mysmoke$smoking2[mysmoke$smoking==1] <- "many"
mysmoke$smoking2[mysmoke$smoking==2] <- "middle"
mysmoke$smoking2[mysmoke$smoking==3] <- "none"
 
mysmoke
 
#위의 내용을 아래 패키지 설치후 mapvalues()를 사용하면 동일한 결과를 얻을 수 있다.
 
install.packages("plyr")
library(plyr)
mysmoke$education3 <- mapvalues(mysmoke$education,from=c(1,2,3),to=c("university","highschool","elemetary"))
mysmoke$smoking3<- mapvalues(mysmoke$smoking,from = c(1,2,3),to=c("many","middle","none"))
mysmoke
 
 
> table(mysmoke$education2,mysmoke$smoking2)
            
             many middle none
  elementary   43     28   21
  highschool   22     21    9
  university   51     92   68
 
> table(mysmoke$education3,mysmoke$smoking3)
            
             many middle none
  elemetary    43     28   21
  highscool    22     21    9
  university   51     92   68
  
 
(2) 독립성 검정
- 귀무가설 : 교육수준과 흡연정도는 서로 관련이 없다.(독립적이다.)
- 대립가설 : 교육수준과 흡연정도는 서로 관련이 있다.(독립적이지 않다)
- 아래결과에 따라 p-value값이 0.05보다 작으므로 귀무가설 기각되고
  대립가설 채택된다.
- 분석결과 교육수준과 흡연정도는 서로 관련이 있는것으로 분석된다.
- 즉 교육수준에 따라 흡연의 정도는 차이가 있는 것으로 나타났다.
  
> chisq.test(mysmoke$education2,mysmoke$smoking2)
 
Pearson's Chi-squared test
 
data:  mysmoke$education2 and mysmoke$smoking2
X-squared = 18.911, df = 4, p-value = 0.0008183
 
 
#---------------------------------------------------------------------------------------------------
2. 음료들의 유사성 분석
※ 
다차원 척도 분석(Multidimensional Scaling:MDS)
- 분석하고자 하는 대상을 복잡한 다차원적인 관계를 통해 단순한 구도로 나타내는 것을 말한다.
- 또한 각 개체들 사이의 유사성과 비유사성을 측정하여 2차원 또는 3차원 공간상에 점으로 나타내어 개체들 사이의 
  집단화를 표현하는 분석 방법이라고 할 수 있다.
- 개체들간의 근접성(proximity)을 시각화하여 데이터 속에 잠재해 있는 패턴이나 구조를 찾아내는 통계 기법.
- 점들사이의 집단화 표현은
 거리값(Distance Measure)을 이용하여 분류한다. 
  거리의 종류는 다양하지만 그 중 가장 흔히 사용하는 것은 유클리디안(Euclidean)거리를 사용한다.



MDS 분류

계량적 MDS
  데이터가 연속형 변수(구간척도, 비율척도)인 경우 사용.
  각 개체들간의 유클리드 거리 행렬을 계산하고 개체들간의 비유사성을 공간상에 표현한다.

- 비계량적 MDS
  데이터가 순서척도인 경우 사용.
  개체들간의 거리가 순서로 주어진 경우에는 순서척도를 거리의 속성과 같도록 변환하여 거리를 생성.
 
 
문제: 세 종류의 음료는 서로 유사성이 있을까?
 
예제 데이터: 3가지 종류의 음료 데이터 간의 지각도 데이터
     (mystudy.xlsx파일의 mydrink시트)
 
변수명:콜라,포카리스웨트,게토레이에 대한 유사성 평가
       (1:매우 유사함, 4: 보통, 7: 전혀 다름)
 
분석문제: 
    1) 여러명의 유사성 평가 데이터들을 이용한 평균값 산출
    2) 다차원 척도 분석을 위한 매트릭스 작성
    3) 다차원 척도 분석을 통한 지각도 작성
 

 
 
(1) 실습데이터 가져오기 및 패키지 설치
 
#엑셀의 데이터를 가져오기 위한 패키지 설치
install.packages("XLConnect")
library(XLConnect)
mystudy <- loadWorkbook("./data/mystudy.xlsx",create=T)
mydrink0 <- readWorksheet(mystudy, sheet = "mydrink",startRow = 1,startCol = 1,endRow = 11,endCol = 3)
 
# 읽어온 내용 확인
> mydrink0
   d1 d2 d3
1   6  7  2
2   5  6  2
3   5  7  1
4   4  6  2
5   6  7  2
6   5  6  2
7   5  7  1
8   4  6  2
9   5  7  3
10  4  7  1
 
#mydrink0의 각 항목의 데이터를 a1,a2,a3로 저장후 각각의 평균을 구한다.
a1<-mydrink0$d1
a2<-mydrink0$d2
a3<-mydrink0$d3
z1<-mean(a1)
z2<-mean(a2)
z3<-mean(a3)
z1;z2;z3
 
 
mystudy <- loadWorkbook("mystudy.xlsx",create=T)
mydrink <- readWorksheet(mystudy, sheet = "mydrink",startRow = 14,startCol = 1,endCol = 4)
 
> mydrink
    Drink  d1  d2  d3
1    d1   0.0 4.9 6.6
2    d2   4.9 0.0 1.8
3    d3   6.6 1.8 0.0
 
#drink항목인 1열은 제거후 다시 가져온다
mydrink2 <- mydrink[,-1]
> mydrink2
   d1  d2  d3
1 0.0 4.9 6.6
2 4.9 0.0 1.8
3 6.6 1.8 0.0



#유사성의 정도를 행렬 형식으로 보여준다. 유클리디안(Euclidean)거리를 사용
> fitdrink <- cmdscale(mydrink2)
> fitdrink
          [,1]        [,2]
[1,]  3.827381  0.08190154
[2,] -1.056500 -0.31522028
[3,] -2.770882  0.23331873
> x<-fitdrink[,1]
> y<-fitdrink[,2]

#제품들 간의 유사성 정도를 시각적으로 거리가 얼마나 차이가 있는지 보기 위해 plot함수 사용
plot(x,y,pch=19,xlim = c(-4,4),ylim = c(-2,2))
mydrinknames<-c("콜라","포카리","게토레이")
text(x,y,pos=3,labels=mydrinknames)
abline(h=0,v=0)



1. R의 t-test
 
(1) t-test의 유형
 
- t-test는 비교의 대상이 되는 두개의 그룹이 무엇인지에 따라 크게 세가지 유형으로 구분할 수 있다.
 
1) 독립 표본 t-test: 서로 다른 두개의 그룹 간의 평균 비교
   (예: 남자와 여자 간 소득의 차이 비교)
 
2) 대응 표본 t-test : 하나의 집단에 대한 비교
   (예: 과외를 하기 전과 후의 반 학생들의 성적 변화)
 
3) 단일 표본 t-test : 특정 집단의 평균이 어떤 숫자와 같은지 다른지를 비교
 
 
(2) t-test의 조건
 
- 두개의 집단에 대한 t-test를 실시하기 위해서는 등분산성, 정규성이 만족되어야 한다.
 
- 정규성의 경우 일반적으로 관측 갯수가 30개 이상일때 만족한다고 판단할 수 있다.
 
- 등분산성을 확인하기 위해서는 var.test라는 함수를 사용하면 된다. 한번 실습해 볼까요?
 

※등분산성:
 
분산분석을 통해 서로 다른 두개 이상의 집단을 비교하고자 할때, 
기본적으로 해당 집단들이 만족해야되는 조건 중 한가지로 분산이 같음을 의미한다.
 
나머지 조건은 독립성과 정규성이 있으며, 
세 가지를 모두 합쳐 IID 혹은 iid(Independent and identically distributed random variables)라고 한다.
 
a = c(175, 168, 168, 190, 156, 181, 182, 175, 174, 179)
b = c(185, 169, 173, 173, 188, 186, 175, 174, 179, 180)
 
var.test(a,b)
 
F test to compare two variances
 
data: a and b
F = 2.1028, num df = 9, denom df = 9, p-value = 0.2834
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.5223017 8.4657950
sample estimates:
ratio of variances 
 2.102784
 
p-value가 0.05보다 작은 경우 두 집단의 분산은 유의미하게 다르다고 볼 수 있다. 
위 예제에서는 p-value가 0.2834로 0.05보다 크다.
귀무가설(두집단의 분산은 다르다) 기각에 실패했으므로 두 집단의 분산은 같다고 볼 수 있다.
 
 
(3) 독립표본 t-test  (independent two sample t-test)
 
- 서로 다른 두개의 그룹 간 평균의 차이가 유의미 한지 여부를 판단하기 위한 t-test는 독립표본 t-test 이다.
- 두개의 표본이 “독립”적 이기 위해서는 아래 조건을 만족해야 한다.
 
1) 두개의 표본이 서로 관계 없는 모집단에서 추출 되었을 것
2) 표본 간에는 아무런 관계가 없을 것
 
 
- mtcars 데이터셋을 사용해서 독립표본 t-test를 해 보면, 
  mtcars 데이터셋은 1974년 미국에서 자동차 별 가스 마일리지를 측정한 데이터 이다. 
  자세한 설명은 R 콘솔에서 ?mtcars 를 입력하면 된다.
 
- str과 head 함수를 사용해서 mtcars 데이터셋이 어떻게 생겼는지를 확인한다.
 
(데이터 셋을 R에 로드할 때 str과 head 함수를 사용해서 로드가 잘 되었는지, 
 데이터 셋이 어떤 모양인지를 확인한다.)
 
 
 str(mtcars)
'data.frame': 32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
 
 
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
 
 
- 11개의 변수가 있는 32개의 관측 데이터이다. 
 
- mtcars$am 변수는 자동차 기어가 오토인지 수동인지를 기록한 변수 이다. (0=오토, 1=수동)
 
- 자동차 기어 종류(오토/수동)에 따른 mpg의 차이가 통계적으로 유의한지 t-test를 통해 확인해 보겠다.
 
- 우선 두 표본이 등분산성을 만족하는지 확인해 보아야 한다
 
 
var.test(mtcars[mtcars$am==1,1 ], mtcars[mtcars$am==0, 1])
 
F test to compare two variances
 
data:  mtcars[mtcars$am == 1, 1] and mtcars[mtcars$am == 0, 1]
F = 2.5869, num df = 12, denom df = 18, p-value = 0.06691
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.934280 8.040391
sample estimates:
ratio of variances 
          2.586911
 
- p-value가 0.06691로 0.05보다 크므로 등분산성을 만족한다. 
  즉, 분산이 같다. 
 
 
※ R에서 독립표본 t-test를 하는 두가지 방법
 
1) 하나는 분석을 원하는 두 집단의 평균을 각각 별개의 벡터 객체로 만들어 입력하는 방법
 
  유형 1 문법: t.test(group 1의 관측치, group2의 관측치, t-test 유형, 신뢰범위)
 
2) 다른 방법은 하나의 데이터 프레임에서 집단을 구분하고자 하는 기준을 입력하는 방법
 
  유형 2 문법: t.test(관측치~집단 구분 기준, 데이터프레임, t-test 유형, 신뢰범위)
 
 
- 독립표본 t-test의 경우 t-test 유형을 var.equal을 TRUE로 지정하면 된다. 
 
- 신뢰범위는 default로 0.95로 지정되어 있으므로 별도로 지정할 필요는 없다.
 
- paired = FALSE로 지정하여 동일한 집단의 전,후 차이를 비교하는게 아닌것을 나타낸다.
 
 

t.test(mtcars[mtcars$am==0,1 ], mtcars[mtcars$am==1, 1],  paired = FALSE, var.equal = TRUE, conf.level = 0.95)
 
Two Sample t-test
 
data:  mtcars[mtcars$am == 0, 1] and mtcars[mtcars$am == 1, 1]
t = -4.1061, df = 30, p-value = 0.000285
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -10.84837  -3.64151
sample estimates:
mean of x mean of y 
 17.14737  24.39231
 
---------------------------------------------------------------------
 
t.test(mpg ~ am, data=mtcars, var.equal=TRUE, conf.level = 0.95) 
 
Two Sample t-test
 
data:  mpg by am
t = -4.1061, df = 30, p-value = 0.000285
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -10.84837  -3.64151
sample estimates:
mean in group 0 mean in group 1 
       17.14737        24.39231
 
- 위의 예제는 유형 1, 유형2의 문법을 사용한 t-test 이다.
 
- 결과를 해석해 보면, 우선 가장 아래쪽 집단 별 mpg의평균을 보면 오토는 17.14, 수동은 24.39로 차이가 난다.
 
- 이러한 차이가 유의한지를 판단하기 위해서는 p-value를 확인하면 된다.
 
- p-value를 확인해 보면 0.001374로 오토와 수동 자동차의 mpg차이는 유의하다고 할수 있다.
 
 
 
(4) 대응표본 t-test  (Paired sample t-test)
 
- 대응표본 t-test는 동일한 집단의 전-후 차이를 비교하기 위해 사용된다.
 
- 예를 들어 초콜렛을 하루 30g씩 섭취하는 것이 수면 시간에 영향을 미치는지 여부나, 
 
- 과외를 받는 것이 학교 성적에 영향을 미치는지 등등 특정 변인의 영향을 측정하기 위해 주로 사용된다.
 
- 주의할 점은 대응 표본은 실험 전-후를 비교하는 것이기 때문에 입력하는 관측치의 수가 반드시 같아야 한다.
 
- 중간고사 이후 과외를 받은 10명의 학생의 중간고사 와 기말고사 점수 데이터를 가상으로 만들어서 비교해 보자.
 
 
mid = c(16, 20, 21, 22, 23, 22, 27, 25, 27, 28)
final = c(19, 22, 24, 24, 25, 25, 26, 26, 28, 32)
t.test(mid,final, paired=TRUE)
 
Paired t-test
 
data:  mid and final
t = -4.4721, df = 9, p-value = 0.00155
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -3.0116674 -0.9883326
sample estimates:
mean of the differences 
                     -2
 
- p-value가 0.00155로 과외를 받은 전과 이후의 평균 성적 차이가 난다고 말할 수 있다.



2. t-test 예제 


1) t 검정(모평균 검정)
- 표본을 이용하여 모집단의 평균이 어떠한 값을 가지고 있는 지를 알고 싶다면 t.test 함수를 사용한다.
- 표본조사(샘플조사)를 위한 전체를 모집단이라 하며 모집단으로 부터 무작위 추출된 일부를 표본이라 한다.
- 모집단의 데이터에 대한 평균값을 모평균이라 한다.

- 평균 95, 표준편차가 10 인 모집단에서 표본 추출을 했을경우 평균이 90일 수 있는지 알아본다.


#난수 발생
> rnorm(40, mean=95, sd=10)
 [1]  88.32062 106.19048  93.27057  91.25028  91.37276 103.79702
 [7]  79.98763  80.09891 100.27435 107.51704 115.82473 103.25769
[13] 103.31443 106.22659  87.94741  93.28915  96.34301  94.45932
[19] 110.05172 107.27138 109.79298 107.06312 106.08354  80.00617
[25] 101.09900  76.78848  95.77820  99.78241  87.59807 109.44478
[31]  98.23854  91.43916 100.52137  99.49175 107.30741 104.65155
[37] 110.61685  91.83888  85.82679 110.57222
x <- rnorm(40, mean=95, sd=10)
#표본 x값으로 모평균 90이다라는 가설(귀무가설-영가설)
t.test(x, mu=90) 
 
One Sample t-test
 
data:  x
t = 3.9312, df = 39, p-value = 0.0003362
alternative hypothesis: true mean is not equal to 90(대립가설)
95 percent confidence interval:
  93.39973 100.60601
sample estimates:
mean of x 
 97.00287 

- p-value값이 0.05 보다 작기 때문에 
모평균 90이다라는 귀무가설은 기각된다.
  0.05 이상이면
 귀무가설은 채택된다.
 

2) t 검정 - 두집단 평균 비교
 - t검정은 두 집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 통계 분석 기법이다.
 - R에 내장된 t.test()를 이용해 t 검정을 할 수 있다.
 - ggplot2패키지의 mpg데이터를 이용해 t검정을 수행한다. 소형차와 suv가 도시 연비에서 통계적으로 유의한 차이가 있는지 알아본다.
 - mpg데이터에서  class, cty변수만 남긴 뒤 class변수가 "compact"인 자동차와 "suv"인 자동차를 추출한다.


install.packages("scales")
mpg <- as.data.frame(ggplot2::mpg)
 
library(dplyr)

> mpg_diff <- mpg %>% 
+   select(class, cty) %>% 
+   filter(class %in% c("compact", "suv"))
 
> head(mpg_diff)
    class cty
1 compact  18
2 compact  21
3 compact  20
4 compact  21
5 compact  16
6 compact  18
 
> table(mpg_diff$class)
 
compact     suv 
     47      62 

- t.test()를 이용해 t검정을 수행한다. 추출된 데이터를 지정하고 ~기호를 이용해 비교할 값인 cty(도시연비)와 비교할 집단인
  class(자동차종류)지정한다.
- t검정은 비교하는 집단의 분산이 같은지 여부에 따라 적용하는 공식이 다르다.
  여기선 집단 간 분산이 같다고 가정한다.var.equal=T지정한다.


> t.test(data = mpg_diff, cty ~ class, var.equal = T)
 
Two Sample t-test
 
data:  cty by class
t = 11.917, df = 107, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 5.525180 7.730139
sample estimates:
mean in group compact     mean in group suv 
             20.12766              13.50000 
 

 
- t검정이 결과는 유의 확률을 의미하는 p-value값이 0.05미만이면 집단간의 차이가 통계적으로 유의하다로 해석한다.
- 유의확률은 일반적으로 5%를 판단기준으로 삼는다. 5%보다 작다면 이 차이는 우연이라고 보기 어렵다고 결론 내린다.
p-value < 2.2e-16  은 유의확률이 2.2 * 10의 -16승 보다 작다는 의미다.
p-value가 0.05보다 작기 때문에 위의 분석결과는 compact와 suv간 평균도시 연비 차이가 난다로 해석한다.
- 두 차종류의 연비 평균값에서 suv보다 compact의 도시 연비가 더 높다는 것을 알 수 있다.


- 일반 휘발유와 고급 휘발유의 도시 연비 t검정
일반 휘발유와 고급 휘발유의 도시 연비가 차이가 나는지 알아본다.
- 두 연료를 사용하는 자동차를 추출한 후 t 검정을 실시한다.


> mpg_diff2 <- mpg %>% 
+   select(fl, cty) %>% 
+   filter(fl %in% c("r", "p"))  # r:regular, p:premium
 
> table(mpg_diff2$fl)
 
  p   r 
 52 168 
 
> t.test(data = mpg_diff2, cty ~ fl, var.equal = T)
 
Two Sample t-test
 
data:  cty by fl
t = 1.0662, df = 218, p-value = 0.2875
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.5322946  1.7868733
sample estimates:
mean in group p mean in group r 
       17.36538        16.73810 
 
 
- 분석결과를 보면 p-value값이 0.05보다  0.2875이다. 실제로 차이가 없는데 우연에 의해 이런 차이가 관찰될
  확률이 28.75% 라는 의미이다.
- 일반휘발유와 고급 휘발유를 사용하는 자동차 간 도시 연비 차이가 통계적으로 유의하지 않다고 결론을 내릴수 있다.
- 출력결과의 두 자동차의 평균에서 보면 고급 휘발유 자동차 연비 평균이 0.6 정도 높지만 이런 정도이 차이는 우연히 
  발생했을 가능성이 크다고 해석한다.





 
 


3.영업사원 교육 효과 분석

- 두집단의 평균이 서로 같은지 다른지를 검증하는 것을 두 집단 평균차이 분석이라고 한다 (two sample t-test) 

- 또한 두 그룹 간의 평균을 기준으로 차이에 의미를 부여하는 방법이다.

- 두집단의 특정변수가 수치 데이터로 이루어진 경우 평균값을 분석할 수 있으며, 이 평균값이 두 집단 간에 
  동일한지/다른지를 비교하는 분석이라고 할 수 있다.

문제 : 영업사원들의 실적을 향상시키기 위해 어떠한 교육이 더 좋을까?

예제데이터 : 2가지 교육방법별로 교육을 이수한 영업사원들의 영업실적을 조사한 데이터
                (mymethod.csv)
변수명: id,method:영업역량강화 교육방법(1:집체교육, 2:멘토링교육),
          performance:영업직원들의 영업실적(단위: 억 원)
          (단, 입사 6개월 이내 인력은 교육을 받았어도 영업실적조사에서 제외함-> 99로 표시)

분석문제:
1) 교육방법별로 교육을 이수한 사람들의 빈도수와 영업실적 평균값을 구하시오
2) 실제 영업실적 비교대상자만의 데이터를 별도로 추출하시오
3) 두 교육방법별 영업실적 데이터 간에 분포모양이 비숫한지를 검증하시오
4) 두 집단 간의 영업실적에 차이가 있는지를 검증하시오


(1) 실습데이터 읽기


 mymethod <- read.csv("./data/mymethod.csv",header = T)

> mymethod$method
 [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2
[37] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 
> mymethod$performance
 [1] 27  5 21 99 14 23 20  9 28 15 29 99  9  5 19 13 10 29  5 28  6 20 17  9
[25] 19 45 21 37 26 26 24 37 34 44 39 20 99 15 41 38 21 26 26 22 99 31 34 27
[49] 21 32 35 35 29 43 18 15 99 30 23 32 99 28 29



(2) 교육방법에 따른 영업실적을 구분한다.

groupA <- subset(mymethod,method==1 & performance<90)
mode(groupA)
groupB <- subset(mymethod,method==2 & performance<90)
 


 (groupAcount <- length(groupA$method))
 (groupAmean <- round(mean(groupA$performance),2))
 
> groupAcount;groupAmean
[1] 22
[1] 16.41


 (groupBcount <- length(groupB$method))
 (groupBmean <- round(mean(groupB$performance),2))
 
> groupBcount;groupBmean
[1] 35
[1] 29.23
 

 
(3) 집체교육과 멘토링 교육을 받은 집단 간의 빈도와 평균실적을 정리하여 교차분석표를 출력한다.
         

 groupcount <- c(groupAcount,groupBcount)
 groupmean <- c(groupAmean,groupBmean)
 
> groupcount;groupmean
[1] 22 35
[1] 16.41 29.23
 
grouptable <- data.frame(Freq=groupcount,Mean=groupmean)
> grouptable
  Freq  Mean
1   22 16.41
2   35 29.23

(4) 
분석대상 두 집단의 등분산성을 검정후 두 집단의 평균차이를 분석한다.

- 등분산성 이면 t-test를 적용하고 아니면 wilcox.test분석을 한다.

- 정규성 가정을 충족하지 못하는 경우, 혹은 분포형태를 모르는 경우, 두 모집단의 중심 차이에 대한
  비모수 검정인 wilcox.test를 한다.

※ 비모수란 ?
통계학에서 모수에 대한 가정을 전제로 하지 않고 모집단의 형태에 관계없이 주어진 데이터에서 직접 확률을 계산하여 통계학적 검정을 하는 분석법이다. 비모수적(Non-parametric), 비모수검정법 혹은 분포무관(Distribution-free)검정법이라고도 한다.





#분석대상 두집단의 등분산성을 검정한다.
> var.test(groupA$performance, groupB$performance)
 
F test to compare two variances
 
data:  groupA$performance and groupB$performance
F = 1.0648, num df = 21, denom df = 34, p-value = 0.8494
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.502791 2.427170
sample estimates:
ratio of variances 
           1.06479 

- p-value가 0.05보다 크므로 귀무가설(분산이 같지않다) 기각하고, 대립가설을 채택한다.

- 즉, 분석대상 두집단이 등분산성을 만족하므로  t-test를 적용해 모집단의 평균값을 검정한다.


- 귀무가설: 두집단 평균의 차이는 0이다.(두집단 평균차이가 나지 않는다.)

- 대립가설: 두집단 평균의 차이는 0이 아니다.(두집단 평균의 차이가 난다.)



> t.test(groupA$performance,groupB$performance,var.equal = T )
 
Two Sample t-test
 
data:  groupA$performance and groupB$performance
t = -5.6466, df = 55,
p-value = 5.946e-07
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -17.369242  -8.269719
sample estimates:
mean of x mean of y 
 16.40909  29.22857 
 

- 두 집단 평균의 차이가 보이며, 그차이가 유의한지는 p-value값으로 확인하다.

- p-value값이 0.05보다 작으므로 귀무가설 기각하고 대립가설 채택한다.

- 즉 두집단 평균의 차이가 있다.(양측검정)
 



> t.test(groupA$performance,groupB$performance, alternative = "greater",var.equal = T)
 
Two Sample t-test
 
data:  groupA$performance and groupB$performance
t = -5.6466, df = 55,
p-value = 1
alternative hypothesis: true difference in means is greater than 0
95 percent confidence interval:
 -16.61775       Inf
sample estimates:
mean of x mean of y 
 16.40909  29.22857 
 
- p-value가 0.05보다 크므로, 두집단 평균의 차이가 있다는 대립가설은 기각된다. 
 
 



3. 다이어트 식품 효과 분석

- 짝을 이루는 두 집단의 평균이 서로 같은지 다른지 검정하는 것을 대응 두집단 평균차이 

  분석이라 한다.
- 또한 짝지어진 변수값 차이의 평균이 특정한 값과 같은지를 검정한다.
- 짝을 이룬다/대응을 이룬다 는 표현은 독립적인 두 집단이 아니라 실제는 하나의 집단에서 
  두번 측정이 이루어진 것을 의미한다.
- 한 집단을 대상으로 사전-사후 효과 비교 시 많이 사용되고 있는 방법이다
 
문제: 연구개발 중인 다이어트 식품의 효과는 있는 것일까?
 
예제데이터:새로운 다이어트 효능 식품을 복용한 시험참가자의 몸무게 변화를 조사한 데이터
           (myeffect.csv)
 
변수명:id,before(다이어트 효능식품 복용 전 몸무게),after(다이어트 효능식품 복용 후 몸무게,
       단, 한 달 동안의 몸무게 평균 수치이며, 중도포기자는 조사에서 제외함->999로 표시)
 
분석문제:
  1) 복용전과 복용후의 시험 참가자의 빈도수와 몸무게 평균값을 구하시오
  2) 실제 한달 간의 시험기간을 완수한 시험참가자들 만의 데이터를 별로 추출하시오
  3) 2개의 몸무게 집단 데이터간의 분포모양이 비숫한지를 검정하시오
  4) 복용전과 복용후에 효과차이가 있는지를 검정하시오
 
(1) 실습데이터 가져오기 및 내용확인

myeffect <- read.csv("./data/myeffect.csv",header =T)              
myeffect
myeffect$before
myeffect$after
 
(2) 다이어트 효능식품 복용전,후의 이상치 데이터 제거후 각각 새로운변수에 저장한다.

#before와 after의 이상치 값을 제거한후 다른변수에 저장
myeffect2 <- subset(myeffect,after<999)
myeffect3 <- subset(myeffect,after!=999)
myeffect4 <- subset(myeffect,after<999, c(before,after))
myeffect5 <- subset(myeffect,after!=999, c(before,after))
myeffect5
 
(3) before, after 각각의 데이터의 빈도수 및 평균값을 구한다.
#참가자의 빈도수와 before, after의 평균값을 구한다.
groupBE <- myeffect5$before
groupAF <- myeffect5$after

> length(groupBE)
[1] 249
> length(groupAF)
[1] 249
> mean(groupBE)
[1] 65.61968
> mean(groupAF)
[1] 57.94016
 
(4) 한쌍의 두 집단 평균의 등분산성 검정후 한쌍의 두집단의 평균의 차이를 분석한다.

> var.test(groupBE,groupAF, paired = T)
 
F test to compare two variances
 
data:  groupBE and groupAF
F = 0.70567, num df = 248, denom df = 248, p-value =
0.006234
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.5498608 0.9056408
sample estimates:
ratio of variances 
         0.7056744 

- p-value가 0.05보다 작으므로 두 집단의 평균이 등분산성 검정을 만족하지 못한다.

- wilcox.test()함수로 두집단의 평균 차이 분석을 한다.

- 귀무가설 : 한쌍의 두집단 평균의 차이는 없다.
- 대립가설 : 한쌍의 두 집단 평균의 차이는 있다. 
 

> wilcox.test(groupBE,groupAF, paired = T)
 
Wilcoxon signed rank test with continuity correction
 
data:  groupBE and groupAF
V = 24541, p-value = 2.983e-15
alternative hypothesis: true location shift is not equal to 0

- p-value가 0.05보다 작으므로 귀무가설 기각되고 대립가설 채택된다.

- 즉, 다이어트 효능식품 복용 전후의 몸무게 평균의 차이는 있는것으로 확인된다. 


1. 책상 납품을 위한 학생 신장 분석
 
-한집단의 평균이 어떤 특정한 값과 같은지를 검정하는 것을 단일집단 평균분석(One sample t-test)라 한다.
 또한 한 변수의 평균이 특정한 값과 같은지를 알아보기 위한 방법으로 가장 간단하게 사용할 수 있다.
-한 집단의 특정변수가 수치 데이터로 이루어진 경우 평균값을 분석할 수 있이며, 이 평균값이 사전에 조사된
 특정 평균값과 동일한지 다른지를 비교하는 분석이라고 할 수 있다.
-단일집단평균분석은 통상 t-검정(t-test)에 의해 이루어진다.
 
문제: 전국학교에 책상납품을 위한 조달경쟁에 이기는 방법은?
데이터: 책상제조회사에서 중학생 표본을 대상으로 조사한 신장 데이터
        .일반적으로 중학생들의 평균신장은 145센티미터 정도로 알려져 있음
.교육부에서 발주한 전국 중학교에서 사용할 책상물품 조달입찰 시 사용할 근거데이터 확보를 위해 분석을 수행함
변수명: id, height(신장데이터)
분석문제: 
1) 표본중학생들의 평균신장 수치를 구하시오
2) 데이터 분포가 정규분포를 이루고 있는지를 검정하시오
3) 식생활습관 및 체질개선에 따라 신장이 기존에 알려진 수치보다 커졌는지를 검정하시오
 
(1) 실습데이터 읽어오기 및 패키지 설치
 
myheight <- read.csv("./data/myheight.csv",header = T)
head(myheight)
#빈도및 비율의 기술통계량 분석을 한번에 해주는 기능을 위한 패키지 설치
install.packages("Hmisc")
library(Hmisc)
 
install.packages("prettyR")
library(prettyR)

 
(2) 내용확인 및 신장평균및 범위값을 구한다.
 
myheight$height
 
mean(myheight$height)
range(myheight$height)
 
#신장값만 추출한다.
myheight5 <- subset(myheight, height != 999, c(height))
myheight5
 
 
(3)기술통계량 분석내용 출력및 t-검정 실행
 
#기술통계량 분석내용 출력
describe(myheight)
describe(myheight$height)
 
#분석집단의 데이터분포가 정규분포를 이루고 있는지 확인한다.
#p값이 커야 정규분포를 이루고 있다.
#p-value가 0.05보다 작으므로 정규모집단에서 추출되지 않았다.
 
> shapiro.test(myheight$height)
 
Shapiro-Wilk normality test
 
data:  myheight$height
W = 0.90777, p-value = 0.01308
 
 
 
-귀무가설: 중학생들의 평균신장은 145센티미터 이다
-대립가설: 중학생들의 평균신장은 145센티미터가 아니다.
-아래의 t-test 검정결과는 p-value값이 0.05보다 작으므로 
 귀무가설은 기각되고 대립가설이 채택된다.
 
#t-test를 적용해 모집단의 평균값을 검정한다.
> t.test(myheight$height,mu=145.0)
 
One Sample t-test
 
data:  myheight$height
t = 5.3862, df = 29, p-value = 8.674e-06
alternative hypothesis: true mean is not equal to 145
95 percent confidence interval:
 147.9567 151.5766
sample estimates:
mean of x 
 149.7667 
 
 
-대립가설변경:중학생들의 평균신장은 145센티미터 보다 크다
-아래의결과도 대립가설이 채택된다.
-즉,중학생의 평균신장은 식생활 습관 및 체질 개선등의 따라 기존에 알려진 수치보다
 유의미한 수준으로 커졌다고 할 수 있다.
 
> t.test(myheight$height,mu=145.0,alternative = "greater")
 
One Sample t-test
 
data:  myheight$height
t = 5.3862, df = 29, p-value = 4.337e-06
alternative hypothesis: true mean is greater than 145
95 percent confidence interval:
 148.263     Inf
sample estimates:
mean of x 
 149.7667 
 
 
#--------------------------------------------------------
2. 광고 모델 반응 분석
 
-두 집단의 비율이 서로 같은지 다른지를 검정하는 것을 두집단 비율차이 분석이라 한다.
-두 집단이 둘 중에 하나를 선택하는 항목으로 구성된 경우와 각 집단에서 선택한 비율이
 서로 동일한지/다른지를 비교하는 분석이라고 할 수 있다.
 
문제: 어떤한 모델을 활용해 광고를 내보내야 반응이 좋을까?
데이터:2가지 광고 대안별로 독립적인 모니터링 그룹에서 해당 광고에 대한 관심 유무를 
       조사한 것이다.(mycf.csv)
변수명: group - 모니터링을 한 집단 유형(1:연예인 CF, 2:일반인 CF)
        interest - 해당 광고에 대한 관심 유무(0:관심없다 ,1:관심있다. )
 
 
mycf <- read.csv("./data/mycf.csv",header=T)
mycf
mycf$group
mycf$interest
 
#각항목이 빈도수및 두항목 교차빈도수 생성
table(mycf$group)
table(mycf$interest)
> table(mycf$group,mycf$interest)
   
     0  1
  1 13 37
  2 27 23
 
#각항목의 비율및 두항목 교차비율 생성
> prop.table(table(mycf$group,mycf$interest))
   
       0    1
  1 0.13 0.37
  2 0.27 0.23
> round(prop.table(table(mycf$group,mycf$interest))*100,1)
   
     0  1
  1 13 37
  2 27 23
 
 
(2) 두집단의 비율값이 동일한지 차이가 나는지를 분석하기 위하여 두집단 비율차이 검정을 실시한다.
 
- 귀무가설: 두집단의 비율값은 동일하다.
- 대립가설: 두집단의 비율값은 동일하지 않다.
- 아래 결과는 p-value값이 0.05보다 작다 그러므로 귀무가설 기각이며
  대립가설 채택이다.
 
> prop.test(c(37,23),c(50,50))
 
2-sample test for equality of proportions with continuity
correction
 
data:  c(37, 23) out of c(50, 50)
X-squared = 7.0417, df = 1, p-value = 0.007963
alternative hypothesis: two.sided
95 percent confidence interval:
 0.07597201 0.48402799
sample estimates:
prop 1 prop 2 
  0.74   0.46 
 
- 대립가설 변경 : 일반인 cf집단보다 연예인 cf집단의 비율이 더 크다.
- 아래의결과는 p-value값이 0.05보다 작으므로 대립가설 채택이다.
- 즉,일반인 cf집단보다 연예인 cf집단에 대한 관심도 유의적으로 크다고 할 수 있다.
> prop.test(c(37,23),c(50,50),alternative = "greater")
 
2-sample test for equality of proportions with continuity
correction
 
data:  c(37, 23) out of c(50, 50)
X-squared = 7.0417, df = 1, p-value = 0.003982
alternative hypothesis: greater
95 percent confidence interval:
 0.1055588 1.0000000
sample estimates:
prop 1 prop 2 
  0.74   0.46 


1.텍스트 마이닝(Text Mining)
- tm패키지를 사용하여 텍스트를 분석한다.
- tm의 
Corpus는 데이터의 정제, 통합, 선택, 변환 과정을 거친 구조화된 단계로서 더 이상 추가적인
  절차 없이 데이터 마이닝 알고리즘 실험에서 활용할 수 있는 상태이다.
- 텍스트 마이닝 패키지인 tm에서 문서를 관리하는 기본구조를 
Corpus라 부르며, 이는 텍스트 문서들의 
  집합을 의미한다.

(1) 데이터 준비 및 패키지 설치
- 실습에 사용할 데이터는 kor.txt이며 코리아 헤럴드의 경제 부분 기사를 텍스트형식으로 만든 데이터이다.
- 텍스트 파일은 영어로 구성되어 있으며, 우리나라 경제상황에 대한 내용을 담고 있다.

# Install

install.packages("tm")  # for text mining
install.packages("SnowballC") # for text stemming(어근추출)
install.packages("wordcloud") # word-cloud generator 
install.packages("RColorBrewer") # color palettes
# Load
library("tm")
library("SnowballC") #stemDocument어근추출위해
library("wordcloud")
library("RColorBrewer")
text <- readLines("./data/kor.txt")
 
 


(2) 데이터 정제 
- Corpus는  tm패키지에서 문서를 관리하는 기본구조이다.
- 데이터 정제는 텍스트 마이닝 중에서 반드시 필요한 부분이다.
- 텍스트 파일 안에 문장의 공백,숫자,구두점, 특수기호, 대소문자 구별 등 여러 요인들을 제거해야
  비로서 필요한 명사(단어)들로 추릴 수 있다.
- 정제할때 tm의 tm_map()함수가 많이 쓰인다.
- 어근추출을 위해 SnowballC 패키지 설치 
- 어근이란 단어를 분석할 때 실질적 의미를 나타내는 중심이 되는 부문이다.
  덮개의 덮_, 어른 스럽다의 어른

-
 Document-term matrix 란 문서번호와 단어 간의 사용여부 또는 빈도수를 만드는 작업이다.
  해당 문서의 해당 용어의 출현빈도를 카운팅해서 알려준다.


docs <- Corpus(VectorSource(text))

 
#공백제거
docs <- tm_map(docs, stripWhitespace)
 
# Convert the text to lower case(소문자변경-사전에 있는 내용과 비교하기 위해)
docs <- tm_map(docs, tolower)
# Remove numbers(숫자제거)
docs <- tm_map(docs, removeNumbers)
# Remove english common stopwords(뛰어쓰기와 시제 제거 )
docs <- tm_map(docs, removeWords, stopwords("english"))
 
# Remove punctuations(구두점제거)
docs <- tm_map(docs, removePunctuation)
 
# Text stemming(어근만 추출한다) SnowballC패키지 설치
# docs <- tm_map(docs, stemDocument)


#term document matrix를 만든다.
dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)

#
term document matrix의 결과를  합해서 내림차순으로 정렬
v <- sort(rowSums(m),decreasing=TRUE) 
d <- data.frame(word = names(v),freq=v)
head(d, 10)


(3) 워드 클라우드로 시각화 
 
wordcloud(words = d$word,
              freq = d$freq,
              min.freq = 1,
              max.words=200,
              random.order=FALSE,
              rot.per=0.35, 
              colors=brewer.pal(8, "Dark2"))








2.워드클라우드(Word Cloud)  
- 단어를 구름모양으로 나열하여 시각화하는 packages이다.
- 본절에서 사용되는 패키지는 wordcloud, KoNLP, RColorBrewer가 사용되었으며 Text mining하는데 유용한 패키지 이다.
- 데이터로는 검색엔진을 통해서 빅데이터 주제로 검색한 결과를 SNS의 댓글들을 모아 txt파일로 저장하였다.



(1) 패키지 설치 및 데이터 읽어오기

install.packages("rJava")
install.packages("memoise")
install.packages("KoNLP")
install.packages("wordcloud")
install.packages("stringr")
 
# 패키지 로드
library(KoNLP)
library(dplyr)
library(wordcloud)
library(stringr)
library(RColorBrewer)
 
useNIADic()
 
txt <- file("./data/bigdata.txt",encoding="utf-8")
text <- readLines(txt)
close(txt)

 

(2)데이터 정제하기
 
text <- str_replace_all(text, "\\W", " ")
 
nouns <- extractNoun(text)
wordcount <- table(unlist(nouns))
 
# 데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)
 
# 변수명 수정
df_word <- rename(df_word,
                  word = Var1,
                  freq = Freq)
 
# 세 글자 이상 단어 추출
df_word <- filter(df_word, nchar(word) >= 3)
 
top_20 <- df_word %>%
  arrange(desc(freq)) %>%
  head(20)
 
> top_20
           word freq
1        데이터   55
2      빅데이터   27
3      software   18
4           SAS    9
5      스트리밍    5
6      프로세싱    5
7         GAUSS    4
8        MATLAB    4
9        다루기    4
10 애플리케이션    4
11     우리나라    4
12       있습니    4
13          140    3
14      general    3
15     개발환경    3
16     네트워크    3
17 데이터베이스    3
18       바이트    3
19       시스템    3
20     알고리듬    3

(3)글자 생성 지정후 cloud그리기
- min.freq=1 의미
  단어의 빈도수를 나타내는 것으로서 "한번이상 쓰인 단어들을 그림에 나타낸다" 라는 의미이다.
  숫자의 값이 증가할 수록 그림으로 표현되는 단어의 수는 적어짐을 알 수 있다.

 
pal <- brewer.pal(9,"Set1")  # Set1 색상 목록에서 9개 색상 추출
 
wordcloud(words = df_word$word,  # 단어
          freq = df_word$freq,   # 빈도
          min.freq = 1,          # 최소 단어 빈도
          max.words = 200,       # 표현 단어 수
          random.order = F,      # 고빈도 단어 중앙 배치
          rot.per = .1,          # 회전 단어 비율
          scale = c(4, 0.3),     # 단어 크기 범위
          colors = pal)          # 색깔 목록
 


- min.freq = 1, min.freq = 2,min.freq = 4,min.freq =5 로 변경해서 그린 그림이다.

1. 신차 색상 고객 선호도 분석
- 관찰되는 값이 기대되는 값과 일치 하는지를 조사하는 것을 적합도 검정이라 한다.
- 선택항목이 여러개 있을때 동일하게 선택될 것인가, 아니면 다르게 선택될 것인가를 기대하는
  비중이 있다.
- 또한 해당 선택 항목들에 대한 실제 조사관찰치의 선택 비중이 기대한 비중과 일치하는 여부를 
  판단하는 것이라고 할 수 있다.
- 카이제곱 검정기법으로 이행한다.

새롭게 출시하는 신차 색상중 고객이 선호하는 색상은 무엇인가?

귀무가설: 새롭게 출시하는 신차 색상에 대한 고객 선호도 조사 결과는 유의미한 차이가 없다.
대립가설: 새롭게 출시하는 신차 색상에 대한 고객 선호도 조사 결과는 유의미한 차이가 있다.


(1) 실습데이터 준비 및 패키지 설치

- 예제데이터는  A자동차메이커에서 신차 출시전에 우수고객 초청 행사에서 색상 선호도를 조사함
  (mycar.csv)
- 변수명  id : ID번호,  color : 선호색(1:검정색, 2:흰색, 3:쥐색, 4:연청색, 5:연녹색)
-  1) 색상유형별로 빈도수와 비율에 대한 기술통계량 값을 별도로 구한다.
   2) 색상유형별 빈도수의 비율값을 테이블 값으로 동시에 표현하시오
   3) 빈도와 비율의 기술 통계량 분석을 한번에 해주는 기능을 가진 페키지를 이용하여 색상유형에 
      따른 빈도수와 비율의 값을 구하시오
   4) 실제 5가지 색상 유형에 따른 선호도의 차이가 있는지를 검증하시오.


(2) 실습데이터 읽기 및 검증하기


mycar <- read.csv("./data/mycar.csv",header=T)
 
#빈도와 비율의 기술통계량 분석을 한번에 해주는 기능을 가진 패키지 설치
install.packages("Hmisc")
library(Hmisc)
 
#데이터 테이블의 빈도 분석 중심의 기술 통계량 분석을 한번에 해주는 기능함수를 가진
#prettyR 패키지 설치
install.packages("prettyR")
library(prettyR)
 
> table(mycar$color)
 
 1  2  3  4  5 
88 65 52 40 55 
 
> table(mycar[2])
 
 1  2  3  4  5 
88 65 52 40 55 
View(mycar)
 
 
#빈도수를 이용하여 항목별 비율을 출력해준다.
prop.table(table(mycar$color))
 
#백분율을 나타내기 위해 100을 곱한다.
prop.table(table(mycar$color))*100
 
#round함수를 이용해 소수점 첫째자리까지 출력한다.
round(prop.table(table(mycar$color))*100,1)
 
#mycar$color의 항목별 빈도수 및 항목별 백분율 값을 별도의변수에 저장한다
surveyFreq <- c(table(mycar$color))
surveyProp <- c(round(prop.table(table(mycar$color))*100,1))
 
#두변수의 값을 하나의 데이터프레임값으로 저장한다.
surveyTable <- data.frame(Freq=surveyFreq,Prop=surveyProp)
 
>surveyTable
  Freq Prop
1   88 29.3
2   65 21.7
3   52 17.3
4   40 13.3
5   55 18.3
 
#Hmisc의 세부 기능함수 중에서 describe함수로 mycar테이블에 들어있는 변수 및 데이터에
#대한 현황에 대해 기술하는 기술통계량 분석결과를 보여준다.
> describe(mycar)
Description of mycar 
 
 Numeric 
       mean median     var    sd valid.n
id    150.5  150.5 7525.00 86.75     300
color   2.7    2.0    2.17  1.47     300

>describe(
)
Description of structure(list(x = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,  2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,  2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,  2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,  2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,  3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,  3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,  3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,  3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,  4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,  4L, 4L, 4L, 4... <truncated>
 
 Numeric 
  mean median  var   sd valid.n
x  2.7      2 2.17 1.47     300
 
#color에 대한 항목별 빈도 및 백분율에 대한 빈도 분석 테이블을 출력해준다.
> freq(mycar)
 
Frequencies for id 
        1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48   49   50   51   52   53   54   55   56   57   58   59   60   61   62   63   64   65   66   67   68   69   70   71   72   73   74   75   76   77   78   79   80   81   82   83   84   85   86   87   88   89   90   91   92   93   94   95   96   97   98   99  100  101  102  103  104  105  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144  145  146  147  148  149  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164  165  166  167  168  169  170  171  172  173  174  175  176  177  178  179  180  181  182  183  184  185  186  187  188  189  190  191  192  193  194  195  196  197  198  199 ... <truncated>
        1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 ... <truncated>
%     0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3 ... <truncated>
%!NA  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3  0.3 ... <truncated>
 
 
Frequencies for color 
        1    2    5    3    4   NA
       88   65   55   52   40    0
%    29.3 21.7 18.3 17.3 13.3    0 
%!NA 29.3 21.7 18.3 17.3 13.3 
 
> freq(mycar$color)
 
Frequencies for mycar$color 
        1    2    5    3    4   NA
       88   65   55   52   40    0
%    29.3 21.7 18.3 17.3 13.3    0 
%!NA 29.3 21.7 18.3 17.3 13.3 
 

#여러 개의 선택한목에 대한 실제 선호빈도의 비율 차이를 분석하는 카이제곱 검정을 실시한다.
> chisq.test(surveyFreq)
 
Chi-squared test for given probabilities
 
data:  surveyFreq
X-squared = 21.633, df = 4, p-value = 0.0002371


- 검증결과 유의 값(p-value) 이 유의수준(0.05)보다 낮으므로 귀무가설은 기각되고
  대립가설은 채택된다.
- 이상의 통계적 검정결과, 새롭게 출시되는 신차의 색상에 대한 고객의 선호도는
  유의미한 차이를 보이고 있다고 할 수 있다.




2. 홍보이벤트 효과 분석
- 한집단의 비율이 어떠한 특정한 값과 같은지를 검증하는 것을 단일집단 분석이라 한다.
- 특정변수가 둘 중에 하나를 선택하는 항목으로 구성된 경우 선택한 비율이 사전에 조사된 
  특정한 비율값과 동일한지 아니면 다른지를 비교하는 분석이라 할 수 있다.
- 단일 집단 분석은 통상 이항 분포 검정으로 이루어진다.
- 이항 분포 검정은 이항변수의 관찰치가 기대도수와 일치하는지 또는 특정값이 나타날 기대확률과
  실제로 나타날 확률이 일치하는지를 검정할 때 이용된다.

  매장 입구에서 실시한 홍보이벤트의 효과는 있는 것일까?
  귀무가설: 홍보이벤트로 진행한 구매비율이 일반매장에서 구매한 비율 10%와 같다.
  대립가설: 
홍보이벤트로 진행한 구매비율이 일반매장에서 구매한 비율 10%와 다르다.

- 예제데이터 : A화학의 치약제품B에 대한 표본고객들의 구매여부에 대한 조사 데이터
  *보통의 매장에서 고객들이 구매하는 비율이 10%선으로 알려져 있음
  
*대형매장 입구에 이벤트 부스를 만들어 입장고객들에게 홍보이벤트를 진행해 구매비율을 높이는
     포로모션을 진행함
- 변수명: id :ID번호, buy:구매여부(1:구매함, 0:구매하지 않음)

- 분석문제
  1) 구매여부에 대한 빈도수의 비율에 대한 기술통계량 값을 별도로 구하시오.
  2) 구매여부에 대한 빈도수와 비율값을 테이블 형태로 동시에 표현하시오
  3) 빈도와 비율의 기술통계량 분석을 한 번에 해주는 기능을 가진 패키지를 이용하여 구매여부에
     따른 빈도수와 비율값을 구하시오.
  4) 실제 구매비율이 일반적으로 알려진 10%보다 향상되었는지 아닌지 검증하시오.

(1) 실습데이터 준비및 패키지 설치

#빈도와 비율의 기술통계량 분석을 한번에 해주는 기능을 가진 패키지 설치
install.packages("Hmisc")
library(Hmisc)
 
#데이터 테이블의 빈도 분석 중심의 기술 통계량 분석을 한번에 해주는 기능함수를 가진
#prettyR 패키지 설치
install.packages("prettyR")
library(prettyR)
 
 

 
(2) 실습데이터 읽기와 검증하기

mytooth <- read.csv("./data/mytooth.csv",header=T)

table(mytooth$buy)
table(mytooth[2])
View(mytooth)
 
#빈도수를 이용하여 항목별 비율을 출력해준다.
prop.table(table(mytooth$buy))
#백분율을 나타내기 위해 100을 곱한다.
prop.table(table(mytooth$buy))*100
 
#round함수를 이용해 소수점 첫째자리까지 출력한다.
round(prop.table(table(mytooth$buy))*100,1)
 
#mycar$color의 항목별 빈도수 및 항목별 백분율 값을 별도의변수에 저장한다
buyFreq <- c(table(mytooth$buy))
buyProp <- c(round(prop.table(table(mytooth$buy))*100,1))
 
#두변수의 값을 하나의 데이터프레임값으로 저장한다.
buyTable <- data.frame(Freq=buyFreq,Prop=buyProp)
buyTable
 
#Hmisc의 세부 기능함수 중에서 describe함수로 mytooth 들어있는 변수 및 데이터에
#대한 현황에 대해 기술하는 기술통계량 분석결과를 보여준다.
describe(mytooth)
describe(mytooth$buy)
 
#buy 대한 항목별 빈도 및 백분율에 대한 빈도 분석 테이블을 출력해준다.
> freq(mytooth)
 
Frequencies for id 
        1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48   49   50   NA
        1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    0
%       2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    0 
%!NA    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2    2 
 
 
Frequencies for buy 
        0    1   NA
       40   10    0
%      80   20    0 
%!NA   80   20 
 
> freq(mytooth$buy)
 
Frequencies for mytooth$buy 
        0    1   NA
       40   10    0
%      80   20    0 
%!NA   80   20 
 

 

#특정항목이 2개 중의 하나일 때 선택비율이 동일한지(특정비율과 같은지)를 검정하는 
#이항분포를검증을 실시한다.
#일반매장 구매비율 10% 정도를 기준으로 검증을 실시한다.

> binom.test(c(40,10),p=0.10)
 
Exact binomial test
 
data:  c(40, 10)
number of successes = 40, number of trials = 50, p-value < 2.2e-16
alternative hypothesis: true probability of success is not equal to 0.1
95 percent confidence interval:
 0.6628169 0.8996978
sample estimates:
probability of success 
                   0.8 
 
> binom.test(c(40,10),p=0.10, alternative = "two.sided",conf.level = 0.95)
 
Exact binomial test
 
data:  c(40, 10)
number of successes = 40, number of trials = 50, p-value < 2.2e-16
alternative hypothesis: true probability of success is not equal to 0.1
95 percent confidence interval:
 0.6628169 0.8996978
sample estimates:
probability of success 
                   0.8 
 

 
- 유의확률이 유의수준보다 낮으므로 귀무가설 기각하고 
  대립가설 채택한한다.


- 이벤트 매장에서의 구매비률이 일반 매장에서 구매한 비율보다 15% 크다로 이항분포 검정

> binom.test(c(40,10),p=0.15, alternative = "greater",conf.level = 0.95)
 
Exact binomial test
 
data:  c(40, 10)
number of successes = 40, number of trials = 50, p-value <
2.2e-16
alternative hypothesis: true probability of success is greater than 0.15
95 percent confidence interval:
 0.6844039 1.0000000
sample estimates:
probability of success 
                   0.8 
 

- 일반매장에서 구매비율인 10%보다 높은 것으로 이번 홍보 이벤트의 반응 효과가 더 높다고 할 수있다.

1. 그래프 함수 활용 
(1) 기본적인 그래프 함수
1)고수준 그래프 함수
- 새로운 그래프를 시작한다. 그래픽스 창을 초기 생성 하거나 설정하고, 축적을 설정한다.
  이후 제목과 라벨 등 장식을 넣을 수 있다.
- 고수준 함수



2)저수준 그래프 함수

- 그래프 작성을 시작할 수 없다. 존재하는 그래프에 점, 선, 텍스트, 장식등을 더한다.
- 저수준 그래프



3) Plot()함수

plot(x,y,main=,sub=,xlab=,type=,axes="",col="", pch="")


- x: x축의 자료
- y: y축의 자료
- main : plot의 전체 제목
- sub : plot의 부 제목
- xlab : x축의 제목,  ylab: y축의 제목
- type : plot형태 결정
- axes : plot의 테두리 관련
- col : plot의 색

4) type의 종류
- p : 점
- l  : 선
- b : 점과 선
- o : 점을 선이 통과
- h : 수직선으로 된 Histogram
- s : 계단형 그래프
- S : 다른 계단형 그래프
- n : 그래프 없음

5) par()함수
- 그림을 조절하거나 그림창의 특성을 지정하기 위해 사용되는 함수이다.
- 선의굵기와 종류, 문자의 크기와 글꼴, 색깔도 지정 가능하고, 그림의 위치 지정도 가능하다.
- 보통 하나의 plot에 여러창으로 나누어 표시할 때 사용한다.

x<- c(2,5,6,5,7,9,11,5,7,9,13,15,17)

y<- c(1,2,3,4,5,6,7,8,9,10,11,12,13)
par(mfrow = c(2,4)) #2행4열의 그래프를 그릴수 있다.
plot(x,y, main="PLOT",sub = "type=p",xlab="x-lab",ylab="y-lab",type="p")
plot(x,y, main="PLOT",sub = "type=l",xlab="x-lab",ylab="y-lab",type="l")
plot(x,y, main="PLOT",sub = "type=b",xlab="x-lab",ylab="y-lab",type="b")
plot(x,y, main="PLOT",sub = "type=o",xlab="x-lab",ylab="y-lab",type="o")
plot(x,y, main="PLOT",sub = "type=h",xlab="x-lab",ylab="y-lab",type="h")
plot(x,y, main="PLOT",sub = "type=s",xlab="x-lab",ylab="y-lab",type="s")
plot(x,y, main="PLOT",sub = "type=S",xlab="x-lab",ylab="y-lab",type="S")
plot(x,y, main="PLOT",sub = "type=n",xlab="x-lab",ylab="y-lab",type="n")






(2) 그래프에 장식하기  

1) points()함수
- 그래프에 점을 그리는 함수

points(x, y, pch = , cex = ) 

- pch="" : ""안에 내용이 바로 출력
- pch=숫자 : 숫자에 해당하는 형태가 출력
- cex=숫자 : 숫자가 클수록 큰 점이 출력



plot(x,y, main="PLOT",sub = "type=n",xlab="x-lab",ylab="y-lab",type="n")

z<-c(3.5,1.5,2.3,3.4,6.6)
points(z,pch=1,cex=1)
points(z,pch=3,cex=1)
points(z,pch=4,cex=1)
points(z,pch=5,cex=1)
points(z,pch=7,cex=1)
points(z,pch=9,cex=1)
points(z,pch=11,cex=1)




2) lines() 함수
- 선을 그리는 함수이다. 

lines(x, lty=,col=,pch=,lwd=)

- lty : 선의 유형
- col : 선의 색상
- lwd : 선의 너비나 두께





plot(x,y, ylim=c(0,20),type="n")

lines(c(2,6),c(20,20),lty=1)
lines(c(2,6),c(19,19),lty=2)
lines(c(2,6),c(18,18),lty=3)
lines(c(2,6),c(17,17),lty=4)
lines(c(2,6),c(16,16),lty=5)
lines(c(2,6),c(15,15),lty=6)

3) text() 함수
- 그래프안에 자신이 원하는 위치에 표시하고 싶은 글자를 입력하는데 사용한다.
- (9,10)지점에 Plotting 글자 넣는다.


plot(x,y, main="PLOT",sub = "type=p",xlab="x-lab",ylab="y-lab",type="p")
text(9,10, "Plotting", col="red")
?text

4) abline() 함수
- 직선을 그리며 그래프의 원점을 통과하는 수직선 및 수평선을 그리는데 사용한다.
- 그래프 생성함수 호출후 abline()를 호출한다.


plot(x,y, main="PLOT",sub = "type=p",xlab="x-lab",ylab="y-lab",type="p")
abline(h=6,v=9,lty=3) #x축 9, y축6

5) legend() 함수
- 그래프안에 범례, 즉 그래프의 내용을 해독할 수 있게 해주는 작은 박스나 라벨을 붙이는데 사용되는 함수이다.
- plot() 호출후 legend()를 호출한다.
- legend 유형
  점유형에 따른 범례 : legent(x,y,labels, pch=c(점유형1,점유형2, .....))

  선유형에 따른 범례 : legent(x,y,labels ,lty=c(선유형1,선유형2, .....))
  선두께에 따른 범례 : legent(x,y,labels, lwd=c(두께1,두께2, .....))
  색상에 따른 범례 : legent(x,y,labels, col=c(색상1,색상2, .....))

plot(x,y,type="n")
legend("center","(x,y)",pch=1,title="center")
legend("top","(x,y)",lty =1,title="top")
legend("left","(x,y)",lwd =10,title="left")
legend("right","(x,y)",col =,title="right")
legend("bottom","(x,y)",lty =1,title="bottom")



6) curve() 함수
- 곡선을 그릴때 사용합니다.
- 평균이 5, 표준편차 1인 정규분포에서 1000의 샘풀을 생성한다.


x<- rnorm(1000,mean=5, sd=1)
hist(x) #빈도로 표시
hist(x, freq=F) #밀도로 표시
 
curve(dnorm(x,mean=5,sd=1), add=T) # 평균5,표준편차1인 정규분포의 밀도함수 곡선을 그린다. add=T겹쳐그릴때 사용


 

2. Plot의 종류 
(1) box plot(상자그림) 
- 데이터의 세트를 빠르고 쉽게 시각적으로 요약해준다.
- 제1사분위수, 제2사분위수(중앙값), 제3사분위수를 나타낸다.
- 박스위아래의 수염은 이상치를 제외한 데이터 범위이다.


x<- c(2,5,6,5,7,9,11,5,7,9,13,15,17)

z<-c(3.5,1.5,2.3,3.4,6.9)
 
 
boxplot(x,z)
 


(2) 파이차트 
- 원형 차트를 사용하면 데이터를 파이의 슬라이스 또는 전체의 일부분으로 시각화 할 수 있다.
- 비율을 나타내기에 더욱 편리한 그래프이다.


z<-c(3.5,1.5,2.3,3.4,6.9)

 
pie(z)
 


(3) 막대그래프
- 간단한 막대그래프이다.
- 집단의 평균이나 합계를 막대그래프로 그릴 수 있다.


z<-c(3.5,1.5,2.3,3.4,6.9)
 
barplot(z)
 


(4) 히스토그램
- 도수분포를 그림으로 나타낸다.
- 보통 가로축이 계급, 세로축이 도수를 뜻하는 데 반대로 그리기도 한다.
- 계급끼리 서로 붙어있어야 한다.
- hist(x, freq=) freq=T:빈도출력(기본값), freq=F:밀도출력


x<- c(2,5,6,5,7,9,11,5,7,9,13,15,17)

 
hist(x)



---------------------------------------------------------------------------------
x<- c(2,5,6,5,7,9,11,5,7,9,13,15,17)

z<-c(3.5,1.5,2.3,3.4,6.9)
 
 
par(mfrow=c(1,4))
 
boxplot(x,z)
 
 
 
pie(z)
 
 
barplot(z)
 
hist(x)

-----------------------------------------------------------------------------------






3. ggplot2  

- ggplot2를 사용해야 하는이유
  ggplot2창시자 : 기본 그래픽 시스템은 그림을 그리기 위해 좋은 툴이지만, ggplot2는 데이터를 이해하는 데
                       좋은 시각화 툴이다.

(1) ggplot2의 시각화 
- ggplot2의 diamonds 데이터로 분포도 그래프 그리기
- 5만 4000여 개의 다이아몬드에 대한 가격을 포함한 10개의 속성정보를 담고 있다.

price(가격),carat(무게),cut(커팅의 가치), colour(다이아몬드 색상),clarity(깨끗함),x(길이),y(너비),z(깊이)
depth(깊이비율),table(가장넓은 부분의 너비 대비 다이아몬드 꼭대기의 너비<-비율로 추정됨)

library(ggplot2)

ggplot(data=diamonds, aes(x=carat,y=price,colour=clarity)) + geom_point()


(2) 회귀곡선 그리기 +goem_smooth()


ggplot(data=diamonds, aes(x=carat,y=price,colour=clarity)) + 
  geom_point() +
  geom_smooth()
 



(3) 회귀곡선 Group 매핑요소

- 전체데이터를 하나의 곡선으로 표시 하고자 할때 

ggplot(data=diamonds, aes(x=carat,y=price)) + geom_smooth()



- 회귀곡석을 각 데이터 그룹별로 나누어 표시하고자 할때 
ggplot(data=diamonds, aes(x=carat,y=price,group=clarity)) + geom_smooth()



(4) bar plot 그리기


 1) 그래프 색 변경

-stat_bin은 연속적인 x 데이터에만 적합합니다.(계급구간지정)

ggplot(data=diamonds, aes(x=price)) + geom_bar()
 

 
ggplot(data=diamonds, aes(x=price)) + stat_bin(geom="bar",fill="gold",col="white")
 
 



2) 누적 히스토그램 그리기

ggplot(data=diamonds, aes(x=clarity,fill=cut)) + geom_bar()



1. 회귀분석 
(1) 선형회귀분석

- 회귀분석은 진화론에 해당하는 키가 큰 아버지의 자식은 점점 커질것인고 키가 작은 아버지의 자식은 점점 작아질 것이라는 가설을
  반박 하기 위해 연구되었다.

- 칼톤은 아들의 키는 아버지의 키에 영향을 받는다 하더라도 결국 평균으로 돌아가려는 현상이 있다는 것을 발견한다.
- 칼톤의 연구에 이어받은 피어슨은 신장자료를 이어받아 다음과 같은 함수식을 구한다.

         Y = 33.73 + 0.516X

   X는 아버지의 키이다.
   70을 X에 대입하면 69.85;         

   72을 X에 대입하면 72.45; 
   65을 X에 대입하면 67.27; 
   60을 X에 대입하면 64.69:의 값이 나온다.  값이 평균에서 크게 벗어나지 않는다. 즉, 평균으로 회귀하려는 모습을 볼 수 있다.

- 위에 내용에서 아버지 키와 아들의 키가 관련성이 있다는것을 알수 있다.

- 회귀분석은 변수간의 관계에 대해서 말하는 것이다. 
- 상관계수는 관계의 긴밀함을 수치로적으로 표현하는 것이며 회귀분석은 한 변수의 변화에 따른 다른 변수의 값을 파악 할 수 있게 한다.

- 아래는 사람들의 월소득과 월지출을 조사했다. 

   월 소득은 100만원인 사람의 월 지출은 50만원이다.
   
월 소득은 200만원인 사람의 월 지출은 100만원이다.
   월 소득은 300만원인 사람의 월 지출은 150만원이다.
     월 소득은 400만원인 사람의 월 지출은 200만원이다.

- 위내용에서 만약 500만원 소득인 사람의 월 지출은 250만원일 것이라 추측할 수 있다.
- 수학 함수식으로 표현하면 y=0.5x 이다. y=0.5x만 알고 있다면 어떤 값을 대입해도 결과를 알 수 있다.
- 위와 같은 식을 회귀모델이라 부르며 x축은 독립변수, y축은 종속변수라 한다.

- 회귀분석은 독립변수가 종속변수에 어떤 영향을 미치는지 알아보는 방법이다.
 

- 그러나 위 예시와 같이 극단적으로 데이터가 정확히 나오는 경우는 거의 없다. 월 소득이 600만원인데 지출이 331만원일 수 있고,
  월 소득이 300만원 인데 월 지출이 175만원일 수 있다.
- 이런 데이터라면 위와 같은 y= 0.5x와 같은 수학 함수식을 만들 수 없다. 그래서 회귀모델은 정확한 함수식이 아닌 모든 데이터를
  가장 만족시킬 만한 최선의 함수식을 만든다.


- y=a + bx는 직관적이고 쉬운데 통계에서 사용하지 않는다. a, b는 통계에서 잘 사용하지 않는 기호 이다.
  그래서 아래와 같이 사용한다.



- 모회귀식은 모집단이며, 표본회귀식은 표본이다. 표본에 의해 회귀모델이 구해지면 회귀모델은 모집단의 특징이 된다.

- 특징이 되었다는 것은 모집단의 데이터가 이 함수식에 의해서 설명되어야 한다 것을 의미한다. 하지만 회귀모델 선 위에
  없는 데이터가 대부분이다. 

- 선위에 없다는 것은 함수식에 의해 설명될 수 없다는 것을 의미 하며, 오차가 생겼다고 할 수 있다. 그 오차는 실험에서
  나와야 할 데이터에서 크게 벗어나지 않는다.



- R이 없었다면 수학적으로 미분을 해서 가장 적합한 함수식을 찾을 수 있지만 R을 이용하면 lm()함수만 실행하면 바로 알 수 있다.

- R에서 회귀모델을 구하는 방법은

 
> lm(mpg~hp, data=mtcars)

 
Call:
lm(formula = mpg ~ hp, data = mtcars)
 
Coefficients:
(Intercept)           hp  
   30.09886     -0.06823  
 


- hp밑의 -0.06823이 b이다.
- Intercept 가
 a이다.
- y= 30.09-0.06x라는 회귀모델식이 만들어진다.






- 위의 그림처럼 회귀모델(파란선)로 부터 데이터가 떨어진 값을 잔차(Residuals)라 한다. 표준편차도 평균으로 부터 떨어진 거리이다.
- 평균처럼 회귀모델도 무게중심으로 역할을 한다. 평균이 모든 값을 끌어안듯이 회귀모델도 모든 데이터를 끌어안아 자신을 나타낸다.
- 회귀모델을 유도 하는 식은 평균이 들어가며, 회귀모델은 평균으로 회귀한다는 의미를 가진다.


(2) R에서 선형회귀모델 실습
1) 안타와 홈런변수를 활용한 회귀분석 예제
- 2015년 프로야구 자료를 가지고 각 팀별 안타횟수에 따른 홈런의 수에 대해 회귀분석
- 자료는 한국 KBO 홈페이지에서 구한 자료이다.
- H-안타, HR-홈런

#데이터 읽기

> df <- read.csv("./data/example_kbo2015.csv")
> str(df)
 
'data.frame': 10 obs. of  26 variables:
 $ ranking: int  1 2 3 4 5 6 7 8 9 10
 $ team   : Factor w/ 10 levels "KIA","kt","LG",..: 9 6 7 4 8 5 10 2 3 1
 $ AVG    : num  0.3 0.3 0.291 0.288 0.277 0.276 0.27 0.27 0.259 0.256
 $ G      : int  102 102 99 101 104 99 102 102 103 100
 $ PA     : int  4091 4151 3950 3994 4082 3888 4037 3988 3984 3835
 $ AB     : int  3553 3620 3410 3485 3557 3373 3404 3498 3491 3362
 $ R      : int  634 658 570 591 545 476 504 466 458 469
 $ H      : int  1066 1085 991 1002 985 931 919 944 905 861
 $ X2B    : int  188 227 176 205 176 146 162 161 171 161
 $ X3B    : int  19 12 16 20 14 9 13 13 16 14
 $ HR     : int  127 155 98 110 130 92 82 87 83 95
 $ TB     : int  1673 1801 1493 1577 1579 1371 1353 1392 1357 1335
 $ RBI    : int  606 622 541 557 515 451 467 443 423 440
 $ SAC    : int  49 40 51 47 50 75 114 62 60 54
 $ SF     : int  44 37 45 36 23 17 27 26 29 23
 $ BB     : int  398 393 378 351 395 360 406 355 347 327
 $ IBB    : int  15 13 17 17 16 12 23 13 17 11
 $ HBP    : int  47 61 66 74 57 63 86 47 57 69
 $ SO     : int  650 815 544 717 866 720 780 799 803 778
 $ GDP    : int  78 79 95 65 105 73 78 75 68 68
 $ SLG    : num  0.471 0.498 0.438 0.453 0.444 0.406 0.397 0.398 0.389 0.397
 $ OBP    : num  0.374 0.374 0.368 0.362 0.356 0.355 0.36 0.343 0.334 0.332
 $ OPS    : num  0.845 0.872 0.806 0.815 0.8 0.761 0.757 0.741 0.723 0.729
 $ MH     : int  101 100 98 101 104 99 102 101 103 100
 $ RISP   : num  0.3 0.294 0.284 0.296 0.272 0.277 0.264 0.259 0.238 0.26
 $ PH.BA  : num  0.216 0.268 0.262 0.274 0.19 0.236 0.196 0.243 0.231 0.214


#안타와 홈런 변수 확인

> df$H
 [1] 1066 1085  991 1002  985  931  919
 [8]  944  905  861
> df$HR
 [1] 127 155  98 110 130  92  82  87  83  95

#두변수간의 상관계수를 구한다.
#꽤 상관관계가 있다고 볼수 있다.


> cor(df$H,df$HR)
[1] 0.8384116

# 두변수간 산점도 그린다.
> plot(HR~H,data=df,pch=20,col='grey',cex=1.5)



#회귀모델을 그린다


> lm<- lm(HR~H,data=df)
> lm
 
Call:
lm(formula = HR ~ H, data = df)
 
Coefficients:
(Intercept)            H  
  -172.3105       0.2871  
 
> abline(lm,lwd=2,col="red")



- 간단하게 두변수를 잘 설명해주는 직선의 방정식, 즉 회귀모델이 만들어졌다.
  그래프에 나타나는 회귀절면(Intercept) -172.3105의 의미는 안타를 한 번도 못쳤을 경우(hit=0)
  홈런을 -172.3105번 친다는 의미로 해석하지만, 안타가 0인 경우를 해석하기 쉽지 않기때문에 
  회귀모델에서 절편의 의미를 크게 해석하지 않는다.

- 회귀분석은 기울기에 조금 더 관심이 있다. 안타를 10번치면 2.8번은 혼런을 친다라는 사실을 알 수 있다.

(3) 선형회귀모델 검증하기
- b0(절편), b1(기울기)인 회귀계수를 검증한다 특히 기울기(b1)를 검증하는 것이 중요하다.
- b1이 0일 가능성은 없는지, b1의 질은 좋은지를 살펴보는 것이 회귀모델을 검증하는 방법이 된다.

1) 결정계수

- 결정계수 R²은 회귀모델이 질을 나타내는 중요한 값 중에 하나이다. 
R² = 1  : 모든 값이 회귀모델 위에 있다. R² 이 작아질수록 회귀모델에서 멀어진다.
R²는 상관계수를 제곱해서 얻은 값이다. 만약 상관계수가 0.7이면 R²은 0.49로 낮아진다.
  그만큼 회귀모델에 적합하려면 상관계수가 높아야 한다. 0.9일때 
R² 는 0.81가 된다.

2) R에서 결정계수 보기
- R에서는 summary()함수로 lm 객체를 보면 알수 있다.


> summary(lm)
 
Call:
lm(formula = HR ~ H, data = df)
 
Residuals:
    Min      1Q  Median      3Q     Max 
-14.246  -8.874  -4.978  11.068  20.082 
 
Coefficients:
             Estimate Std. Error t value Pr(>|t|)   
(Intercept) -172.3105    64.0968  -2.688  0.02757 * 
H              0.2871     0.0660   4.351  0.00244 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 14 on 8 degrees of freedom
Multiple R-squared:  0.7029, Adjusted R-squared:  0.6658 
F-statistic: 18.93 on 1 and 8 DF,  p-value: 0.002442
 
- 노란마킹부분이  R² 이다


3) 선형 회귀모델 가설 검증

- 모집단의 모회귀식  Y =  
βo + β ₁ χ 위에 없는 점은 모집단 관점에선 오차라 할 수있다.
  오차가 신뢰구간 안에 있는지 검증함으로써 모집단의 특징이라는 회귀모델을 검증한다.

- 결정계수가 0.45로 애매한 값이 나오면 F 통계량으로 회귀모델을 판단한다.
- F통계량으로 회귀모델을 검증할 때는 모집단을 검증하므로 
 β ₁ 이 0일 확률을 검증한다.
 
 β ₁이 0이면 βo만 남고 함수식은 상수가된다.
 
β ₁가 0이 아니어야 회귀모델은 의미를 가진다.

- F통계량은  
β ₁이 0일 가능성을 보여주는 값으로 0.05보다 낮으면 β ₁는 0일 가능성이 거의 없게 되므로 
  0.05보다 낮아야 한다.

summary(lm)의 맨아래 p-value값이 0.005보다 작으면 
β ₁이 0일 가능성이 낮아지면서 이 회귀모델은 적합하다고
  통계적으로 말할 수 있다. 위 푸른색 마킹된 부분이다.


β ₁의 신뢰구간을 알고 싶다면 아래와 같이 입력한다.
- 0.2871은 신뢰구간에 잘 들어가 있다.


> confint(lm)
                   2.5 %     97.5 %
(Intercept) -320.1180464 -24.502900
H              0.1349531   0.439328


4) 잔차 관련된 그래프를 그려 회귀적합성 검증하기
- 회귀적합성을 좀더 정확히 검증하는 방법은 '잔차와  관련된그래프를 그려 확인하는 것이다.
- R에서 plot(lm)으로 잔차와 관련된 그래프를 볼 수 있다.



- 좌측상단에 있는 결과물은 0을 기준으로 골고루 퍼져 있어야 좋다. 그러나 그래프가 +,-를 왔다갔다하거나
  특정 패턴있으면 이런 경우 회귀적합성이 없다고 봐도 된다.

- 우축상단에 있는 결과물은 잔차에 대한 정규분포의 분위수-분위수 그래프(QQplot)이라고 부르며 데이터의 분포가
  정규성을  만족하는지 못하는지 대략적으로 파악하기 위한 도구로서 사용된다. 정규분포 형태라면 점선위에 점들이 놓여있게된다.

- 좌측하단 그림은 잔차에서 개선된 표준화된 잔차를 제곱해 표현한 것으로 잔차의 정도를 파악하는데 조금 더 용이한 결과물이다.
  골고루 퍼져 있는 그래프가 좋다.

- 우측하단에 있는 그림은 영향점, 이상점 판별을 도와 주는 그래프로 cook's distance는 통상 1값이 넘어가면 그 관측치를 영향점
  으로 판별한다. 이상점은 등고선 안쪽에 동그라미가 위치하게되며 이상점이 있으면 회귀모델에 좋치 않은 영향을 미친다.


 




(4) 다중 선형회귀분석
- 종속변수에 영향을 미치는 독립변수가 한개 이상인 경우 다중선형회부 모델이라 한다. 
- R에서 lm()를 사용하며 '+'로 변수를 추가하면 된다.
  lm(HR~R+H+AO)

1) 2015 KBO 야구 데이터 다중선형회귀분석
- RBI(타점), XBH(장타), TB(루타), XR(추정득점), GW.RBI(결정타)등을 독립변수로 사용한다.

> df2 <- read.csv("./data/example_kbo2015_player.csv",stringsAsFactors = F,na='-')
> str(df2)
'data.frame': 337 obs. of  26 variables:
 $ 순위  : int  1 2 3 4 5 6 7 8 9 10 ...
 $ 선수명: chr  "유한준" "박병호" "홍성갑" "고종욱" ...
 $ 팀명  : chr  "넥센" "넥센" "넥센" "넥센" ...
 $ AVG   : num  0.364 0.349 0.333 0.324 0.318 0.316 0.311 0.3 0.295 0.287 ...
 $ G     : int  101 106 7 85 44 96 68 99 79 103 ...
 $ PA    : int  436 476 10 328 26 405 253 389 339 436 ...
 $ AB    : int  376 410 9 299 22 370 219 333 295 383 ...
 $ R     : int  82 100 0 59 17 53 40 52 62 68 ...
 $ H     : int  137 143 3 97 7 117 68 100 87 110 ...
 $ X2B   : int  35 29 0 22 2 21 10 22 21 28 ...
 $ X3B   : int  1 1 0 3 0 0 0 1 1 4 ...
 $ HR    : int  19 42 0 8 0 14 8 13 17 14 ...
 $ TB    : int  231 300 3 149 9 180 102 163 161 188 ...
 $ RBI   : int  84 111 2 40 3 65 21 67 53 57 ...
 $ SAC   : int  0 0 0 3 2 0 1 5 3 3 ...
 $ SF    : int  6 3 0 1 0 3 2 6 3 4 ...
 $ XBH   : int  55 72 0 33 2 35 18 36 39 46 ...
 $ GO    : int  97 70 2 73 6 95 60 96 39 80 ...
 $ AO    : int  95 74 0 67 2 105 57 84 75 106 ...
 $ GO.AO : num  1.02 0.95 NA 1.09 3 0.9 1.05 1.14 0.52 0.75 ...
 $ GW.RBI: int  7 10 0 6 0 2 1 5 1 3 ...
 $ BB.K  : num  1 0.42 0.25 0.3 0.29 0.45 0.78 0.63 0.31 0.46 ...
 $ P.PA  : num  4 4.07 4.7 3.89 4.08 3.98 4.19 3.85 4.14 4.22 ...
 $ ISOP  : num  0.25 0.383 0 0.174 0.091 0.17 0.155 0.189 0.251 0.204 ...
 $ XR    : num  88.4 113.3 1.3 47.9 4.2 ...
 $ GPA   : num  0.351 0.378 0.263 0.293 0.271 0.287 0.293 0.292 0.304 0.285 ...

#문자열 변수를 실수로 변환

 
> df2$AVG <- as.numeric(df2$AVG)
> df2$GO.AO <- as.numeric(df2$GO.AO)
> df2$BB.K <- as.numeric(df2$BB.K)
> df2$P.PA <- as.numeric(df2$P.PA)
> df2$ISOP <- as.numeric(df2$ISOP)

#홈런과 다른변수들간의 상관계수를 살펴본다
# use= "pairwise.complete.obs"
#
상관계수가 계산되는 변수들만을 대상으로 결측값이 있는 case 제거한  상관계수 계산



> cors <- cor(df2$HR, df2[,5:length(df2)],use='pairwise.complete.obs')
> cors
             G        PA        AB
[1,] 0.6573121 0.7607232 0.7519703
             R         H       X2B
[1,] 0.8012273 0.7815465 0.7756991
           X3B HR        TB       RBI
[1,] 0.3089791  1 0.8828075 0.9217014
            SAC        SF       XBH
[1,] 0.02882778 0.6766359 0.9190164
            GO        AO      GO.AO
[1,] 0.6096195 0.7477335 -0.1618067
        GW.RBI      BB.K       P.PA
[1,] 0.7889489 0.2839297 0.03248409
          ISOP        XR       GPA
[1,] 0.7813991 0.8815765 0.5505212

#정렬해서 상관관계를 다시 본다.

 
> cors <- cors[,order(cors)]
> cors
      GO.AO         SAC        P.PA 
-0.16180671  0.02882778  0.03248409 
       BB.K         X3B         GPA 
 0.28392966  0.30897909  0.55052123 
         GO           G          SF 
 0.60961949  0.65731209  0.67663588 
         AO          AB          PA 
 0.74773350  0.75197032  0.76072321 
        X2B        ISOP           H 
 0.77569907  0.78139909  0.78154650 
     GW.RBI           R          XR 
 0.78894892  0.80122734  0.88157647 
         TB         XBH         RBI 
 0.88280745  0.91901637  0.92170137 
         HR 
 1.00000000 

# 독립변수의 값이 0인 관측치를 제거한다.
> df2$HR[df2$HR==0]<-NA
> df2$RBI[df2$RBI==0]<-NA
> df2$XBH[df2$XBH==0]<-NA
> df2$TB[df2$TB==0]<-NA
> df2$XR[df2$XR==0]<-NA
> df2$GW.RBI[df2$GW.RBI==0]<-NA
 
> df2 <-na.omit(df2) #결측치 제거

#여러개의 독립변수로 회귀분석을 한다.

 
> lm2<-lm(HR~RBI+XBH+TB+XR+R, data=df2)
> lm2
 
Call:
lm(formula = HR ~ RBI + XBH + TB + XR + R, data = df2)
 
Coefficients:
(Intercept)          RBI          XBH  
   -1.08756      0.15104      0.51513  
         TB           XR            R  
   -0.07797      0.14409     -0.12632  

 
#회귀모델의 검증을 한다.
#Pr(>|t|) 의 값이 0.05보다 작으므로 0일 가능성이 매우 낮다.
#p-value, 결정계수등 모두 좋다.

 
> summary(lm2)
 
Call:
lm(formula = HR ~ RBI + XBH + TB + XR + R, data = df2)
 
Residuals:
    Min      1Q  Median      3Q     Max 
-6.8941 -1.5712  0.2196  1.5315 10.5936 
 
Coefficients:
            Estimate Std. Error t value
(Intercept) -1.08756    0.62254  -1.747
RBI          0.15104    0.03954   3.820
XBH          0.51513    0.08172   6.304
TB          -0.07797    0.03510  -2.221
XR           0.14409    0.07046   2.045
R           -0.12632    0.04309  -2.932
            Pr(>|t|)    
(Intercept) 0.083267 .  
RBI         0.000215 ***
XBH         5.32e-09 ***
TB          0.028260 *  
XR          0.043094 *  
R           0.004057 ** 
---
Signif. codes:  
  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’
  0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 3.027 on 117 degrees of freedom
Multiple R-squared:  0.8637, Adjusted R-squared:  0.8579 
F-statistic: 148.3 on 5 and 117 DF,  p-value: < 2.2e-16

1. 신뢰구간 
- 통계학에선 표본으로 모집단의 성질을 유추한다. 이것을 통계적인 추정이라 한다.
- 전국 초등학교 어린이의 한달 용돈의 평균값을 알기 위해 무작위로 뽑은 초등학생 2500명을 조사했다.
  평균값이 3000원 표본오차가 5000원 이었다면 , 한달 용돈 평균값를 95%의 정확도(신뢰도)로 추정할 수 있다.

- 모집단은 전국 초등학교 어린이들 이고, 표본은 무작위로 뽑은 초등학생 2500명이 된다.
- 추정에 사용되는 통계량의  표본분포를 조사하는데, 표본분포에서 그 기댓값을 중심으로 주어진 신뢰도로
  통계량이 일어나는 범위를 조사하고 신뢰도 95%가 되는 구간이 얻어지는데 그 구간을 신뢰구간이라 한다.

- R의 t.test()로 표본을 이용하여 모집단의 신뢰구간을 추정할 수 있다.
- conf.level 인자를 사용하여 99%의 신뢰구간을 추정할 수 있다.
- rnorm() 함수는 평균값과, 표준편차를 기준으로 랜덤 값을 만들어주는 함수이다.
- 신뢰도 구간에 포함되므로 표본으로 부터 얻은 평균값은 신뢰할 수 있다.


> x<-rnorm(2500,mean =3000, sd=5000)

> head(x)
[1] -1390.324  2078.670  8496.166  7118.888  7921.763  2006.365
 
> t.test(x)
 
One Sample t-test
 
data:  x
t = 31.35, df = 2499, p-value < 2.2e-16(p-value값이 0.05보다 작으므로 평균값이 나올 확률이 유의하며 우연이라고 볼수 없다.  )
alternative hypothesis: true mean is not equal to 0 (대립가설)
95 percent confidence interval: (95% 신뢰구간)
 2978.034 3375.440
sample estimates: (x의 평균값)
mean of x 
 3176.737 
 


 
> t.test(x,conf.level = 0.99)
 
One Sample t-test
 
data:  x
t = 31.35, df = 2499, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
99 percent confidence interval:
 2915.524 3437.950
sample estimates:
mean of x 
 3176.737 

 
 

2 모비율 검정

1) 100경기중 56번 이겼을때, 앞으로의 경기에서 절반 이상을 이길 수 있을 것이라는 가설을 검증하고자 한다.
   (귀무가설 :성공확률(P)==0.5)

 -   표본비율을이용하여 모집단 비율을 구하고싶다면
    prop.test 함수를 이용해서 가설을 검정한다.
 - 실제 성공확률(P)에 대한 가설이 검정된다.
 
# prop.test(이긴경기(56), 전체경기(100), 성공확률(50%) )

> prop.test(56,100,0.5)
 
1-sample proportions test with continuity correction
 
data:  56 out of 100, null probability 0.5 (귀무가설:성공확률50%이다.)
X-squared = 1.21, df = 1, p-value = 0.2713
alternative hypothesis: true p is not equal to 0.5(대립가설:50%아니다.)
95 percent confidence interval:
 0.4573588 0.6579781
sample estimates:
   p 
0.56 
 

- p-value값이 0.05보다 크기때문에 귀무가설은 기각되지 않는다.(성공확률 50% 이다.)
   




- prop.test() 에 
alternative = "greater" 추가하여 대립가설의 성공확률을 50%이상으로 변경하여 검정한다.
 # prop.test(이긴경기(56), 전체경기(100), 성공확률(50%), 대립가설이 50%보다 크다)

> prop.test(56,100,0.5, alternative = "greater")
 
1-sample proportions test with continuity correction
 
data:  56 out of 100, null probability 0.5(귀무가설)
X-squared = 1.21, df = 1, p-value = 0.1357(0.05이거나 작아야 유의한값이고, 귀무가설이 기각된다.)
alternative hypothesis: true p is greater than 0.5(대립가설)
95 percent confidence interval:
 0.4728784 1.0000000
sample estimates:
   p 
0.56 
 

- 대립가설이 50%이상일때  p-value = 0.1357에 따라 0.05보다 크기때문데 귀무가설 기각되지 않는다. 
100경기중 56번 이겼을때, 앞으로의 경기에서 절반 이상을 이길 수 있을 것이라는 생각은  잘못된 판단이다.




3. 정규성 검증

(1) 정규성 검증이란
- 모집단의 확률분포가 정규분포를 따르고 있는 지를 검정하는것이다.  


(2) R에서 표본이 정규분포로 된 모집단에서 나온 것인지 검정하고 싶다면 shapire.test(x)를 사용하다.

p-value이 0.05보다 크다면 모집단이 정규분포를 따르고 있다는 것을 의미하지만
  
p-value이 작다면 모집단이 정규분포를 따른다고 볼 수 없다.

> attach(iris)

> shapiro.test(Sepal.Length)
 
Shapiro-Wilk normality test
 
data:  Sepal.Length
W = 0.97609, p-value = 0.01018(크기가 작다-정규분포에 따르지 않다)
 
> table(Sepal.Length)
Sepal.Length
4.3 4.4 4.5 4.6 4.7 4.8 4.9   5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9   6 6.1 6.2 6.3 6.4 6.5 6.6 6.7 
  1   3   1   4   2   5   6  10   9   4   1   6   7   6   8   7   3   6   6   4   9   7   5   2   8 
6.8 6.9   7 7.1 7.2 7.3 7.4 7.6 7.7 7.9 
  3   4   1   1   3   1   1   1   4   1 

 
> ggplot(data = iris, aes(x = Sepal.Length)) + geom_bar()






4. 유의성 검증

(1) 상관관계 
- 조사항목의 두변수사이의 관계를 파악할 수 있다
- 두항목 간의 관계를 파악하는데는 산포도가 편리하다.
1) 상관관계의 종류
- 양의 상관 : 한변수의 값이 커지면 다른 변수의 값도 커지는 경향
- 음의 상관 : 한변수의 값이 커지면 다른 변수의 값은 작아지는 경향
상관없다 :  두변수의 값의 분포가 일정하지 않다.

3) 공분산과 상관계수
공분산: 위의 세 상관관계를 수치화 한 방법
상관계수 : 공분산보다 좀더 정확하게 수치화 한 방법
양의상관: 상관계수 1에 가깝다
음의상관: 상관계수 -1에 가깝다.
상관없다 : 상관계수 0에 가깝다.

2) R에서 두변수 상관관계 확인
- 유의성 검정과 신뢰구간을 계산하는 cor.test()를 사용한다.
- cor.test()의 기본설정은 정규분포에 따르면 피어슨이며, 정규 분포에 따르지 않으면 스피어만을 사용한다.
- iris$Sepal.Length(붓꽃의 꽃받침 길이), iris$Sepal.width
(붓꽃의 꽃받침 넓이)의 상관관계의 유의성 확인

> cor.test(iris$Sepal.Length,iris$Sepal.Width)

 
Pearson's product-moment correlation (피어슨 적률상관)
 
data:  iris$Sepal.Length and iris$Sepal.Width
t = -1.4403, df = 148, p-value = 0.1519(0.05보다 크기)
alternative hypothesis: true correlation is not equal to 0(대립가설)
95 percent confidence interval:
 -0.27269325  0.04351158
sample estimates:
       cor 
-0.1175698 

- 귀무가설(대립가설이 부정) : 상관계수가 0이다.
- 대립가설: 상관계수가 0이 아니다.

 

- 유의값(p-value)값이 0.05보다 크기 때문에 상관계수가 0 이라는 귀무가설을 기각할 수 없다.
  다시 말하면 상관계수는 통계적으로 유의하지 않다고 판단할 수 있다.
  양의 상관도 음의 상관도 아니다

attach(iris)
library(ggplot2)

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() 



1. 확률 개념

(1) 통계학에 확률이 필요한 이유
- 통계학을 수학적으로
 분석하는 데는 확률이 필요하다.
- 표본으로 부터 모집단의 특징을 추론할때 확률이 필요하다.

1) 전수조사와 표본조사
- 전수조사(전체 조사) : 대상 모두를 조사함, 오차 없이 정확하게 결과가 얻어지는 반면 막대한 비용과 수고가 따른다.
- 표본조사(샘풀 조사) : 대상의 일부를 추출해 조사함, 일부를 조사해서 그 전체를 추정하는 방법, 일부를 표본이라 하고 
  전체를 모집단이라 한다. 전수조사에 비해 수고나 비용을 줄일 수 있으나 표본의 선택 방법에 따라 오차(표본오차)가 생김,


2) 표본선택, 표본오차
- 표본조사에서는 전체(모집단)에서 표본을 추출해 모집단을 추정한다. 표본은 무작위로 추출한다.
- 모집단에서 복수의 표본을 무작위로 추출하면 모집단의 성질이 표본별로 달라져 표본오차가 생긴다.
- 표본 오차를 극복하는 것이 확률론이다.


                    ----> 무작위 표본추출1 (100명)  ----> 흡연율 20%
  
모집단 성인   ----> 무작위 표본추출2 (100명)  ----> 흡연율 19%
                    ----> 무작위 표본추출3 (100명)  ----> 흡연율 21%

  : 표본으로 추출된 흡연율의 차이를 표본오차라 한다.


(2) 확률의 의미
- 통계학에 의한 데이터 분석에서는 확률이 이론을 뒤받침하게 된다.
- 확률의 예
  동전던지기 해서 앞면이 나올 확률, 주사위 던지기 해서 2가 나올 확률

1) 시행과사상
- 주사위를 던져 눈의 수를 조사하는 확률실험에서 주사위를 던지는 행위를 시행(확률실험)이라 한다.
- 시행에서 얻을 수 있는 결과 중에 조건에 맞는 결과를 사상(사건)이라 한다.
- 시행에서 얻을 수 있는 결과의 모든 집합을 전사상(표본공간)이라 한다.
- 모집단(전사상)에서 표본(사상)추출도 시행이라 한다.
- 실험으로 나올수 있는 결과를 모두 알고 있지만 어떤 결과가 나올지 모르는 실험을 '확률실험'(시행)이라 한다.

2) 확률의 정의



 - 확률은 우리가 모르는 어떤 사실에 대해 말해주는 것이 아니라 이미 우리가 알고 있는 사실에 대한
   단순한 비율이다.

  
                           
                                문제의 사상(사건)이 일어나는 경우의 수
확률(수학적 확률) p =   ------------------------------------------------
                                일어날 수 있는 모든 경우의 수(표본공간의 모든 경우의 수)




※ 다른 확률의 예
- 확률 실험: 1에서 45까지 숫자가 적힌 공을 상자에 담아 임의로 6개를 뽑는 실험을 한다.
- 표본 공간(전사상): {1,2,3,4,5,6}, {1,2,3,4,5,7} .....{40,41,42,43,44,45} ....무수히 많음
- 모든 경우의 수 : 8,145,060 (아래 경우의 수공식에서 확인)
- 사건(사상) : 1 
- 확률 : 1/8145060

- 확률은 확률 실험, 표본 공간(전사상), 모든경우의 수, 사건, 사건의 경우의 수를 정확히 구분할 수 
  있어야 한다.

- 확률실험은 실험자가 정한다.
- 확률실험으로 일어나는 모든 결과를 알고 있어야 한다.
- 일어나는 전체 결과 수 대비 사건이 일어나는 결과 수가 확률이다.
- 일어나느 결과는 서로 공평하게 일어나야 한다.

                              


3) 경우의 수 계산
- 6개 상품 중 4개를 골라 세트로 구매할 수 있는 상품이 있다고 가정한다면 구성할 수 있는 세트는 몇 가지 일까?
- 위의 문제는 경우의 수를 구하는 문제이다. 이름 일반화 해서 말하면 
  n개에서 r개를 고르는 경우의 수  이다.

- 위의 일반화된 경우는 4가지로 나누어 지며, 이 4가지는 중복허용 여부, 순서 허용 여부에 따라 나누어진다.
- 순서허용 이면  {1,2}와 {2,1}은 다른 경우이다 순서허용하지 않으면 {1,2}와 {2,1} 같은 경우이다.
- 중복허용 이면  {1,1}은 허용되지만 중복허용이 아니면 {1,1}은 경우에 포함되지 않는다.
- 순열과 조합, 중복순열, 중복조합 으로 경우의 수를 계산한다.
  

4) 조합의 공식
- 종류가 다른 n개로 부터 r개를 추출할 수 있는 방법의 수는 다음의 nCr가지이다

                n!
   nCr = -------------
              r!(n-r)!


종류가 다른 n개로 부터 중복허용 하여  r개를 추출할 수 있는 방법의 수는 다음의 nHr가지이다

  nHr = n+r-1Cr


예) 5종류의 과일이 1개씩 있을때 3개 들어있는 과일 세트를 만들고 싶다 몇 가지를 만들수 있을까?

                   5!
              ------------
    nCr =     3!(5-3)!             = 10가지

                   7!
   
nHr =   -------------          = 35가지(중복허용)
                3!(7-3)!
                 


5) 순열의 공식
- 종류가 다른 n개로 부터 순서대로 r개를 취해 일렬로 늘어 놓는 방법은 nPr 가지이다.
  
                    n!
    nPr  = --------------
                  (n-r)!  



- 종류가 다른 n개로 부터 중복허용 하여 순서대로 r개를 취해 일렬로 늘어 놓는 방법은 nㅠr가지이다.

   nㅠr  =  n^r


예) 3명중에 2명을 선택해 1열로 늘어놓는 방법은 순열의 공식으로

                  3!
    3P2  = ------------ = 6가지
                 (3-2)!



     3ㅠ2  =  3 ^ 2    = 9가지



6) R에서 경우의 수 계산
- gtools 패키지 설치해서 사용한다.
- 순열: permutations(3,2)
- 조합: combinations(3,2)


install.packages("gtools")
library(gtools)
name <- c("A","B","C")
permutations(3,2,name) #순열
     [,1] [,2]
[1,] "A"  "B" 
[2,] "A"  "C" 
[3,] "B"  "A" 
[4,] "B"  "C" 
[5,] "C"  "A" 
[6,] "C"  "B" 
permutations(3,2,name,repeats.allowed = T) #중복허용 순열
     [,1] [,2]
 [1,] "A"  "A" 
 [2,] "A"  "B" 
 [3,] "A"  "C" 
 [4,] "B"  "A" 
 [5,] "B"  "B" 
 [6,] "B"  "C" 
 [7,] "C"  "A" 
 [8,] "C"  "B" 
 [9,] "C"  "C" 

fruit<-c("바나나","딸기","포도","체리","사과")
 
combinations(5,3,fruit) #조합 
     [,1]     [,2]     [,3]  
 [1,] "딸기"   "바나나" "사과"
 [2,] "딸기"   "바나나" "체리"
 [3,] "딸기"   "바나나" "포도"
 [4,] "딸기"   "사과"   "체리"
 [5,] "딸기"   "사과"   "포도"
 [6,] "딸기"   "체리"   "포도"
 [7,] "바나나" "사과"   "체리"
 [8,] "바나나" "사과"   "포도"
 [9,] "바나나" "체리"   "포도"
[10,] "사과"   "체리"   "포도"
 
combinations(5,3,fruit,repeats.allowed = T) #중복허용 조합
    [,1]     [,2]     [,3]    
 [1,] "딸기"   "딸기"   "딸기"  
 [2,] "딸기"   "딸기"   "바나나"
 [3,] "딸기"   "딸기"   "사과"  
 [4,] "딸기"   "딸기"   "체리"  
 [5,] "딸기"   "딸기"   "포도"  
 [6,] "딸기"   "바나나" "바나나"
 [7,] "딸기"   "바나나" "사과"  
 [8,] "딸기"   "바나나" "체리"  
 [9,] "딸기"   "바나나" "포도"  
[10,] "딸기"   "사과"   "사과"  
[11,] "딸기"   "사과"   "체리"  
[12,] "딸기"   "사과"   "포도"  
[13,] "딸기"   "체리"   "체리"  
[14,] "딸기"   "체리"   "포도"  
[15,] "딸기"   "포도"   "포도"  
[16,] "바나나" "바나나" "바나나"
[17,] "바나나" "바나나" "사과"  
[18,] "바나나" "바나나" "체리"  
[19,] "바나나" "바나나" "포도"  
[20,] "바나나" "사과"   "사과"  
[21,] "바나나" "사과"   "체리"  
[22,] "바나나" "사과"   "포도"  
[23,] "바나나" "체리"   "체리"  
[24,] "바나나" "체리"   "포도"  
[25,] "바나나" "포도"   "포도"  
[26,] "사과"   "사과"   "사과"  
[27,] "사과"   "사과"   "체리"  
[28,] "사과"   "사과"   "포도"  
[29,] "사과"   "체리"   "체리"  
[30,] "사과"   "체리"   "포도"  
[31,] "사과"   "포도"   "포도"  
[32,] "체리"   "체리"   "체리"  
[33,] "체리"   "체리"   "포도"  
[34,] "체리"   "포도"   "포도"  
[35,] "포도"   "포도"   "포도"  
 


7) 확률변수와 확률분포

- 확률변수 :
  1개의 주사위를 던지는 시행에서 나오는 눈을 X라 표시하기로 하자,
  이 X 는 주사위를 던져봐야 비로소 값이 확정된다. 이와같이 시행을 해야 비로소 값이 확정된는 변수를
  확률변수라 한다.

- 확률실험으로 얻게 되는 데이터는 수치형일수도 있고 범주형일 수도 있다. 수치형은 수치 그대로 사용할 수
  있지만 범주형인 경우에는 도수분포표를 만든 것처럼 수치로 바꿔야 한다.

- 확률변수는 반드시 숫자가 되어야 한다. 그래야 다양한 해석이 가능하고, 수학적으로 계산하여 의미를 찾을 수
  있다.

- 확률변수는 주사위의 눈처럼 비연속 수치를 취하는 이산형 확률변수와 키나 체중처럼 연속하는 수치를 취하는
  연속형 확률변수가 있다.

예제1) 이산형 확률변수 만들기
- 슈퍼마켓의 A,B,C,D,E,F 과자의 총 팔린수가 1000개이고 각각의 팔린수와 마진률를 조사했다





- 위 과자명 A,B,C,D,E,F는 상품마다 판매 비율이 있으니 이것을 확률변수로 나타낼 수 있을 것이다. 
  하지만 문자형이라 확률변수로 사용할 수 없다. 만약사용한다면 상품마다 팔릴 확률은 몇인지 말고는
  더이상 나아갈 것이 없기 때문이다.

- 판매가격은 동일하게 3000원이기때문에 상수이다. 변수로 사용할 수 없다.

- 마진값은 수치이면서 변수이기때문에 확률변수로 사용할 수 있다.

- 확률변수(마진값을 순서대로 나열), 판매개수,판매비율(확률),기대값(확률에 확률변수를 곱해서 더한다.)



- 위 표에서 확률변수비율을 더한값이 630이며 이값은 확률변수의 평균값이 되며 이렇게
  확률변수로서 확률적 의미로서 기대할 수 있는 값이라 하여 기대값이라 부른다.

- 데이터를 확률적인 방법으로 설명하였기 때문에 기대값을 통해 평균을 말하면 이 값은 모집단의
  특성이라고 말할 수 있다. 이런 것을 모수라 부른다.




※ 모수란?

모수는 모집단의 특성(모평균,모분산 등..)을 나타내는 값으로, 이 값을 모집단을 전수조사해야만 알수있는 값이다.
그러나 실질적으로 모집단의 크기와 범위가 너무 방대하기에 전수조사를 실지하지 않고 표본조사를 하는데
표본평균,표본분산 등으로 모평균, 모분산등을 추정할수가 있
다.


 ※ 참고
  기댓값      μ(Mu)  = x1p1 + x2p2 + ...... + xnpn
  분산         σ²(sigma)   = (x1-
μ)² p1 + (x2-μ)² p2 + ...... + (xn-μ)² pn
   표본오차   σ(sigma)    =  분산의 정의 제곱근  √σ² 


- 확률분포 : 확률변수가 특정한 값을 가질 확률을 나타내는 함수를 의미한다.
  예를 들어, 주사위를 던졌을 때 나오는 눈에 대한 확률변수가 있을 때, 그 변수의 확률분포는
  이산확률분포가 된다.

 
- 확률분포는 확률변수가 어떤 종류의 값을 가지는가에 따라서 크게 이산 확률분포와 연속 확률분포 중 하나에
  속하며, 둘 중 어디에도 속하지 않는 경우도 존재한다.




8) 이산 확률분포 
- 실험에서 성공/실패, 앞면/뒤면, 합격/불합격, 생존/사망, 사고/미사고 의 확률변수가 나오는 경우이며
  베르누이 시행을 한다.
- 베르누이 시행의 특징은
  결과는 성공/실패가 나타난다.
  각 시행의 확률은 동일하다(앞면:1/2  뒤면:1/2   주사위3: 1/6  주사위1: 1/6)
  각 시행은 독립적이다. 
(앞의 시행에 영향을 받지 않는다.)

- 이산 확률분포에는 이항분포및 기아분포가 포함되어있다.

이항분포
문제 : 배너의 클릭률이 0.0009인 시스템에서 한번에 30000명에게 배포한다면 이시스템으로 27명이
        클릭할 확률은 얼마인가?


- 먼저 개별확률이 0.0009이고 10000명에 노출시켰을 때 확률인 그래프를 그려보면 아래 와 같다.


 y <- dbinom(0:20, size=10000, prob=0.0009)
 plot(0:20, y, type='h', lwd=5, col="grey", ylab="Probability", xlab="확률변수 X", 
           main = c("X ~ B(10000, 0.0009)"))
 





- 위 그래프를 해석하면 9명일때 확률이 가장 높고 이때 확률은 0.13이다. 이말은 10000명에게 이배너를 
  노출하면 9명이 클릭할 확률이 13%라는 것이다. 또한 그래프를 보면 15명이 클릭할 확률은 0.02이다.

- 위처럼 이항분포는 개별 p확률을 가진 상황에서 n번 시행했을때 성공하는 횟수의 확률 분포를 나타내는 것이다.
  
 이항분포 식 :  X-Bin(n,p)   -> X-Bin(10000,0.0009)
 R사용 함수  :  dbinom(9,10000,0.0009)

- 문제를 R사용하여 확률 구해보면 아래와 같다.


z <- dbinom(0:30,30000,0.0009)
z
plot(0:30, z, type='h', lwd=5, col="grey", ylab="Probability", xlab="확률변수 X", 
     main = c("X ~ B(30000, 0.0009)"))



> dbinom(27,30000,0.0009)
[1] 0.07657436
 

- 이항분포의 평균 : np, 이항분포의 분산 : np(1-p)



기하분포 
문제 : 30%의 시험관 아기를 성공하는 병원에서 3번만에 성공할 확률은 얼마인가?

- 먼저 개별 확률이 20%일때 기하분포 그래프를 그려보면 아래와 같다.


x<-dgeom(1:20,0.2)
 
plot(1:20, x, type='h', lwd=5, col="grey", ylab="Probability", xlab="확률변수 X", 
     main = c("dgeom(1:20,0.2)"))





- 첫번째 시행했을때 성공할 확률은 16%정도이며, 두 번째에 성공할 확률은 13%이다.
  세 번째 성공할 확률은 10% 이다.
  이렇게 맨 처음이 성공할 확률이 가장 높고 뒤로 갈수록 급격하게 확률은 떨어지게 됩니다.

- 위의 분포를 활용할 수 있는데 20%의 성공률을 보이는 실험에서 세번만에 성공할 확률을 구할 수 있다.
  이것은 첫 번째, 두 번째, 세 번째를 모두 더하면 된다.

  16
+ 13 + 10= 39 % 

- 위의 문제에서 실험할때 마다 큰비용이 발생하는 시험관 아기를 해주는 병원의 성공확률이 30%라면 한 부부가 
  3번째 성공할 확률은 다음과 같이 구할 수 있다.



z<- dgeom(1:20, 0.3)
z
plot(1:20, z, type='h', lwd=5, col="grey", ylab="Probability", xlab="확률변수 X", 
     main = c("dgeom(1:20,0.3)"))





> sum(z[1:3]) #45%의 확률을 구할수 있다.
[1] 0.4599


확률변수 X가 0에서 시작한다면 X번 실패하고 처음으로 성공할 확률이 되며,
  확률변수 X가 1부터 시작하다면 X번 째에 성공할 확률이 된다.


  

9) 연속 확률분포
- 확률실험에서 얻은 데이터가 연속변수라면 확률변수를 만드는 것이 쉽다. 연속변수 자체를 그대로 확률변수로
  사용하면 된다.


- 연속형 확률변수의 확률 분포표는 계급으로 구분한 상대도수분포표의 형식을 취하게 된다.

  키의 확률분포표
  --------------------  
      계급      |
  이상  미만  | 확률
  --------------------
  150 ~ 155  | 0.00 

  155 ~ 160  | 0.05 
  160 ~ 165  | 0.15 
  165 ~ 170  | 0.30 
  170 ~ 175  | 0.25 
  175 ~ 180  | 0.20 
  180 ~ 185  | 0.05 
  185 ~ 190  | 0.00
  ------------------------
          총계    1

- 연속형 확률변수에 의한 확률분포에서 가장 중요한 분포는 정규분포이다. 
  연속평 변수 1과 2사이에는 무수히 많은 값들이 존재한다.

- 정규분포의 그림을 그려보면 마치 종 모양을 하고 있는데 가운데 볼록한 부분이 데이터의 평균이다.
  그리고 퍼져 있는 정도는 데이터의 분산이다
.

- 이렇게 평균을 중심으로 종 모양인 분포를 정규분포라 한다. 식으로 X-N(평균,분산)로 표기한다.


x <- seq(1, 100, length=200)  #1~100에서 200개 뽑기
x
 
plot(x, dnorm(x, mean=50, sd=10), type='l', main="Normal distribution, X~N(50,10)") 

 



- 표준정규분포 : 정규분포 그래프중에 평균이 0이고 분산이 1인 그래프를 특히 표준정규분포라 한다.
  기호로  X~N(0,1) 이다.


y <- seq(-3,3,length=200)
y
plot(y,dnorm(y, mean=0,sd=1), type="l", main="Normal distribution, X~N(0,1)")



- 각각의 해당 자료의 평균과 표준편차를 표준화 해서 나타내면 모든 자료의 다양한 분포를
  단 하나의 함수식으로 표현할 수 있다.
  이렇게 다양한 분포를 표준화 해서 나타낸것이 표준정규분포이다. 


- 중심극한정리
  연속변수를 가진 모집단은 정규분포를 따르거나 따르지 않을 수 있다. 정규분포와 상관없이 모집단의 평균은 있다.
  이런 가운데 모집단에서 어떤 값을 30번 이상 반복해서 표집했다면 모집단이 정규분포도에 따르던 따르지 않던
  상관없이 표집한 데이터의 그래프는 거의 정규분포를 따른다는 개념이다.

10) 정규분포 
- 정규분포 : 연속형 확률변수의 분포이다. 확률밀도함수를 갖는 확률분포를 정규분포라 한다.
- 정규분포의 그래프는 아래처럼 기댓값을 중심으로 자우대칭 종 모양이 된다.
  이 확률분포에 따르는 확률변수의 기대값은 μ , 분산은 σ² 가 된다.




- 정규분포 그래프의 [기댓값±표본오차]의 구간은 68%이상의 면적이 들어가고,
  [기댓값±2×표본오차]의 구간에 95% 이상의 면적이 들어간다.
  어느 구간에 확률현상이 일어날 확률은 그 구간에서 확률밀도함수 그래프와 가로축으로 둘러싸인 부분의
  면적으로 표시되므로 
[기댓값±2×표본오차]에 거의 확실(95% 이상)하게 확률현상이 나타난다.

- 평균값을 중심으로 [95%와 99%를 덮는 범위]는 통계학에서 곧잘 이용된다. 이들 경계점을 정규분포
  양측 5%점, 양측 1%점 이라한다(%는 백분위수라고 읽는다.)
  또한 왼쪽에서 오른쪽에 걸친 95%의 범위도 통계학에서 많이 이용된다. 이들 오른쪽 경계점을 정규분포의
  상위 5%점, 상위 1%점이라 한다.

- 표준정규분포:기댓값이 0 표본오차 1이 되는 경우를 표준정규분포라 한다.

11) R에서 확률관련 값 구하기
- 난수(랜덤값) 생성하기, 분포이름앞에 r를 붙여 사용한다.
   정규분포에 따르는 난수 : rnorm()
   이항분포를 따르는 난수 : rbinom()
   기하분포를 따르는 난수 : rgeom()
   균등난수 : runif()


runif(10) # 분포에 속하지 않는 균일한 랜덤값 10개 생성

runif(50, min=0, max=100) #0부터 100까지의 랜덤값 50개 생성
 
rnorm(10,mean=100,sd=15) # 정규분포에 따르는 평균이 100, 표준편차 15인 난수 10개 생성
rnorm(1000,mean=452,sd=80) #평균이 452 ,표준편차 80인 난수 1000개 생성
 
rbinom(100,size=1,prob=0.5) #50%확률로 1이 나오는 100개의 이항분포 난수값 구하기
rbinom(100,size=1,prob=1/6) #주사위처럼 확률이 1/6인 경우의 성공(1이라 칭함) 난수 구하기 

#문자열로 변경했을경우
a<- rbinom(100,size=1,prob=1/6)

a
a[a==1]<-"성공"
a[a==0]<-"실패"
a

- 확률계산하기
정규분포를 따르는 확률밀도함수와 이항분포를 따르는 확률질량함수의 확률을 구할 수 있다. 난수 함수처럼
분포이름 앞에 d, p 붙이면 된다.




- 평균이 30이고 표준편차가 7인 정규분포에서 확률변수 15의 확률구하기

 dnorm(15,mean=30,sd=7)
 
 
- 평균이 550이고 표준편차가 80인 정규분포에서 확률변수 450의 확률 구하기

  dnorm(450,mean=550,sd=80)
 
 
- 이항분포의 확률은 성공의 개수, 시행횟수, 단일 사건의 확률이 있으면 확률을 구할 수 있다
  동전을 1000번 던져 490번 앞면이 나올 확률 구하기


  dbinom(490,size=1000,prob=0.5)
 
 
- 흡연율이 25%로 알려진 1020명이 있는 A대학에서 무작위로 50명을 뽑았을때 흡연자일 확률은?
 

   dbinom(50,size=1020,prob=0.25)

- 기하분포는 앞서도 말한 것처럼 0으로 시작하는 경우와 1로 시작하는 경우가 다르다.
  R에서는 pgeom()는 0을 포함한다. 즉, 누적기하분포를 구하면 확률변수 X는 n번 실패하고
  처음으로 성공할 확률이 된다. 

 #20% 성공률 실험에서 3번째 성공할 확률

 dgeom(3,prob = 0.2)
 
 #20% 성공률 실험에서 3번 실패후 처음으로 성공할 확률
 pgeom(3,prob=0.2)
 



> dnorm(15,mean=30,sd=7)

[1] 0.005737297
> dnorm(450,mean=550,sd=80)
[1] 0.002283114
> dbinom(490,size=1000,prob=0.5)
[1] 0.02065635
> dbinom(50,size=1020,prob=0.25)
[1] 1.327799e-66
> dgeom(3,prob = 0.2)
[1] 0.1024
> pgeom(3,prob=0.2)
[1] 0.5904





2. 추론 통계학  
- 추론 통계는 단순히 숫자를 요약하는 것을 넘어 어떤 값이 발생할 확률을 계산하는 통계 기법이다

(1)통계적인 검정의 개념
- 확률에 관련된 문제에서 논리의 과오를 설득하기는 어렵다. 상대가 그건우연이야 라고 하면 달리 방법이 
  없기 때문에 확률관련 문제에 대해 상대를 설득하기 위해 특별한 기술이 필요한데 그것이 통계적인 검정이다.


귀무가설 : 부정하고 싶은 가설
- 대립가설 : 주장하고 싶은 가설
- 유의수준(p-value)

  구체적인 확률값을 정해두고 그확률을 유의수준이라 하여 그 확률값(5%-0.05)보다 작다면 우연이 아니라
  필연적인 의미가 있다고 하는 의미이다.


(2) 단측검정과 양측검정
 - 검정이란 귀무가설이 잘못됐다고 확률론적으로 설득하는 논법이다. 귀무가설에 대해 대립가설을 어디에 두느냐에
   따라 양측검정과 단측검정으로 분류된다.

   
- 단측검정과 양측검정의 대립가설을 다르다

   귀무가설 : 동전의 앞면과 뒷면이 나올 확률은 같다.(부정하고 싶은 가설)

   단측검정의 예: 뒤면이 나오기 쉽다  
   대립가설: 뒷면이 나올 확률>0.5(주장하고 싶은 가설)

   양측검정의 예: 앞면과 뒷면이 나올 확률은 같지 않다.
   대립가설 : 뒤면이 나올 확률 ≠ 0.5(주장하고 싶은 가설)


- 통계적인 검정의 실례
  초등학교 5학년 어린이들의 15년전 키평균 기록은 148.5, 분산은 7.8 식생활 개선으로 성장에 변화가
  일어났다고 생각하여, 현대 초등 5학년 어린이 100명을 무작위로 추출하여 평균를 확인하여보니 149.2였다
  키의 변화가 있는지를 검정해본다

  귀무가설 : 평균키는 148.5
 
  양측검정의 대립가설 : 키에 변화가 생겼다고 주장하고 싶으므로 평균키는 148.5와 다르다.
  
  단측검정의 대립가설 : 평균키는 148.5보다 크다 

(3) p값
- 귀무가설 아래에서 얻을 수 있는 데이터(검정통계량값-확률변수)이상으로 대립가설에 유리한 데이터를
  얻을 수 있는 확률를  p값이라 한다.
- p값이 유의수준보다 작으면 귀무가설은 기각되고, 대립가설이 채택된다.
- 통계분석 소프트웨어에서 p값을 사용하며 5%의 유의수준과 비교한다.

연습문제1: 토익학원 학습법 가설검정

A 토익 학원의 토익점수 평균은 623점, 표준편차 90으로 알려져 있다. 이 토익학원은 자신들의 새로운 학습법을
적용하면 평균은 700점이 넘는다고 주장한다. 이를 가설검정한다.

귀무가설: 토익점수 평균은 623점이다
대립가설: 토익점수 평균은 700점 이상이다. 

우리는 위쪽 신뢰구간을 넘는지 확인할 것이다. 이렇게 한쪽만 검증하는 것을 단측 검정이라 부른다.'

Step1. 모집단의 신뢰구간(5%~95%)의 확률변수 값을 구한다.


c1 <- qnorm(c(0.05,0.95), mean = 623,sd=90)
> c1
[1] 474.9632 771.0368

- 475~771까지 신뢰할 수 있는 구간이며 단측검정이므로 771이상이지만 5% 구간도 같이 구했다.
  신뢰구간은 90%, 95%, 99%중 하나를 사용하는데 이번에는 90% 신뢰구간을 사용했다.

- 표본의 평균을 구해 값이 이안에 있으면 귀무가설은 기각되지 않고 이영역에서 벗어나면 기각된다.

Step2. 표본데이터 읽어오기


sample <- read.csv("./data/example_test_statistic_ex1_sample.csv")
> head(sample,3)
  X    point
1 1 547.8331
2 2 615.9035
3 3 651.0697
> sample<- sample[-1]
> head(sample,3)
     point
1 547.8331
2 615.9035
3 651.0697

Step3. 모집단의 신뢰구간과 표본의 평균을 비교한다.

> c1
[1] 474.9632 771.0368
> mean(sample$point)
[1] 640.4372

- 표본의 평균이 640.4372로 모집단의 신뢰구간에서 벗어나지 않았기 때문에 귀무가설은 기각되지
  않는다. 표본평균이 771.0368 초과일때 귀무가설은 기각된다.

- 이학원의 주장은 일반화 될 수 없다.

연습문제2: 국어 선생님의 학습법 가설검정

A고등학교의 언어영역 평균 점수는 82점으로 알려져 있다. 국어선생님의 새로운 학습법을 적용한 후
국어선생님은 학생들의 언어영역 평균 점수는 82점이 아니라고 주장한다. 이른 가설 검정으로 검증한다.

귀무가설:영어영역 평균점수는 82점이다.
대립가설:언어영역 평균점수는 82점이 아니다.

이를 검정하기 위해서는 신뢰구간 양쪽을 모두 검증해야 한다. 이런 검증을 양측검정이라 한다.

Step1. 모집단 점수를 불러온다.
- 관측치 3000이며 A고등학교 국어점수 이다.


korea <- read.csv("./data/example_test_statistic_ex2_population.csv")
> head(korea)
  X point
1 1    72
2 2    72
3 3    78
4 4    78
5 5    75
6 6    72

Step2. 필요없는 첫 번째 열을 삭제합니다.
 korea <- korea[-1]
> head(korea)
  point
1    72
2    72
3    78
4    78
5    75
6    72

Step3. 평균과 표준편차를 알아본다.

> mean(korea$point)
[1] 71.985
> sd(korea$point)
[1] 4.071974

Step4. 모집단의 신뢰구간(5%~95%)의 확률변수 값을 구한다.


c1<- qnorm(c(0.05,0.95),mean=mean(korea$point),sd=sd(korea$point))
> c1
[1] 65.2872 78.6828

- 65.2872~78.6828까지 신뢰할 수 있는 구간이다. 표본의 평균이 이 안에 있다면
  귀무가설은 기각되지 않고 이영역을 벗어나면 기각된다.

Step5. 표본의 데이터를 불러온다


sample <- read.csv("./data/example_test_statistic_ex2_sample.csv")
> head(sample,3)
  X point
1 1    85
2 2    83
3 3    74
> sample <- sample[-1]
> head(sample,3)
  point
1    85
2    83
3    74

Step6. 모집단의 신뢰구간과 표본의 평균을 비교한다.

> c1
[1] 65.2872 78.6828
> mean(sample$point)
[1] 80.845

- 모집단의 신뢰구간을 벗어나 있기 때문에 귀무가설은 기각된다.
  이학교 국어 선생님의 학습법의 효과가 있다는 것을 통계적으로 증명했으니 일반화 될 수 있다.

 


(4) 척도(Scale)   
 - 자로 재는 길이의 표준 혹은 평가하거나 측정할 때 의거할 기준

 - 척도는 조사 대상을 측정하기 위해 임의로 부여한 숫자간의 관계를 말한다. 즉 가치판단을 할수있는 정보(data)를 말한다.
 - 명목척도(Nominal Scale) : 상징적인 의미를 숫자로 부여해 분류하는데 사용되는 척도, 덧셈뺄셈 불가능, 비교불가능하다.
 - 서열척도(Ordianl Scale)  : 측정 대상들의 우열 관계를 특정 짓는 척도를 말한다. 순위만 유지되면 수치를 변환해도 문제가 없다. 
                                     덧셈 뺄셈불가능 비교만 가능하다.
 - 등간척도(Interval Scale)  : 
명목척도와 서열척도의 특성을 모두 갖고 있으면서 측정치의 차이가 동일한 간견을 가지는 척도이다.
                                     덧셈뺄셈가능
 - 비율척도(Ratio Scale)     : 비율 분석이 가능한 척도이다. 0의 개념이 있으며, 덧셈뺄셈,곱셈나눗셈이 가능하다.

   
(5) 척도의 비교




(6) 통계적 검정 

 - 통계학에서 통계 결과치에 대한 검정은  t-검정, F-검정, x2-검정 3가지가 있다.
 - t-검정과 F-검정은 비율척도 자료에 적용하며, x2 검정은 명목척도 자료에 적용된다.

1) 통계적 검정의 유형및 적용



2) x2 (
chi_square) 검정
- 가감승제가 불가능한 비연속형 변수 간의 통계적 관련성 유무를 평가하는 분석 방법이다.
- 때로는 가감승제가가 가능한 연속형변수를 비연속형 변수로 변환하여 x2 검정에 적합한 통계적 
  가설검정을 실시 할 수 도 있다.
- 범주형 자료에서 변수들 간의 독립성 여부를 검정하는 방법이라고 할 수 있다.
- x2 검정은 크게 2 x 2 분할표, 2 x m 분할표,  n x m 분할표로 구분된다.
- 2 x 2 :  행과 열의 양분성인 표를 말한다.
- 2 x m : 행 또는 열은 양분성인 자료이지만 다른 행 또는 열의 자료는 세가지 이상의 범주로 분류되는 표를 말한다.
- n x m : 행과 열 모두 세가지 이상의 범주로 분류되는 표를 말한다.



3) 독립성 검정(범주형 변수)
- iris$Species(종)를 복사하여 두 종들의  범주형 변수들의 독립성을 검사한다.
- 2 x m 분할표를 만들고 독립성 검정을 실행한다.
- table()를 이용해 분할표 생성후 summary함수로 x2-검정을 수행한다.


summary(iris)
lapply(as.list(iris),summary)
str(iris)
 
iris$Species2 <- as.factor(sample(1:5,150, replace=T))
sample(1:5,150,replace=T)
 
summary(iris)
lapply(as.list(iris),summary)
str(iris)
 
#독립성 검정
> summary(table(iris$Species,iris$Species2))
Number of cases in table: 150 
Number of factors: 2 
Test for independence of all factors:
Chisq = 4.87, df = 8, p-value = 0.7714

- p-value 값이 5%(0.05) 보다 크므로 두개의  종들의 범주형 변수들은 독립적이다.





(7)통계량 검증 예제 

유의확률은 실제로는 집단간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률을 의미한다.
- 통계분석을 실시한 결과 유의확률이 크게 나타났다면 집단간의 차이가 통계적으로 유의하지 않다고 해석한다.
  이는 실제로 차이가 없더라도 우연에 의해 차이가 관찰될 가능성이 크다는 의미이다.
- 반대로 유의확률이 작다면 집단 간 차이가 통계적으로 유의하다고 해석한다.  우연히 이정도의 차이가 관찰될 가능이 작다,
  즉 우연이라고 보기 힘들다는 의미
이다.



1) 상관분석 - 두변수의 관계성 분석
- 상관분석(Correlation Analysis) : 두 연속 변수가 서로 관련이 있는지 검정하는 통계 분석 기법이다.
- 상관분석을 통해서 도출된 상관계수(Correlation Cofficient)로 두변수가 얼마나 관련되어 있는지, 관련성의 
  정도를 파악할 수 있다
- 상관계수 : -1~1사이에 값을 지니고-1,1에 가까울수록 관련성이 크다, 0에 가까울수록 관련성이 적다.
- 상관계수가 양수면 정비례, 음수면 반비례이다.


- 실업자 수와 개인 소비 지출의 상관관계
- ggplot2 패키지의 economics데이터를 이용해서 unemploy(실업자수)와 pce(개인 소비 지출)간에 통계적으로 유의한
  상관관계가 있는지 알아본다.
- R에 내장된 cor.test()를 이용하면 상관분석을 할 수 있다.


> economics <- as.data.frame(ggplot2::economics)
> cor.test(economics$unemploy, economics$pce)
 
Pearson's product-moment correlation
 
data:  economics$unemploy and economics$pce
t = 18.605, df = 572, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5603164 0.6625460
sample estimates:
      cor 
0.6139997 


- 출력결과를 보면 p-value가 0.05 미만이므로, 실업자 수와 개인 소비 지출의 상관이 통계적으로 유의하다고 할 수 있다.
- 출력결과 맨 아래 'cor'이 상관계수를 의미한다. 상관계수가 양수 0.61이므로, 실업자 수와 개인 소비 지출은 한 변수가 
  증가하면 다른 변수가 증가하는 정비례 관계임을 알 수 있다.



2) 상관행렬 히트맵 만들기
- 여러변수의 관련성을 한 번에 알아보고자 할 경우, 모든 변수의 상관 관계를 나타낸 상관 행렬(Correlation Matrix)을 
  만든다. 상관행렬을 보면 어떤 변수끼리 관련이 크고 적은지 파악할 수 있다.
- R에 내장된 mtcars데이터를 이용해 상관 행렬을 만든다. mtcars는 자동차 32종의 11개 속성에 대한 정보를 담고 있다.
cor()를 이용하여 상관 행렬을 만든후 소수점 셋째 자리에서 반올림해 출력한다.


> 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
 
> car_cor <- cor(mtcars)  # 상관행렬 생성
 
> round(car_cor, 2)       # 소수점 셋째 자리에서 반올림해서 출력
        mpg   cyl   disp    hp  drat    wt  qsec    vs    am  gear  carb
mpg   1.00 -0.85 -0.85 -0.78  0.68 -0.87  0.42  0.66  0.60  0.48 -0.55
cyl     -0.85  1.00  0.90  0.83 -0.70  0.78 -0.59 -0.81 -0.52 -0.49  0.53
disp   -0.85  0.90  1.00  0.79 -0.71  0.89 -0.43 -0.71 -0.59 -0.56  0.39
hp     -0.78  0.83  0.79  1.00 -0.45  0.66 -0.71 -0.72 -0.24 -0.13  0.75
drat    0.68 -0.70 -0.71 -0.45  1.00 -0.71  0.09  0.44  0.71  0.70 -0.09
wt     -0.87  0.78  0.89  0.66 -0.71  1.00 -0.17 -0.55 -0.69 -0.58  0.43
qsec   0.42 -0.59 -0.43 -0.71  0.09 -0.17  1.00  0.74 -0.23 -0.21 -0.66
vs      0.66 -0.81 -0.71 -0.72  0.44 -0.55  0.74  1.00  0.17  0.21 -0.57
am     0.60 -0.52 -0.59 -0.24  0.71 -0.69 -0.23  0.17  1.00  0.79  0.06
gear   0.48 -0.49 -0.56 -0.13  0.70 -0.58 -0.21  0.21  0.79  1.00  0.27
carb  -0.55  0.53  0.39  0.75 -0.09  0.43 -0.66 -0.57  0.06  0.27  1.00



- 위의 출력된 상관행렬을 보면 mtcars의 11개 변수가 얼마나 서로 관련되어 있는지 알수 있다.
- mpg(연비)행과 cyl(실린더 수)열이 교차되는 부분을 보면 상관계수가 -0.85이므로, 연비가 높을수록 실린더 수가 
  적은 경향이 있다는 것을 알 수 있다.
- cyl(실린더 수)과 wt(무게)의 상관계수가 0.78이므로, 실린더 수가 많을수록 자동차가 무거운 경향이 있다는 것을 알 수 있다.


 


- 상관행렬을 많은 숫자로 구성되기 때문에 변수들의 관계를 파악하기 힘들때 corrplot패키지의 corrplot()를 이용해 상관행렬
  히트맵을 만들어 변수들의 관계를 쉽게 파악할 수 있다.


install.packages("corrplot")
library(corrplot)
 
corrplot(car_cor)
 



- 출력된 히트맵을 보면 상관계수가 클수록 원의 크기가 크고 색깔이 진하다.
- 상관계수가 양수면 파란색, 음수면 빨간색 계열로 표현된다.


- corrplot()의 파라미터를 이용하여 그래프 형태를 다양하게 바꿀수 있다.
  mothod = "number"를 지정하면 원 대신 상관계수를 표현되게 설정할 수 있다.


corrplot(car_cor)
 
corrplot(car_cor, method = "number")


1. 통계학의 종류 
(1) 기술 통계학
  - 데이터를 요약해 설명하는 통계기법이다.
  - 자료를 분석하려면 수많은 숫자와 문자의 이면에 있는 경향이나 특징을 파악해야한다.
    이를 위해 수집한 자료를 정리해 표로 나타내야 하는데 이를 기술 통계학이라 한다. 
  - 기술통계학에서는 자료정리를 표로 나타내며 자료의 제시는 그래프로 표현한다.

  1) 비율
  - 전체에서 개개의 요소가 어느 정도의 비율을 차지하는가를 보면 그 요소의 중요성이나 영향력을 알 수있다.
  - 주로 백분율로 나타낸다. 띠그래프, 누적 막대그래프, 원그래프로 항목들을 표현한다.
 
  
  ※ 띠그래프 


 
?mtcars

attach(mtcars)
par(mfrow=c(2,2))
stripchart(hp) #method="overplot" (디폴트)
stripchart(gear, method="stack", col="blue")
stripchart(gear, method="jitter")
stripchart(hp ~ gear)
par(mfrow=c(1,1))




 ※ 누적 막대그래프

counts <- table(mtcars$cyl, mtcars$gear)
counts
 
barplot(counts, col=c("blue","red","yellow"),legend=rownames(counts),xlab="Number of Gears")

 



 ※ 원그래프
    

b<- c(2,4,5,7,12,14,16)
pie(b, main="My PieChart",
    col=rainbow(length(b)),
    labels = c("Mon","Tue","Wed","Thu","Tri","Sat","Sun"))




-----------------------------------------------------------------------------------------------------------------------------------------
install.packages("plotrix")

library(plotrix)
slices <- c(10,12,4,16,8)
lbls<- c("US","UK","Australia","Germary","France")
#3차원 파이 차트
pie3D(slices,
      labels=lbls,
      explode=0.1, #조각간격
      main="Pie Chart of Countries")
 



---------------------------------------------------------------------------------------------------------------------------------------------


radial.pie(slices,labels=lbls, radlab = T)








  2)상관 관계
  - 자료의 항목이 2개 이상인 항목을 이용하면 조사항목 간의 관계를 파악할 수 있다. 
  
- 두 변량 중 한 쪽이 증가함에 따라, 다른 한 쪽이 증가 또는 감소할 때 두 변량 관계를 말한다
  - 양의 상관 : 2개의 자료항목에서 한쪽이 증가하면 다른쪽도 증가하는 관계를 양의 상관이라한다.
  - 음의 상관 : 2개의 자료항목에서 한쪽이 증가하면 다른쪽은 감소하는 관계를 음의 상관이라한다.
  - 
산포도, 상관도로 항목들을 표현한다.





  3)분포(분산)
  - 많은요소로 이루어진 자료에서 그 흩어진 상태를 정리해 표로 나타낸 것이 도수분포표이다. 그 표를 그래프로 
    나타낸것이 히스토그램이다.
  - 분산된 데이터를 비교하는 데 편리한 것이 상자 수염 그림이다.
  - 측정값을 작은 순서로 늘어 놓았을때 전체의 작은 쪽부터 25%의 값을 1사분위수, 50%의 값을 2사분위(중간값),
    75%의 값을 3사분위수라 하고 합해서 사분위수라 한다.

 ※ 히스토그램
 

bmi<- rnorm(n=1000,m=25,sd=2)
hist(bmi,freq=FALSE) #freq=FALSE는 y축을 상대도수(밀도)로 함



 
 
hist(bmi,freq = F,xlab ="Body Mass Index",main="Distribution of Body Mass Index",
     col="lightgreen", xlim=c(15,35), ylim=c(0, .20))




 

 ※ 상자 수염 그림


boxplot(mtcars$hp, ylab="HOrse Power")

f<-fivenum(mtcars$hp) #다섯-숫자요약(최솟,최댓,중앙,제1사분위,제3사분위)
text(rep(1.3,5),f,labels=c("최솟값","제1사분위수","중앙값","제3사분위수","최대값"))
 


    



 

  

 4)자료의 대표값
  - 평균값 : 자료의 데이터를 평평하게 고른 값이 평균값이다.
  - 중앙값 : 값을 크기순으로 늘어놓았을때 가장 중간에 오는 수치를 말한다.
                데이터 크기가 짝수일때는 한가운데 2개를 취하고 이를 2로 나눈 수치가 중앙값이다.
   
    1, 2, 3, 4, 5 => 3(중앙값)
    1, 2, 3, 4, 5, 6 => 3+4/2 = 7/2 = 3.5(중앙값) 
 
  
- 최댓값과 최솟값 : 자료 중 가장 큰 값과 가장 작은 값이다.
  - 최빈값 : 가장 많이 관찰된 값
  - 표준편차와 사분위수 범위 : 자료들이 퍼저 있는 정도이다.



5)편차와 분산

- 편차 : 데이터에서 평균값을 뺀 값으로 자료 속의 각 데이터가 어느 정도 평균값에서 벗어났는지를 나타낸다.
          편차의 합과 평균은 항상 0인 특성을 가진다. 이런 성질을 이용하여 자유도란 개념을 생각해 볼 수 있다.

- 자유도 : n개의 자료가 있을 때 그들의 편차 중 (n-1)개는 원하는 값을 마음대로 가질 수 있는데 이를 자유도라 한다.

  편차1 -> 10, 편차2-> 20, 편차3-> ? 일때 ? 값은 편차의 합이 0이라는 특성을 이용하여 -30을 가질수 밖에 없다.
  이처럼 편차1,편차2는 아무런 값을 가져도 되지만, 편차3은 특정한 값이 되다.
  

편차 제곱의 평균을 통계에선 분산이라 하며, 분산의 제곱근을 표준편차라 한다.

- 분산 : 흩어진 정도를 표현하는 지표이다.


6) 표준편차
- 표준편차 :  통계에서 분산의 제곱근을 표준편차라 한다.
- 평균 -> 편차(데이터-평균) -> 분산(편차 제곱의 평균) -> 표준편차(분산의 제곱근)


# 개별 관찰값과 평균과의 차이에 대한 평균(편차)
height <- c(164, 166, 168, 170, 172, 174, 176)
( height.m <- mean( height ) )
( height.dev <- height - height.m )
sum( height.dev )

-------------------------------------------------------

> height <- c(164, 166, 168, 170, 172, 174, 176)
> ( height.m <- mean( height ) ) #평균
[1] 170
> ( height.dev <- height - height.m ) #관찰값 - 평균 :편차
[1] -6 -4 -2  0  2  4  6
> sum( height.dev )  #편차의 합계는 항상 0 :편차이 특성
[1] 0


# 편차 제곱의 평균(분산)
( height.dev2 <- height.dev ^ 2 ) #편차의 제곱
sum( height.dev ^ 2 ) / length( height.dev ) #편차 제곱의 평균(분산) 
mean( height.dev ^ 2 ) #편차 제곱의 평균(분산)
--------------------------------------------------------
> ( height.dev2 <- height.dev ^ 2 )
[1] 36 16  4  0  4 16 36
> sum( height.dev ^ 2 ) / length( height.dev )
[1] 16
> mean( height.dev ^ 2 )
[1] 16
 
 
표준편차(분산의 제곱근)
sqrt( mean( height.dev ^ 2 ) ) #분산의 제곱근 (표준편차)
-----------------------------------------------------------
> sqrt( mean( height.dev ^ 2 ) )
[1] 4
 
 
# R 함수를 이용한 분산과 표준편차
var( height )
sd( height )
-------------------------------------------------------------

> var( height )

[1] 18.66667
> sd( height )
[1] 4.320494


※ 위의 편차제곱의 평균(분산)값과 R의 var()의 분산 결과값이 다르다. 이유는,
   R에서 var()의 분산계산은 모집단의 특성을 유추하는 표본의 특성이 갖춰야 할 중요한 성질을 만족하기 위해 분산(or 표준편차)의 계산에서
   표본의 갯수가 아닌 자유도로 나누기 때문이다. n이 아닌 (n-1)로 나누었다.

- 표준편차의 크기비교를 통해 자료의 퍼진 정도를 비교할 수 있다.
- 두 자료에서 표준편차가 작은 자료(점선)는 평균을 중심으로 표준편차가 큰 경우보다 몰려 있고 높이가 높은 반면,
  표준편차가 큰 자료(실선)가 평균을 중심으로 퍼진 정도가 더 크다 (= 자료의 변동 폭이 더 크다)






7) 변동계수

- 앞서 두자료의 단위가 동일하고 평균이 같은 경우이기에 직접 비교가 가능하지만, 두자료의 단위가 다르거나 평균이 다른 자료들의
  퍼진 정도를 비교할 경우 변동계수를 사용한다.
- 평균과 표준편차가 서로 다른 두 데이터를 비교하기 위해 만들어 진 개념이다. (예:키,몸무게 예: 커피, 주스 판매량)
- 변동계수는 평균에 대한 표준편차의 비율로서 변동계수가 클수록, 즉 표준편차가 표본평균에 비해 클수록 자료의 퍼진 정도가 더 
  크다고 한다.

- 변동 계수(coefficient of variation, C.V.)는 표준 편차()를 산술 평균(
)으로 나눈 것이다
 
     
- 변동계수 구하기
  커피 판매량과 주스판매량 자료로 부터 표준편차를 구하고, 어떤 음료가 판매량의 변동이 더 큰지 알아보기 위해 변동계수를 구한다.


# 데이터에 결측치가 포함되어 있을 경우 R NA에 대응시킬 값을 지정한다.
# 기본값은 "NA", "na"로 저장된 문자열들은 R NA로 저장된다. - na.strings="na"
ranicafe <- read.csv("./data/cafedata.csv", header=T, na.strings="na", stringsAsFactors=FALSE )
ranicafe <- na.omit(ranicafe)
str(ranicafe)
# 변동계수
rc <- ranicafe$Coffees
rj <- ranicafe$Juices
( rc.m <- mean( rc ) )
( rc.sd <- sd( rc ) )
( rj.m <- mean( rj ))
( rj.sd <- sd( rj ) )
( rc.cv <- round( rc.sd / rc.m, 3) )
( rj.cv <- round( rj.sd / rj.m, 3) )

-----------------------------------------------------------
> ( rc.m <- mean( rc ) )
[1] 21.51064
> ( rc.sd <- sd( rc ) )
[1] 11.08048
> ( rj.m <- mean( rj ))
[1] 4.93617
> ( rj.sd <- sd( rj ) )
[1] 3.703138
> ( rc.cv <- round( rc.sd / rc.m, 3) )
[1] 0.515
> ( rj.cv <- round( rj.sd / rj.m, 3) )
[1] 0.75

- 위내용은 주스판매량의 변동계수가 커피판매량의 변동계수보다 크다.



8) 표준화 

기준이 다른 데이터를 비교하기 위해서 표준화를 한다.
- 예를 들어 A대학에 모든 학생의 토익점수와 토플점수에 대한 두 시험을 비교하려고 할대 하나는 총점이 990이고
  하나는 120점이기 때문에 두 시험을 비교하기 쉽지 않다.
- 이때 비교하기 위한 방법이 두 시험의 점수를 표준화 시키는 것이다.
- 표준화 하는 방법은 평균을 0으로 이동하여 모든 값도 같이 움직이면서 0을 기준으로 데이터들이 위치하게 된다.
  그다음 각각의 값을 표준편차로 나눠준다. 그러면 표준편차는 1이 된다.
이렇게 평균이 0, 표준편차가 1로 만드는 것을 표준화라 부른다.
- 만점이 서로 달라 평균이 전혀 다른 두 시험을 비교하고 싶을 때 두 데이터를 표준화 하면 두 데이터 모두 평균은 0이 
  되며 서로 달랐던 표준편차는 1이 되기 때문에 서로 비교가 가능해진다.

 
-z 점수 표준화 : (특정값-평균)/표준편차

- 모든 데이터의 원소에 상응하는 z점수를 구할때  R에서 scale함수
(벡터,행렬,데이터프레임 에서 작동함)를 사용한다.

#붓꽃의 꽃받침 길이의 z점수(표준화) 구하기

scale(iris$Sepal.Length)

             :
             :


[141,]  1.03453895
[142,]  1.27606556
[143,] -0.05233076
[144,]  1.15530226
[145,]  1.03453895
[146,]  1.03453895
[147,]  0.55148575
[148,]  0.79301235
[149,]  0.43072244
[150,]  0.06843254
attr(,"scaled:center")
[1] 5.843333
attr(,"scaled:scale")
[1] 0.8280661

- 위의 center는 평균, scale은 표준편차를 나나타내다.
- 특정값을 정규화 하려면 다음과 같이 벡터화된 연산을 사용한다.

> iris$Sepal.Length[150]
[1] 5.9
> (5.9-mean(iris$Sepal.Length))/sd(iris$Sepal.Length)
[1] 0.06843254




(2) summary 함수 
- summary함수는 데이터의 요약된 통계정보( 벡터,  행렬, 요인, 데이터 프레임등에 대한 유용한 통계량)를 보여준다.

- iris는 붓꽃의 3가지 종(setosa, versicolor, virginica)에 대해 꽃받침(sepal)과 꽃잎(petal)의 길이를 정리한 데이터다.
  R에 기본으로 내장되어 있고, 이해하기 쉬우며 크기가 작은 데이터다. 


> summary(iris)

  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       Species  
 setosa    :50  
 versicolor:50  
 virginica :50  

- 벡터 요약: 사분위수, 중앙값, 평균
- 행렬 요약: 열 단위로 표시
- 요인 요약: 수준별 도수 표시
- 데이터 프레임 요약: 기능(벡터, 행렬, 요인)을 모두 사용 가능

 lapply(x,fun,..) : list apply, 리스트에 지정한 함수를 적용
   x : 대상 리스트 객체
   fun:적용할 함수명
   ..:함수에서 사용할 인수

> lapply(as.list(iris),summary)
$Sepal.Length
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.300   5.100   5.800   5.843   6.400   7.900 
 
$Sepal.Width
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  2.000   2.800   3.000   3.057   3.300   4.400 
 
$Petal.Length
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.000   1.600   4.350   3.758   5.100   6.900 
 
$Petal.Width
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.100   0.300   1.300   1.199   1.800   2.500 
 
$Species
    setosa versicolor  virginica 
        50         50         50 


+ Recent posts