본문 바로가기
공부/IT-R프로그래밍

R프로그래밍 강좌 - [21][추론통계학활용]교육수준과 흡연정도의 상관 관계,음료들의 유사성 분석

by 썸볼 2018. 1. 19.
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)



댓글