머신러닝(Machine Learning)

: 경험을 통해 자동으로 개선하는 컴퓨터 알고리즘의 연구로 인공지능의 한 분야로 간주합니다. 또한 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야입니다. 가령, 기계 학습을 통해서 수신한 이메일이 스팸인지 아닌지를 구분할 수 있도록 훈련할 수 있습니다. 

 

- 머신러닝 에서의 일반화는 훈련 이후 새롭게 들어온 데이터를 정확히 처리할 수 있는 능력을 말하기도 합니다. 

 

알고리즘의 유형 

 

① 지도 학습(Supervised Learning) 

: 사람이 교사로서 각각의 입력(x)에 대해 레이블(y)을 달아놓은 데이터를 컴퓨터에 주면 컴퓨터가 그것을 학습하는 것 입니다. 사람이 직접 개입하므로 정확도가 높은 데이터를 사용할 수 있다는 장점이 있지만, 대신에 사람이 직접 레이블을 달아야 하므로 인건비 문제가 있습니다. 따라서 구할 수 있는 데이터양도 적다는 문제가 있습니다. 

 

– 인간 개입에 의한 분석 방법
– 종속변수(y) 존재 : 입력 데이터에 정답 포함
– 분석방법 : 가설검정(확률/통계) → 인문.사회.심리 계열(300년)
– 분석유형 : 회귀분석, 분류분석, 시계열 분석 → 추론통계 기반(모집단에 대한 결과 분석)

 

 

- 분류(Classification)

: 레이블 y가 이산적(Discrete)인 경우 즉, y가 가질 수 있는 값이 [0,1,2 ..]와 같이 유한한 경우 분류, 혹은 인식 문제라고 합니다 일상에서 가장 접하기 쉬우며, 연구가 많이 되어있고, 기업들이 가장 관심을 가지는 문제 중 하나 입니다. 이런 문제들을 해결하기 위한 대표적인 기법들로는 로지스틱 회귀법, KNN, 서포트 벡터 머신 (SVM), 의사 결정 트리 등이 있습니다. 

- 분류분석 : 고객 이탈분석(번호이동, 반응고객 대상 정보 제공)

 

 

- 회귀(Regression)

: 레이블 y가 실수인 경우 회귀문제라고 부릅니다. 데이터들을 쭉 뿌려놓고 이것을 가장 잘 설명하는 직선 하나 혹은 이차함수 곡선 하나를 그리고 싶을 때 회귀기능을 사용합니다. 잘 생각해보면 데이터는 입력(x)와 실수 레이블(y)의 짝으로 이루어져있고, 새로운 임의의 입력(x)에 대해 y를 맞추는 것이 바로 직선 혹은 곡선이므로 기계학습 문제입니다. 통계학의 회귀분석 기법 중 선형회귀 기법이 이에 해당하는 대표적인 예입니다. 

- 회귀분석 : 인과관계 예측(회귀분석 - p값 제공)

 

 

 

② 비지도 학습(Unsupervised Learning) 

: 사람 없이 컴퓨터가 스스로 레이블 되어 있지 않은 데이터에 대해 학습하는 것으로 y없이 x만 이용해서 학습하는 것 입니다. 정답이 없는 문제를 푸는 것이므로 학습이 맞게 됐는지 확인할 길은 없지만, 인터넷에 있는 거의 모든 데이터가 레이블이 없는 형태로 있으므로 앞으로 기계학습이 나아갈 방향으로 설정되어 있습니다. 통계학의 군집화와 분포 추정 등의 분야와 밀접한 관련이 있습니다 .

 

– 컴퓨터 기계학습에 의한 분석 방법 
– 종속변수(y) 없음 : 입력 데이터에 정답 없음 
– 분석방법 : 규칙(패턴분석) → 공학.자연과학 계열(100년) 
– 분석유형 : 연관분석, 군집분석 → 데이터마이닝 기반

 

 

- 군집화(Clustering)

: 데이터가 쭉 뿌려져 있을 때 레이블이 없다고 해도 데이터간 거리에 따라 대충 두 세개의 군집으로 이렇게 x만 가지고 군집을 학습하는 것을 군집화 라고 합니다. 

- 군집분석 : 그룹화를 통한 예측(그룹 특성 차이 분석-고객집단 이해)

 

 

분포 추정(Underlying Probability Density Estimation)

: 군집화에서 더 나아가서, 데이터들이 쭉 뿌려져 있을 때 얘네들이 어떤 확률 분포에서 나온 샘플들인지 추정하는 문제를 분포 추정이라고 합니다. 

 

 

지도 학습 vs 비지도 학습 

분류 지도 학습 비지도 학습
주관 사람의 개입에 의한 학습 컴퓨터에 의한 기계학습
기법 확률과 통계 기반 추론 통계 패턴분석 기반 데이터 마이닝 
유형 회귀분석, 분류분석(y변수 존재) 군집분석, 연관분석(y변수 없음)
분야  인문, 상회 계열 공학, 자연 계열

 

 

③ 준지도 학습(Semisupervised learning)

: 레이블이 있는 데이터와 없는 데이터 모두를 활용해서 학습하는 것인데, 대개의 경우는 다수의 레이블 없는 데이터를 약간의 레이블 있는 데이터로 보충해서 학습하는 종류의 문제를 다룬다.

 

 

④ 강화 학습(Reinforcement Learning)

: 강화학습은 현재의 상태(State)에서 어떤 행동(Action)을 취하는 것이 최적인지를 학습하는 것입니다. 

 

상관관계 분석(Correlation Analysis) - 관련성 

: 변수 간 관련성 분석 방법으로 하나의 변수가 다른 변수와 관련성 분석하는 방법입니다.

  ex) 광고비와 매출액 사이의 관련성 등 분석

 

 

 

* 상관분석 자세한 설명 

더보기

확률론과 통계학에서 두 변수간에 어떤 선형적 관계를 갖고 있는 지를 분석하는 방법이다. 두변수는 서로 독립적인 관계로부터 서로 상관된 관계일 수 있으며, 이때 두 변수간의 관계의 강도를 상관관계(Correlation, Correlation coefficient)라 한다. 상관분석에서는 상관관계의 정도를 나타내는 단위로 모상관계수 ρ를 사용한다. 상관관계의 정도를 파악하는 상관계수(Correlation coefficient)는 두 변수간의 연관된 정도를 나타낼 뿐 인과관계를 설명하는 것은 아니다. 두 변수간에 원인과 결과의 인과관계가 있는지에 대한 것은 회귀분석을 통해 인과관계의 방향, 정도와 수학적 모델을 확인해 볼 수 있다.


상관 관계 분석 중요사항

– 회귀분석 전 변수 간 관련성 분석(가설 검정 전 수행)
– 상관계수 -> 피어슨(Pearson) R계수 이용 관련성 유무

 

 

상관관계 분석척도 :
피어슨 상관계수(Pearson correlation coefficient : r)

- 상관계수 r과 상관관계 정도

 

기술 통계량 구하기 

 

- 데이터 가져오기 

result <- read.csv("C:/workspaces/R/data/product.csv", header=TRUE)
head(result) # 친밀도 적절성 만족도(등간척도 - 5점 척도)

- 출력값 - 
       제품_친밀도 제품_적절성 제품_만족도
1           3           4           3
2           3           3           2
3           4           4           4
4           2           2           2
5           2           2           2
6           3           3           3

 

- 기술 통계량

summary(result) # 요약통계량

- 출력값 - 
 제품_친밀도     제품_적절성     제품_만족도   
 Min.   :1.000   Min.   :1.000   Min.   :1.000  
 1st Qu.:2.000   1st Qu.:3.000   1st Qu.:3.000  
 Median :3.000   Median :3.000   Median :3.000  
 Mean   :2.928   Mean   :3.133   Mean   :3.095  
 3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.000  
 Max.   :5.000   Max.   :5.000   Max.   :5.000  
 
 sd(result$제품_친밀도); sd(result$제품_적절성); sd(result$제품_만족도)
 
 - 출력값 - 
[1] 0.9703446
[1] 0.8596574
[1] 0.8287436

sd 표준편차 : 평균을 기준으로 분포되어있는 정도를 보여줍니다. 

 

 

상관계수(coefficient of correlation) : 두 변량 X,Y 사이의 상관관계 정도를 나타내는 수치(계수)

cor(result$제품_친밀도, result$제품_적절성) 출력값 :  0.4992086 -> 다소 높은 양의 상관관계
cor(result$제품_친밀도, result$제품_만족도) 출력값 :  0.467145 -> 다소 높은 양의 상관관계

 

 전체 변수 간 상관계수 보기

cor(result, method="pearson") 

 

방향성 있는 색상으로 표현

install.packages("corrgram")   
library(corrgram)
corrgram(result) # 색상 적용 - 동일 색상으로 그룹화 표시

 

수치(상관계수) 추가(위쪽) 

corrgram(result, upper.panel=panel.conf)

 

수치(상관계수) 추가(아래쪽)

corrgram(result, lower.panel=panel.conf)

 

차트에 밀도 곡선, 상관성, 유의확률(별표) 추가 

install.packages("PerformanceAnalytics") 
library(PerformanceAnalytics)

 

- 상관성, p값(*), 정규분포 시각화 - 모수 검정 조건 

chart.Correlation(result, histogram=, pch="+") 

 

 spearman : 서열척도 대상 상관계수

cor(result, method="spearman") 

 

https://link.coupang.com/a/bsbQYm

 

햇반 백미밥, 200g, 15개

COUPANG

www.coupang.com

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

요인분석(Factor Analysis) - 예측분석

: 여러개의 서로 관련이 있는 변수들로 측정된 자료에서 그 변수들을 설명할 수 있는 새로운 공통변수를 파악하는 통계적 분석방법입니다. 유사성을 띈 데이터의 축약을 목적으로 하는 분석방법이라고 할 수 있습니다. 

 

 

 

 요인분석의 특징 

 

1) 다수의 변수들을 대상으로 변수들 간의 관계 분석(타당성 분석) 

 

2) 공통 차원으로 축약하는 통계기법(변수 축소) - 데이터 축소 

    - 유사성을 가진 데이터들을 하나로 묶음. 

 

 

 요인분석의 종류(개입의 여부로 나눔)


1) 탐색적 요인분석 : 요인분석을 할 때 사전에 어떤 변수들끼리 묶어야 한다는 전제를 두지 않고 분석하는 방법(개입X)

                          - 변수 압축이 목적(주성분분석, 주요인분석, 최대우도요인분석 ...)


2) 확인적 요인분석 : 요인분석을 할 때 사전에 묶여질 것으로 기대되는 항목끼리 묶여지는지를 분석하는 방법(개입O)

                          - 어떤 가설이나 모델의 검증이 목적

 

 

요인분석의 방법

 

1) 변수간의 상관행렬로부터 공통요인을 도출

2) 도출된 공통요인을 이용해서 변수간의 상관관계를 설명

3) 요인부하량(factor loading)은 ±0.3 이상이면 유의하다고 봄.

 

 

● 요인의 수와 유의성 판단 기준

 

- 상관 계수 행렬 R의 고유값이 1이상인 경우 채택하며, 요인의 유의성은 다음의 기준을 따른다.

- 수학적 근거 보다는 통상적으로 개체수 n>= 50인 경우 절대값 기준으로

   요인부하값 > 0.3 : 유의함  

   요인부하값 > 0.4 : 좀 더 유의함

   요인부하값 > 0.5 : 아주 유의함

 

 

요인분석의 목적 


1) 자료의 요약 : 변인을 몇 개의 공통된 변인으로 묶음 (주성분 분석과 비슷)

                    - 같은 개념을 측정하는 변수들이 동일한 요인으로 묶이는지 확인


2) 변인 구조 파악 : 변인들의 상호관계 파악(독립성 등) 


3) 불필요한 변인 제거 : 중요도가 떨어진 변수 제거 


4) 측정도구 타당성 검증 : 변인들이 동일한 요인으로 묶이는지 여부를 확인 / ex ) 설문의 질문의 타당성 

                                 - 회귀분석이나 판별분석의 설명변수 선택

 

 

전제조건 

 

- 등간척도 or 비율척도, 정규분포, 관찰치 상호독립적/분산 동일  

- 하위요인으로 구성되는 데이터 셋이 준비되어 있어야 함.

- 분석에 사용되는 변수는 등간척도나 비율척도이여야 하며, 표본의 크기는 최소 50개 이상이 바람직함 【중심극한정리】

- 요인분석은 상관관계가 높은 변수들끼리 그룹화하는 것이므로 변수들 간의 상관관계가 매우 낮다면(보통 ±3 이하)

  그 자료는 요인 분석에 적합하지 않음. 

- 변수간에 높은 상관관계가 있어야 함.

- 최초 요인 추출 단계에서 얻은 고유치를 스크리 차트로 표시했을 때 한 군데 이상 꺽이는 곳이 있어야 함.

- 모상관 행렬이 단위 행렬이라는 가설이 기각되어야 함. (KMO and Bartleet's 검정)

 

 

요인분석 결과에 대한 활용 방안 


- 서로 밀접하게 관련된 변수들을 합치거나 중복된 변수를 제거하여 변수를 축소
- 변수들 간의 연관성 또는 공통점 탐색 
- 요인점수 계산으로 상관분석, 회귀분석의 설명변수로 이용 

 

 

* 요인 추가정보 

더보기

요인

factor 범주형 변수(요인형 변수)에서 가질 수 있는 값을 범주라고 합니다. . 

ex) 성별 - 남, 여 

 

- factor의 자료형 = numeric 

why :  요인이 가지는 개수를 요인이라는 자료형에서 관리하고 그것을 자료형인 numeric(값이 가질 수 있는 범위) 으로보여줍니다. 

 

ex ) factor의 자료형(=numeric) 

 

gender <- c('man','woman','woman','man','woman')
mode(gender) 출력값 : character

요인형 변환 

as.factor() 함수 이용 범주(요인)형 변환

Ngender <- as.factor(gender)

mode(Ngender) 출력값 :  "numeric"

 

대표적인 요인형으로 관리하는 요소  : 명목척도, 서열척도 

+ 요인 ) 순서를 부여할 수 있다. ( default  = 순서 x (알파벳 순서) ) 

 

1. 공통요인으로 변수 정제 

 

- 변수와 데이터프레임 생성 

s1 <- c(1, 2, 1, 2, 3, 4, 2, 3, 4, 5) # s1 : 자연과학
s2 <- c(1, 3, 1, 2, 3, 4, 2, 4, 3, 4) # s2 : 물리화학
s3 <- c(2, 3, 2, 3, 2, 3, 5, 3, 4, 2) # s3 : 인문사회 
s4 <- c(2, 4, 2, 3, 2, 3, 5, 3, 4, 1) # s4 : 신문방송
s5 <- c(4, 5, 4, 5, 2, 1, 5, 2, 4, 3) # s5 : 응용수학
s6 <- c(4, 3, 4, 4, 2, 1, 5, 2, 4, 2) # s6 : 추론통계

name <-1:10 # 각 과목 문항 이름

subject <- data.frame(s1, s2, s3, s4, s5, s6)

subject

-출력값- 
  s1 s2 s3 s4 s5 s6
1   1  1  2  2  4  4
2   2  3  3  4  5  3
3   1  1  2  2  4  4
4   2  2  3  3  5  4
5   3  3  2  2  2  2
6   4  4  3  3  1  1
7   2  2  5  5  5  5
8   3  4  3  3  2  2
9   4  3  4  4  4  4
10  5  4  2  1  3  2

str(subject) 

- 출력값 - 
'data.frame':	10 obs. of  6 variables:
 $ s1: num  1 2 1 2 3 4 2 3 4 5
 $ s2: num  1 3 1 2 3 4 2 4 3 4
 $ s3: num  2 3 2 3 2 3 5 3 4 2
 $ s4: num  2 4 2 3 2 3 5 3 4 1
 $ s5: num  4 5 4 5 2 1 5 2 4 3
 $ s6: num  4 3 4 4 2 1 5 2 4 2
 
summary(subject)

- 출력값 -
 s1             s2             s3            s4             s5             s6     
 Min.   :1.00   Min.   :1.00   Min.   :2.0   Min.   :1.00   Min.   :1.00   Min.   :1.0  
 1st Qu.:2.00   1st Qu.:2.00   1st Qu.:2.0   1st Qu.:2.00   1st Qu.:2.25   1st Qu.:2.0  
 Median :2.50   Median :3.00   Median :3.0   Median :3.00   Median :4.00   Median :3.5  
 Mean   :2.70   Mean   :2.70   Mean   :2.9   Mean   :2.90   Mean   :3.50   Mean   :3.1  
 3rd Qu.:3.75   3rd Qu.:3.75   3rd Qu.:3.0   3rd Qu.:3.75   3rd Qu.:4.75   3rd Qu.:4.0  
 Max.   :5.00   Max.   :4.00   Max.   :5.0   Max.   :5.00   Max.   :5.00   Max.   :5.0  
 
 View(subject)

-- R은 4.0, 3.0, 4.0, 4.0, 2.0 으로 저장, 자료형 = numeric 

 

 

- 변수의 주요 성분분석 

pc <- prcomp(subject) 
summary(pc)

-출력값- 
                                   PC1    PC2     PC3     PC4     PC5     PC6
표준편차 : Standard deviation     2.389 1.5532 0.87727 0.56907 0.19315 0.12434
분산비율 : Proportion of Variance 0.616 0.2603 0.08305 0.03495 0.00403 0.00167
누적비율 : Cumulative Proportion  0.616 0.8763 0.95936 0.99431 0.99833 1.00000

plot(pc)

누적 비율(Cumulative Proportion) :

pc1 = 1개 그룹(분산 비율 : pc1) = 62% - 손실 38%

pc2 = 2개 그룹(분산 비율 : pc1 + pc2) = 88% - 12% 

pc3 = 3개 그룹(분산 비율 : pc1 + pc2 + pc3) = 96% - 손실 4%

pc4 = 4개 그룹(분산 비율 : pc1 + pc2 + pc3 + pc4) = 99.4% - 손실 0.6%

pc5 = 5개 그룹(분산 비율 : pc1 + pc2 + pc3 + pc4 + pc5) = 99.8% - 손실 0.2% 

pc6 = 6개 그룹(분산 비율 : pc1 + pc2 + pc3 + pc4 + pc5 + pc6) = 100% - 손실 0%

 

3개의 구룹으로 묶음 - (자연과학+물리화학) + (인문사회+신문방송) + 응용수학+추론통계) = 96%

 

해석 : 3개의 그룹으로 묶으면 96% 의미를 가져갈 수 있다(절대성의 의미X - 무조건 3그룹으로 묶을 필요X) 

- 분산비율 : Proportion of Variance 시각화 

 

 

- 고유값으로 요인 수 분석 

en <- eigen(cor(subject))
# $values : 고유값, $vectors : 고유벡터 , cor : 상관 변수간에 상관 계수를 계산 - 상관분석

names(en) 출력값 :  "values"  "vectors"

en$values # $values : 고유값(스칼라) 보기 - 선택의 근거를 만듦
출력값 : [1] 3.44393944 1.88761725 0.43123968 0.19932073 0.02624961 0.01163331

plot(en$values, typ="o") # 고유값을 이용한 시각화 

결론 : index 3까지 급현한 변화를 가지는데, 3개의 요인으로 remodeling 하면 최소의 오차를 가져가면서 성분에 대한 것을 가져갈 수 있을 것이다. 

 

- 무조건 이렇게 설정할 필요 x , 판단은 사람에 따라 다를 수 있습니다. 

 

 

- 변수 간의 상관관계 분석과 요인분석   

cor(subject) # 상관계수의 값을 피드백 

cor : 상관 변수간에 상관 계수를 계산

 

- 연관성에 대한 수치화 ( 값이 1에 가까울수록 연관성이 크다 ) 

상관도(유사성)가 높은 그룹 : s1 - s2 = 86.6% , s3 - s4 = 92.3% , s5 - s6 = 87.3% 

 

결론 : 3개의 그룹으로 합치는 것이 좋을 것이다. 

 

 

요인분석 : 요인회전법 적용(varimax is the default) 

 

① 주성분분석의 가정에 의해서 2개 요인으로 분석

result <- factanal(subject, factors = 2, rotation = "varimax")
result # p-value is 0.0232  < 0.05 # 요인수가 부족.

유의 확률 값 = 0.0232 < 0.05  = 기각 

 

결과 : 2개로 결합하는 것은 적합하지 않다. 많은 성분들이 손실한다. 

 

 

② 고유값으로 가정한 3개 요인으로 분석

result <- factanal(subject, factors = 3, # 요인 개수 지정 
                   rotation = "varimax", # 회전방법 지정("varimax", "promax", "none")
                   scores="regression") # 요인점수 계산 방법
result

적절할 때는 유의 확률 값을 축출하지 않습니다. = 적절함

 

해설: 

 

요인 적재량 보기  

names(result)
result$loadings

 

③ 다양한 방법으로 요인적재량 보기

 

print(result, digits = 2, cutoff=0.5) 
print(result$loadings, cutoff=0) # display every loadings

- print(result, digits = 2, cutoff=0.5) 

 

 

- print(result$loadings, cutoff=0) # display every loadings

 

 

 요인점수 
- 관측치의 동작을 살펴보는데 사용되며, 상관분석이나 회귀분석의 독립변수로 사용
- 각 변수(표준화값)와 요인 간의 관계(요인부하량)를 통해서 구해진 점수

 

요인점수를 이용한 요인적재량 시각화  

- Factor1, Factor2 요인지표 시각화 

plot(result$scores[, c(1:2)], main="Factor1과 Factor2 요인점수 행렬")
text(result$scores[, 1], result$scores[,2], 
     labels = name, cex = 0.7, pos = 3, col = "blue")

 

- Factor1, Factor2 요인지표 시각화 + 요인적재량 plotting

points(result$loadings[, c(1:2)], pch=19, col = "red")
text(result$loadings[, 1], result$loadings[,2], 
     labels = rownames(result$loadings), 
     cex = 0.8, pos = 3, col = "red")

 

- Factor1, Factor3 요인지표 시각화

plot(result$scores[,c(1,3)], main="Factor1과 Factor3 요인점수 행렬")
text(result$scores[,1], result$scores[,3], 
     labels = name, cex = 0.7, pos = 3, col = "blue")

 

- Factor1, Factor3 요인지표 시각화 + 요인적재량 plotting

points(result$loadings[,c(1,3)], pch=19, col = "red")
text(result$loadings[,1], result$loadings[,3], 
     labels = rownames(result$loadings), 
     cex = 0.8, pos = 3, col = "red")

 

 

3차원 산점도로 요인적재량 시각화

 

install.packages("scatterplot3d")
library(scatterplot3d)

Factor1 <- result$scores[,1]
Factor2 <- result$scores[,2]
Factor3 <- result$scores[,3] 
# scatterplot3d(밑변, 오른쪽변, 왼쪽변, type='p') # type='p' : 기본산점도 표시 
d3 <- scatterplot3d(Factor1, Factor2, Factor3)

- 요인적재량 표시 

loadings1 <- result$loadings[,1]
loadings2 <- result$loadings[,2]
loadings3 <- result$loadings[,3] 
d3$points3d(loadings1, loadings2, loadings3, bg='red',pch=21, cex=2, type='h')

 

 

요인별 변수 묶기 

 

① 요인별 과목변수 이용 데이터프레임 생성

app <- data.frame(subject$s5, subject$s6) # 응용과학 
soc <- data.frame(subject$s3, subject$s4) # 사회과학 
net <- data.frame(subject$s1, subject$s2) # 자연과학 

 

② 산술평균 계산 - 3개의 파생변수 생성 : 가독성과 설득력이 높다.

app_science <- round( (app$subject.s5 + app$subject.s6) / ncol(app), 2)
soc_science <- round( (soc$subject.s3 + soc$subject.s4) / ncol(soc), 2)
net_science <- round( (net$subject.s1 + net$subject.s2) / ncol(net), 2)

 

③ 상관관계 분석 - 요인분석을 통해서 만들어진 파생변수는 상관분석이나 회귀분석에서 독립변수로 사용할 수 있다.

subject_factor_df <- data.frame(app_science, soc_science, net_science)
cor(subject_factor_df)

 

 

2. 잘못 분류된 요인 제거로 변수 정제

 

- 요인분석에 사용될 데이터 셋 가져오기 

 

① 데이터 가져오기

install.packages('memisc') # spss tool 포맷 파일 읽어오기
library(memisc)
setwd("C:/workspaces/R/data/")
data.spss <- as.data.set(spss.system.file('drinking_water.sav', , encoded = 'utf-8'))

head(data.spss)

 - 출력값 - 
Data set with 20 observations and 15 variables

   Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 성별 연령 지역     학력
 1  3  2  3  3  4  3  4  3  4   3   4 32@Z 204k 4k18 @|9.4kA9
 2  3  3  3  3  3  3  2  3  3   2   3    2 204k 4k18 @|9.4kA9
 3  3  3  3  4  3  4  3  4  4   4   4 32@Z 204k 4k18     0mA9
 4  3  3  3  1  3  2  3  2  2   2   2    2 204k 4k18 @|9.4kA9
 5  3  3  2  2  3  3  2  2  2   2   2    2 204k 4k18 @|9.4kA9
 6  1  1  1  1  1  1  1  3  3   3   3 32@Z 304k 4k18 @|9.4kA9
 7  2  2  2  3  2  3  5  4  4   4   4    2 204k 4k18     4kA9
 8  2  2  1  2  1  2  1  2  2   2   2    2 204k 4k18 @|9.4kA9
 9  2  2  1  2  3  3  1  3  2   3   1    2 204k 4k18     4kA9
10  4  3  3  3  4  3  3  4  2   3   4    2 204k 4k18        5
11  3  4  4  3  4  4  4  5  5   5   5    2 204k 4k18     4kA9
12  2  1  1  2  2  2  1  4  4   5   5 32@Z 204k 4k18     0mA9
13  1  1  1  2  1  1  1  1  1   1   1    2 204k 4k18 @|9.4kA9
14  2  3  2  2  3  1  2  3  2   2   2    2 204k 4k18 @|9.4kA9
15  1  2  2  1  1  1  1  2  2   2   2 32@Z 304k 4k18 @|9.4kA9
16  3  2  2  2  3  2  2  2  2   2   1 32@Z 204k 4k18 @|9.4kA9
17  3  3  3  3  2  3  2  3  3   3   3    2 204k 4k18 @|9.4kA9
18  3  3  3  3  2  2  2  2  3   3   2    2 204k 4k18 @|9.4kA9
19  3  3  2  2  3  2  2  3  3   3   3    2 204k 4k18 @|9.4kA9
20  4  4  4  4  4  4  3  4  4   4   4    2 204k 4k18 @|9.4kA9

View(data.spss)

 

 

②  데이터프레임으로 변경

drinking_water <- data.spss[1:11]

drinking_water

- 출력값 -

Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11
 1  3  2  3  3  4  3  4  3  4   3   4
 2  3  3  3  3  3  3  2  3  3   2   3
 3  3  3  3  4  3  4  3  4  4   4   4
 4  3  3  3  1  3  2  3  2  2   2   2
 5  3  3  2  2  3  3  2  2  2   2   2
 6  1  1  1  1  1  1  1  3  3   3   3
 7  2  2  2  3  2  3  5  4  4   4   4
 8  2  2  1  2  1  2  1  2  2   2   2
 9  2  2  1  2  3  3  1  3  2   3   1
10  4  3  3  3  4  3  3  4  2   3   4
11  3  4  4  3  4  4  4  5  5   5   5
12  2  1  1  2  2  2  1  4  4   5   5
13  1  1  1  2  1  1  1  1  1   1   1
14  2  3  2  2  3  1  2  3  2   2   2
15  1  2  2  1  1  1  1  2  2   2   2
16  3  2  2  2  3  2  2  2  2   2   1
17  3  3  3  3  2  3  2  3  3   3   3
18  3  3  3  3  2  2  2  2  3   3   2
19  3  3  2  2  3  2  2  3  3   3   3
20  4  4  4  4  4  4  3  4  4   4   4
21  3  4  2  1  1  1  1  3  2   3   1
22  4  2  2  1  1  1  1  3  4   4   1
23  3  3  2  2  2  2  3  2  3   3   3
24  2  2  2  2  2  3  1  4  4   4   2
25  2  2  2  2  2  2  3  4  3   3   3
.. .. .. .. .. .. .. .. .. .. ... ...
(25 of 380 observations shown)

drinking_water_df <- as.data.frame(drinking_water) 

str(drinking_water_df)

- 출력값 - 
'data.frame':	380 obs. of  11 variables:
 $ Q1 : num  3 3 3 3 3 1 2 2 2 4 ...
 $ Q2 : num  2 3 3 3 3 1 2 2 2 3 ...
 $ Q3 : num  3 3 3 3 2 1 2 1 1 3 ...
 $ Q4 : num  3 3 4 1 2 1 3 2 2 3 ...
 $ Q5 : num  4 3 3 3 3 1 2 1 3 4 ...
 $ Q6 : num  3 3 4 2 3 1 3 2 3 3 ...
 $ Q7 : num  4 2 3 3 2 1 5 1 1 3 ...
 $ Q8 : num  3 3 4 2 2 3 4 2 3 4 ...
 $ Q9 : num  4 3 4 2 2 3 4 2 2 2 ...
 $ Q10: num  3 2 4 2 2 3 4 2 3 3 ...
 $ Q11: num  4 3 4 2 2 3 4 2 1 4 ...

 

③ 요인수를 3개로 지정하여 요인분석 수행

result2 <- factanal(drinking_water_df, factors = 3, rotation = "varimax",
                    scores = "regression")

print(result2, cutoff=0.5)

result2

- print(result2, cutoff=0.5)

Q4의 값이 파악한 바와 알고리즘으로 도출된 것이 다를 때, 이러한 요인의 변수값은 제거해서 처리해서 하는 것이 정확한 값을 피드백 받을 수 있습니다. 

 

요인별 변수 묶기 

① q4 칼럼 제외하여 데이터프레임 생성

dw_df <- drinking_water_df[-4] - 4번째열 제외 (Q4)

str(dw_df)

- 출력값 -
'data.frame':	380 obs. of  10 variables:
 $ Q1 : num  3 3 3 3 3 1 2 2 2 4 ...
 $ Q2 : num  2 3 3 3 3 1 2 2 2 3 ...
 $ Q3 : num  3 3 3 3 2 1 2 1 1 3 ...
 $ Q5 : num  4 3 3 3 3 1 2 1 3 4 ...
 $ Q6 : num  3 3 4 2 3 1 3 2 3 3 ...
 $ Q7 : num  4 2 3 3 2 1 5 1 1 3 ...
 $ Q8 : num  3 3 4 2 2 3 4 2 3 4 ...
 $ Q9 : num  4 3 4 2 2 3 4 2 2 2 ...
 $ Q10: num  3 2 4 2 2 3 4 2 3 3 ...
 $ Q11: num  4 3 4 2 2 3 4 2 1 4 ...

dim(dw_df) 출력값 :  [1] 380  10

cor(dw_df)

Q1~3(제품 친밀도) , Q5~7(제품적절성) , Q8~11(제품만족도)

 

 

② 요인에 속하는 입력변수별 데이터프레임 구성

제품만족도 저장 데이터프레임  
s <- data.frame(dw_df$Q8, dw_df$Q9, dw_df$Q10, dw_df$Q11) 

제품친밀도 저장 데이터프레임  
c <- data.frame(dw_df$Q1, dw_df$Q2, dw_df$Q3)

제품적절성 저장 데이터프레임 
p <- data.frame(dw_df$Q5, dw_df$Q6, dw_df$Q7)   

 

③ 요인별 산술평균 계산

satisfaction <- round( (s$dw_df.Q8 + s$dw_df.Q9 + s$dw_df.Q10 + s$dw_df.Q11) / ncol(s), 2)
closeness <- round( (c$dw_df.Q1 + c$dw_df.Q2 + c$dw_df.Q3) / ncol(c), 2)
pertinence <- round( (p$dw_df.Q5 + p$dw_df.Q6 + p$dw_df.Q7) / ncol(p), 2)

 

④ 상관관계 분석 

drinking_water_factor_df <- data.frame(satisfaction, closeness, pertinence)
colnames(drinking_water_factor_df) <- c("제품만족도","제품친밀도","제품적절성")
cor(drinking_water_factor_df)

 

세 집단 평균 검정(분산 분석)

방법: 세집단(이상)간 평균 차이에 관한분석


작업절차


1. 파일 가져오기
2. 데이터 정제/전처리 - NA, outline 제거
3. 세집단 subset 작성
   -> 코딩 변경
   -> 기술 통계량(빈도수)
   -> 교차표 작성
4. 세 집단 동질성 검정 : bartlett.test()

5. 분산 검정 : aov() or kruskal.test()

6. 사후 검정 : TukeyHSD()

 

분산 절차 

 

 

<연구 가설>

- 연구 가설(H1) : 교육방법에 따른 세 집단간 실기 시험의 평균에 차이가 있다.
- 귀무 가설(H0) : 교육방법에 따른 세 집단간 실기 시험의 평균에 차이가 없다.

 

<연구환경>
세 가지 교육방법을 적용하여 1개월 동안 교육 받은 교육생 각 50명씩을 대상으로 실기시험을 실시 하였다. 세 집단간 실기 시험의 평균에 차이가 있는가 검정 한다.

 해당변수 : method(명목척도), score(비율척도)
 대상변수 : 교육방법, 시험성적
 모형(모델) : 교육방법(A/B) -> 시험성적(비율-성적)

 

 

1) 세 집단 subset 작성과 기술 통계량 계산

 

1단계 파일 가져오기

data <- read.csv("C:/workspaces/R/data/three_sample.csv", header = T)

head(data)

- 출력값 -
  no  method survey score
1  1      1      1   3.2
2  2      2      0    NA
3  3      3      1   4.7
4  4      1      0    NA
5  5      2      1   7.8
6  6      3      1   5.4

str(data)

- 출력값 - 
'data.frame':	150 obs. of  4 variables:
 $ no    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ method: int  1 2 3 1 2 3 1 2 3 1 ...
 $ survey: int  1 0 1 0 1 1 0 0 1 0 ...
 $ score : num  3.2 NA 4.7 NA 7.8 5.4 NA 8.4 4.4 2.8 ...

summary(data)

- 출력값 -
   no             method      survey           score       
 Min.   :  1.00   Min.   :1   Min.   :0.0000   Min.   :  2.00  
 1st Qu.: 38.25   1st Qu.:1   1st Qu.:0.0000   1st Qu.:  4.35  
 Median : 75.50   Median :2   Median :1.0000   Median :  5.80  
 Mean   : 75.50   Mean   :2   Mean   :0.7333   Mean   : 14.45  
 3rd Qu.:112.75   3rd Qu.:3   3rd Qu.:1.0000   3rd Qu.:  6.50  
 Max.   :150.00   Max.   :3   Max.   :1.0000   Max.   :478.00  
                                               NA's   :59      
View(data)

※ 150개의 레코드, 50개씩 3가지 그룹

 

 

2단계 데이터 전처리 (데이터 정제)

method <- data$method # 공부방법
survey <- data$survey # 만족도 (만족 : 1 , 불만족 : 0) : 비율의 차이점 을 검정(빈도수) 

method; survey

 

 

3단계 기술통계량 (빈도분석) 

table(method, useNA = "ifany") - NA 제외 

- 출력값 - 
  method   -> 3그룹 모두 관찰치 각 50개 
 1  2  3 
 50 50 50 



table(method, survey, useNA = "ifany")  - NA 제외 

- 출력값 - 
       survey  (만족 : 1 , 불만족 : 0) : 비율의 차이점 을 검정(빈도수) 
method  0  1
     1 16 34
     2 13 37
     3 11 39

 useNA = "ifany" : 결측치 존재시 display 

 

 

2) 세 집단 비율 차이 검정

 

- 양측 검정 

 

prop.test(c(34,37,39), c(50,50,50)) - 입력 값에 따라 변경 

prop.test(c(34,37,39), c(50,50,50), alternative = "two.sided", conf.level = 0.95)

p-value = 0.5232(유의확률) > 0.05(유의수준) -> 귀무가설 채택 : 교육방법에 따른 세 집단간 실기 시험의 평균에 차이가 없다. 

 

- 귀무가설이 채택 되었기 때문에 단측 검정이 필요하지 않습니다. 

- 위의 결과를 가지고는 주장하고 싶은바의 근거로 제시할 수 없습니다.  

 

 

2. 분산분석(F 검정, ANOVA Analysis)  

: 세 집단 이상의 평균 차이 검정

 

1) 데이터 전처리

 

1단계 파일 가져오기, 전처리 

data <- read.csv("C:/workspaces/Rwork/data/three_sample.csv", header = T)

summary(data) - NA : 59 개  

- 출력값 - 
      no             method      survey           score       
 Min.   :  1.00   Min.   :1   Min.   :0.0000   Min.   :  2.00  
 1st Qu.: 38.25   1st Qu.:1   1st Qu.:0.0000   1st Qu.:  4.35  
 Median : 75.50   Median :2   Median :1.0000   Median :  5.80  
 Mean   : 75.50   Mean   :2   Mean   :0.7333   Mean   : 14.45  
 3rd Qu.:112.75   3rd Qu.:3   3rd Qu.:1.0000   3rd Qu.:  6.50  
 Max.   :150.00   Max.   :3   Max.   :1.0000   Max.   :478.00  
                                               NA's   :59      
                                               
                                               
data <- subset(data, !is.na(score), c(method, score)) # NA 생략 
head(data)

- 출력값 -
    method score
1      1   3.2
3      3   4.7
5      2   7.8
6      3   5.4
8      2   8.4
9      3   4.4

 

2단계 차트 이용 - outlier 보기(데이터 분포 현황 분석)

plot(data$score) # 차트로 outlier 확인 : 50이상과 음수값 

barplot(data$score) # 바 차트

mean(data$score) 출력값 : [1] 14.44725

plot(data$score)

barplot(data$score) 

3개의 데이터가 문제를 가지고 있는 것처럼 보입니다. 

 

 

3단계 outlier 제거 - 평균(14.44725)  

length(data$score) 출력값 :  [1] 91

data2 <- subset(data, score <= 14) -  14이상 제거 

length(data2$score) 출력값 :  [1] 88 (3개 필터링) 

 

4단계 정제된 데이터 보기

x <- data2$score

summary(x)

- 출력값 -
 Min.  1st Qu.  Median  Mean   3rd Qu.   Max. 
2.000   4.300   5.650   5.474   6.500   8.500 


boxplot(x)

 

2) 세 집단 subset 작성과 기술통계량 

 

1단계 세 집단 subset 작성

data2$method2[data2$method == 1] <- "방법1"
data2$method2[data2$method == 2] <- "방법2"
data2$method2[data2$method == 3] <- "방법3"

View(data2)

 

2단계 교육 방법별 빈도수

x <- table(data2$method2)
x

- 출력값 - 
 방법1 방법2 방법3 
  31    27    30 

 

3단계 교육방법에 따른 시험성적 평균 구하기 

y <- tapply(data2$score, data2$method2, mean)
y

- 출력값 - 
  방법1    방법2    방법3 
4.187097 6.800000 5.610000 

tapply :  두개 이상의 변수를 비교하면서 3번째 넣은 기능을 수행 (base패키지에서 제공) 

 

 

4단계 교육방법과 시험성적으로 데이터프레임 생성

df <- data.frame(교육방법 = x, 성적 = y)
df

- 출력값 - 
          교육방법.Var1   교육방법.Freq    성적
방법1         방법1            31       4.187097
방법2         방법2            27       6.800000
방법3         방법3            30       5.610000

 

 

3) 세 집단 간 동질성 검정 

bartlett.test(score ~ method2, data = data2) 

bartlett.test(종속변수(y축) ~ 독립변수(x축) , data) 

 

 p-value = 0.1905 > 0.05 : 귀무가설 채택 -  동질성ok 

 

 

4) 분산 분석(세 집단 간 평균 차이 검정) , F 검정(분석), ANOVA 검정(분석) 

result <- aov(score ~ method2, data = data2)

result --  주의)검정에 필요한 값을 얻지 못합니다. 

- 출력값 - 
Call:
   aov(formula = score ~ method2, data = data2)

Terms:
                 method2 Residuals
Sum of Squares  99.36805  96.90184
Deg. of Freedom        2        85

Residual standard error: 1.067718
Estimated effects may be unbalanced


names(result) - 컬럼의 이름 반환 

- 출력값 -
 [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"       
 [7] "qr"            "df.residual"   "contrasts"     "xlevels"       "call"          "terms"        
[13] "model"     


summary(result) 

aov(종속변수(y축) ~ 독립변수(x축) , data) 

 

p-value=9.39e-14 < 0.05 귀무가설 기각 

 

 

5) 사후 검점 

집단간 차이 상세보기 --> A!=B!=C, A==B!=C, A!=B==C

TukeyHSD(result) 

교육방법 간 비교 --> p 값 tapply 차이 검정 ) --> 4.187097 6.800000 5.610000

 

 

6) 사후 검정 시각화 

plot(TukeyHSD (result))

해석 ) A, B, C 집단간 모두 차이 존재 

 

 

최종 결과 : 유의수준 0.05 에서 귀무가설이 기각되었다 . 따라서 교육방법에 따른 세 집단 간 실기시험의 평균에 차이가 있는 것으로 나타났다 . 또한 사후검정 방법인 Tukey 분석을 실시한 결과 '방법2 - 방법1’ 의 평균 점수의 차이가 가장 높은 것으로 나타났다. 

 

 

1. 두 집단 비율 검정

방법 : 두 집단간 비율 차이에 관한 분석


작업절차


1. 실습 파일 가져오기
2. 두집단 subset 작성(데이터 정제,전처리)
   -> 데이터 정체, 전처리
   -> 기술 통계량 - 빈도수
   -> 두변수(집단)에 대한 교차 분석
3. 두집단 비율 차이 검정

   -> prop.test() 

 

분석절차

 

파일 가져오기 -> 데이터 전처리 -> 두 집단 subset 생성 -> prop.test() -> 검정통계량 분석 

 

<연구가설>

연구가설(H1) : 두 가지 교육방법에 따라 교육생의 만족율에 차이가 있다.
귀무가설(H0) : 두 가지 교육방법에 따라 교육생의 만족율에 차이가 없다.

 

<연구환경>
IT교육센터에서 PT를 이용한 프레젠테이션 교육방법과 실시간 코딩교육 방법을 적용하여 교육을 실시하였다. 2가지 교육 방법중 더 효과적인 교육 방법을 조사하기 위해서 교육생 300명을 대상으로 설문을 실시하였다.

 

 해당변수: method(명목척도), survey(명목척도)
 변수척도: 명목척도: 빈도수(기술통계량)

 

 

1단계 데이터 가져오기 

data <- read.csv("C:/workspaces/R/data/two_sample.csv", header = T)

head(data)

- 출력값 - 
  no gender method survey score
1  1      1      1      1   5.1
2  2      1      1      0   5.2
3  3      1      1      1   4.7
4  4      2      1      0   4.8
5  5      1      1      1   5.0
6  6      1      1      1   5.4

str(data)

- 출력값 -
'data.frame':	300 obs. of  5 variables:
 $ no    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ gender: int  1 1 1 2 1 1 2 1 1 1 ...
 $ method: int  1 1 1 1 1 1 1 1 1 1 ...
 $ survey: int  1 0 1 0 1 1 0 1 1 0 ...
 $ score : num  5.1 5.2 4.7 4.8 5 5.4 NA 5 4.4 4.9 ...

View(data)

 

 

 

2단계 전처리 (두 집단 subset 작성 및 데이터 전처리 )

x <- data$method # 교육방법(1:PT,2:Coding)
y <- data$survey # 만족도(1:만족, 0:불만족)

 

3단계 집단별 빈도분석

table(x) 
table(y)

- 출력값  - 
x
  1   2 
150 150

y
  0   1 
 55 245

 

4단계 두 변수에 대한 교차분석 

table(x, y, useNA = "ifany") # 결측치 존재시 display 

- 출력값 - 
   y
x   0   1
1  40 110
2  15 135

 

-- 두 집단 비율 차이 검정 -- 

 

단계1. 양측 검정

prop.test(c(110,135), c(150,150)) # PT/Coding 교육 방법에 대한 비율 차이 검정.(만족도 넣음)
prop.test(c(110,135), c(150,150), alternative = "two.sided", conf.level = 0.95) 

 p-value = 0.0003422 => 귀무가설 기각.연구가설 채택 

 

단계2. 방향성이 있는 단측가설 검정: PT > Coding

 

- alternative = "greater"

prop.test(c(110,135), c(150,150), alternative = "greater", conf.level = 0.95)

 

p-value = 0.9998 > 0.05(PT > Coding) -- 기각 

 

 

- alternative = "less"

prop.test(c(110,135), c(150,150), alternative = "less", conf.level = 0.95)

 

p-value = 0.0001711 < 0.05(PT < Coding) 결론 : pt 만족도가 코딩 만족도 보다 떨어진다. 

 

 

 

 

 

 

 

2. 두 집단 평균 검정(독립표본 T검정)

방법 : 두 집단간 평균 차이에 관한 분석

 

작업절차
1. 실습 파일 가져오기
2. 두 집단 subset 작성(데이터 정제 , 전처리)
3. 두 집단간 동질성 검증(정규 분포 검정)
   -> var.test()

4. 두 집단 평균 차이 검정

   -> t.test() or wilcox.test()

 

 

분석절차 

 

< 연구가설 > 

- 연구가설(H1) : 교육방법에 따른 두 집단 간 실기시험의 평균에 차이가 있다.
- 귀무가설(H0) : 교육방법에 따른 두 집단 간 실기시험의 평균에 차이가 없다.

 

<연구환경>
IT 교육센터에서 PT를 이용한 프레젠테이션 교육방법과 실시간 코딩 교육 방법을 적용하여 1개월 동안 교육 받은 교육생 각 150명을 대상으로 실기시험을 실시 하였다. 두 집단간 실기시험의 평균에 차이가 있는가 검정한다.

 

 해당변수: method(명목척도), score(비율척도)
 대상변수: 교육방법, 시험성적
 모형(모델) : 교육방법(A/B) -> 시험성적(비율-성적)

 

 

1단계 파일 가져오기 (데이터 파악)

data <- read.csv("C:/workspaces/R/data/two_sample.csv", header = T)

str(data)

- 출력값 - 
'data.frame':	300 obs. of  5 variables:
 $ no    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ gender: int  1 1 1 2 1 1 2 1 1 1 ...
 $ method: int  1 1 1 1 1 1 1 1 1 1 ...
 $ survey: int  1 0 1 0 1 1 0 1 1 0 ...
 $ score : num  5.1 5.2 4.7 4.8 5 5.4 NA 5 4.4 4.9 ...

head(data)

- 출력값 - 
   no gender method survey score
1  1      1      1      1   5.1
2  2      1      1      0   5.2
3  3      1      1      1   4.7
4  4      2      1      0   4.8
5  5      1      1      1   5.0
6  6      1      1      1   5.4

summary(data) # score - NA's :73개 

- 출력값 -
     no             gender         method        survey           score      
 Min.   :  1.00   Min.   :1.00   Min.   :1.0   Min.   :0.0000   Min.   :3.000  
 1st Qu.: 75.75   1st Qu.:1.00   1st Qu.:1.0   1st Qu.:1.0000   1st Qu.:5.100  
 Median :150.50   Median :1.00   Median :1.5   Median :1.0000   Median :5.600  
 Mean   :150.50   Mean   :1.42   Mean   :1.5   Mean   :0.8167   Mean   :5.685  
 3rd Qu.:225.25   3rd Qu.:2.00   3rd Qu.:2.0   3rd Qu.:1.0000   3rd Qu.:6.300  
 Max.   :300.00   Max.   :2.00   Max.   :2.0   Max.   :1.0000   Max.   :8.000  
                                                                NA's   :73     
                                                                
View(data)

# 완전한 정수로 사용하고 싶으면 int 로 형변환하여 사용합니다. (as.integer) 

 

 

2단계 데이터 전처리 (두 집단 subset 작성 및 데이터 전처리)

- score의 NA 값 제거한 method와 score의 값만 result 변수에 저장
result <- subset(data, !is.na(score), c(method, score)) 

View(result)

 

3단계 교육 방법별로 분리

a <- subset(result, method == 1)
b <- subset(result, method == 2)

a1 <- a$score # PT 교육 받은 학생 점수
b1 <- b$score # coding 교육 받은 학생 점수 

head(a1);head(b1)

-출력값- 
[1] 5.1 5.2 4.7 4.8 5.0 5.4
[1] 4.9 5.2 5.3 4.8 5.0 5.4

 

4단계 기술 통계량 

- NA 값을 제외 - 

length(a1) 출력값 : [1] 109 (PT)
length(b1) 출력값 : [1] 118 (CODING)

 

-  동질성 검정(var.test)

var.test(a1, b1) # p-value = 0.3002 > α(유의수준) : t-검정

 결과 : 동질성을 가지고 있다. ( 0.3002 > 0.05 )  -> t.test() - ( T검정 사용) 

 

 

- 두 집단 평균 차이 검정 

 

단계1. 양측검정

t.test(a1, b1)
t.test(a1, b1, alternative = "two.sided", conf.level = 0.95)

결과 : p-value = 0.0411 < 0.05 - 교육방법 :  따른 두 집단간 실기시험의 평균에 차이가 있다.

 

 

단계2. 방향성을 갖는 단측가설 검정 

 

- alternative = "greater"

t.test(a1, b1, alternative = "greater", conf.level = 0.95)

결과 : p-value = 0.9794 : a1을 기준으로 비교 -> a1이 b1보다 크지 않다 (기각) 

 

 

- alternative = "less"

t.test(a1, b1, alternative = "less", conf.level = 0.95)

결과 : p-value = 0.02055 : a1을 기준으로 비교 -> a1이 b1보다 작다.

 

최종 결과 : 

유의수준 0.05에서 귀무가설이 기각 되었다. 따라서 교육방법에 따른 두 집단간 실기시험의 평균에 차이가 있다 라고 말할 수 있다. 단측검정을 실시한 결과 교육 방법1이 교육방법 2보다 크지 않은 것으로 나타났다. 즉 실시간 코딩 교육 방법이 교육효과가 더 높은것 으로 분석 된다.

 

 

 

3. 대응 두 집단 평균 검정(대응 표본 T검정)

 - 동일한 표본을 대상으로 측정된 두 변수의 평균 차이를 검정하는 분석방법.
 - 일반적으로 사전검사와 사후검사의 평균 차이를 검증할 때 많이 사용.

 

방법 : 대응 되는 두 집단간 평균 차이에 관한 분석

 

작업절차


1. 실습 파일 가져오기
2. 두 집단 subset 작성(데이터 정제, 전처리)
3. 두 집단간 동질성 검증(정규 분포 검정)

   -> var.test(x, y, paired = TRUE)

4. 두 집단 평균 차이검정

   -> t.test(x, y, paired = TRUE)

   -> wilcox.test(x, y, paired = TRUE) 

 

 

분석절차 

< 가설 설정 > 

연구가설(H1) : 교수법 프로그램을 적용하기 전 학생들의 학습력과 교수법 프로그램을 적용한 후 학생들의 학습력에 차이가 있다.

 

귀무가설(H0) : 교수법 프로그램을 적용하기 전 학생들의 학습력과 교수법 프로그램을 적용한 후 학생들의 학습력에 차이가 없다.

 

< 연구 환경 > 
A교육센터에서 교육생 100명을 대상으로 교수법 프로그램 적용 전에 실기시험을 실시한 후 1개월 동안 동일한 교육생에게 교수법 프로그램을 적용한 후 실기시험을 실시한 점수와 평균에 차이가 있는가 검정 한다.

 

 

 

1단계 파일 가져오기 

data <- read.csv("C:/workspaces/R/data/paired_sample.csv", header = T)

head(data) # no before after

- 출력값 - 
   no before after
1  1    5.1   6.3
2  2    5.2   6.3
3  3    4.7   6.5
4  4    4.8   5.9
5  5    5.0   6.5
6  6    5.4   7.3

summary(data) # NA 4개 

- 출력값 - 
       no             before          after      
 Min.   :  1.00   Min.   :3.000   Min.   :5.000  
 1st Qu.: 25.75   1st Qu.:4.800   1st Qu.:5.800  
 Median : 50.50   Median :5.100   Median :6.200  
 Mean   : 50.50   Mean   :5.145   Mean   :6.221  
 3rd Qu.: 75.25   3rd Qu.:5.600   3rd Qu.:6.500  
 Max.   :100.00   Max.   :7.000   Max.   :8.000  
                                  NA's   :4  
                                  
View(data)                                  

 

2단계 전처리( 대응 두 집단 subset 생성 ) 

result <- subset(data, !is.na(after), c(before, after)) # 96

head(result)

-출력값 - 
    before after
1    5.1   6.3
2    5.2   6.3
3    4.7   6.5
4    4.8   5.9
5    5.0   6.5
6    5.4   7.3

x <- result$before
y <- result$after

 

3단계 기술통계량 

length(x) 출력값 : [1] 96 ()
length(y) 출력값 : [1] 96

- NA 제외한 평균 - 
mean(x) 출력값 :  [1] 5.16875 
mean(y, na.rm=T) 출력값 : [1] 6.220833  

 

- 동질성 검정 

동질성 검정의 귀무가설 : 대응 두 집단 간 분포의 모양이 동질적이다.

 

- 동일 집단이기 때문에 동질성을 가질 것 같지만, 집단이 중요한 것이 아니라 데이터의 분포가 중요하고, 전과 후의 점수의 분포도의 특징은 비교해야합니다.

var.test(x, y, paired=T) 

결과 p-value = 0.7361  > 0.05 : 동질성을 가지고 있다.  -> t.test() - ( T검정 사용) 

 

 

 

- 대응 두 집단 평균 차이 검정 

 

① 단계1: 양측검정

t.test(x, y, paired = T)

결과 :  p-value =  2.2e-16 < 0.05 : 귀무가설 기각

연구 가설 채택 : 교수법 프로그램을 적용하기 전 학생들의 학습력과 교수법 프로그램을 적용한 후 학생들의 학습력에 차이가 있다.

 

 

② 방향성을 갖는 단측가설 검정 

 

- alternative = "less"

t.test(x, y, paired = T, alternative = "less", conf.level = 0.95)

 p-value = 2.2e-16 < 0.05 /  x를 기준으로 비교 : x가 y보다 작다.

 

- alternative = "greater"

t.test(x, y, paired = T, alternative = "greater", conf.level = 0.95)

p-value = 1 > 0.05 / x 를 기준으로 비교 : x가 y보다 크지 않다. 

 

 

최종 결과 : 유의수준 0.05에서 귀무가설이 기각되 었다. 따라서 교수법 프로그램 적용 전과 적용 후의 두 집단간 학습력의 평균에 차이가 있다. 라고 말할 수 있다. 또한 단측검정을 실시한 결과 교수법 프로그램 적용 전 학습력이 교수법프로그램 적용 후 학습력 보다 크지 않은 것으로 나타났다. 즉 교수법 프로그램이 학습력에 효과가 있는 것으로 분석 된다.

단일 집단 검정

:  한 개의 집단과 기존 집단과의 비율/평균 차이 검정 

 

1. 단일 집단 비율 검정

- 단일 집단의 비율이 어떤 특정한 값과 같은지를 검정하는 방법
- 기술통계량으로 빈도 수에 대한 비율에 의미
- 단일 집단의 비율이 어떤 특정한 값과 같은지를 검정하는 방법(검정 방법 중에서 가장 간단)

 

방법: 1개 집단의 비율과 기존 집단과의 비율 차이 분석

 

 

작업절차

1. 실습 데이터 가져오기

2. 빈도수와 비율 계산

3. binom.test() 이용

 

분석 절차 

실습파일 가져오기 -> 데이터 전처리 -> 기술통계량(빈도분석) -> binom.test() -> 검정통계량 분석

 

 

<연구가설>

연구가설(H1) : 기존2014년도 고객 불만율과 2015년도 CS교육후 불만율에 차이가 있다.
귀무가설(H0) : 기존2014년도 고객 불만율과 2015년도 CS교육후 불만율에 차이가 없다

 

<연구환경>
2014년도 114 전화번호 안내 고객을 대상으로 불만을 갖는 고객은 20% 였다. 이를 개선하기 위해서 2015년도 CS교육을 실시한 후 150명 고객을 대상으로 조사한 결과 14명이 불만을 갖고 있었다. 기존20% 보다 불만율이 낮아졌다고 할 수 있는가?


대상파일: c:/workspaces/Rwork/data/one_sample.csv

해당변수 : survey(만족도)

변수척도 : 명목척도(y/n)
가정 : 기존 불만율과 CS교육후 불만율 분석

 

 

1단계 실습 파일 가져오기 

data <- read.csv("C:/workspaces/R/data/one_sample.csv", header = T)
head(data)

- 출력값 - 
  no gender survey time
1  1      2      1  5.1
2  2      2      0  5.2
3  3      2      1  4.7
4  4      2      1  4.8
5  5      2      1  5.0
6  6      2      1  5.4

View(data)

2단계 데이터 전처리 (빈도수와 비율 계산) 

x <- data$survey
x

summary(x) # 결측치 확인 

- 출력값 -
 Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
0.0000  1.0000  1.0000  0.9067  1.0000  1.0000 

length(x) 출력값 : [1] 150
table(x) # 빈도수(0:불만족(14), 1:만족(136))
x
- 출력값 - 
 0   1 
 14 136 

 

3단계  기술통계량(빈도분석) - (패키지 이용 빈도수와 비율계산) 

library(prettyR) # freq() 함수 사용 
freq(x)

- 출력값 - 
Frequencies for x 
        1    0   NA
      136   14    0
%    90.7  9.3    0 
%!NA 90.7  9.3

 

-- 이항분포 (만족율 기준) 비율검정 --

 

1) 양측 검정 (있다 or 없다)

binom.test(c(136, 14), p=0.8) # 기존 80% 만족율 기준 검증 실시 

 

p-value = 0.0006735 < 0.05 보다 작다 -> 귀무가설 기각, 연구가설 채택(유의확률 값으로 결과 도출)
해설: 기존만족율(80%)과 차이가 있다. -> 연구가설채택 - 연구가설(H1) : 기존 2014년도 고객불만율과 2015년도 CS교육 후 불만율에 차이가 있다. 라는 결과를 도출합니다. 

 

주의 사항) 차이가 없으면 문제가 없지만, 차이가 있게 되면 그 차이가 긍적적인지 부정적인지 판단할 수 없습니다. 

 

 

2) 방향성을 갖는 단측 가설 검정 (방향성(긍정/부정)) -  (유의확률 값이 유일수준 보다 작으면 채택) 

 

- alternative = "greater"

binom.test(c(136, 14), p=0.8, alternative = "greater", conf.level = 0.95) # p-value = 0.0003179
# greater : ~보다 크다(방향성)

 

전체 비율이 80% 보다 큰가? 80% 보다 크다.  

p-value = 0.0003179 < 0.05 : 작으므로 채택(긍정적 차이를 얻어낸다)

 

- alternative = "less"

binom.test(c(136, 14), p=0.8, alternative = "less", conf.level = 0.95) # p-value = 0.9999
# less : 작다(방향성)

p-value = 0.9999 > 0.05 : 크므로 기각된다. - 사용하지 않는다. 

 

결론 : 긍정적인 차이를 낸다. 

 

 

-- 이항분포 (불만족 기준) 비율검정 -- 

 

 

1) 양측검정

binom.test(c(14, 136), p=0.2) # 기존 20% 불만족율 기준 검증 실시 

p-value = 0.0006735 < 0.05 보다 작다 -> 귀무가설 기각, 연구가설 채택(유의확률 값으로 결과 도출)
해설: 기존만족율(80%)과 차이가 있다. -> 연구가설채택 - 연구가설(H1) : 기존 2014년도 고객불만율과 2015년도 CS교육 후 불만율에 차이가 있다. 라는 결과를 도출합니다.

 

< 양측검정은 불만족과 만족의 결과는 같습니다 > 

 

 

 2) 방향성을 갖는 단측 가설 검정 (유의확률 값이 유일수준 보다 작으면 채택) 

 

- alternative = "greater"

binom.test(c(14, 136), p=0.2, alternative = "greater", conf.level = 0.95)

p-value = 0.9999 - 기각 ( 0.9999 > 0.05 )

 

 

 

-  alternative = "less"

binom.test(c(14, 136), p=0.2, alternative = "less", conf.level = 0.95)

p-value = 0.0003179  - 채택 ( 0.0003179 < 0.05 ) 

 

결과 : 불만족의 부정적 차이 이므로 - 긍정적 차이를 나타낸다. 

 

 

 

 

2 단일집단 평균검정(단일표본 T검정)

: 단일집단의 평균이 어떤 특정한 집단의 평균과 차이가 있는지를 검정하는 방법으로, 기술통계량으로 표본평균에 의미

 

방법: 두 집단 간 평균 차이에 관한 분석


작업절차

1. 실습 파일 가져오기
2. 두 집단 subset 작성(데이터정제,전처리)
3. 두 집단간 동질성 검증(정규 분포 검정)

    -> var.test() 

4. 두집단 평균 차이 검정

    -> 정규분포를 따를 때 = t.test() or 정규분포를 따르지 않을 때 = wilcow.test()

 

 

분석절차 


<가설설정>  
- 연구가설(H1) : 국내에서 생산된 노트북과 A회사에서 생산된 노트북의 평균 사용 시간에 차이가 있다.
- 귀무가설(H0) : 국내에서 생산된 노트북과 A회사에서 생산된 노트북의 평균 사용 시간에 차이가 없다.

 

<연구환경>
IT교육센터에서 PT를 이용한 프레젠테이션 교육방법과 실시간 코딩 교육 방법을 적용하여 1개월 동안 교육 받은 교육생 각150명을 대상으로 실기시험을 실시하였다. 두집단간 실기시험의 평균에 차이가 있는가 검정한다

 

 해당변수: method(명목척도), score(비율척도)
 대상변수: 교육방법, 시험성적
 모형(모델) : 교육방법(A/B) -> 시험성적(비율-성적)

 

 

1단계 파일 가져오기 

data <- read.csv("C:/workspaces/R/data/one_sample.csv", header = T)

head(data)

- 출력값 - 
  no    gender survey time
1  1      2      1    5.1
2  2      2      0    5.2
3  3      2      1    4.7
4  4      2      1    4.8
5  5      2      1    5.0
6  6      2      1    5.4

str(data)

- 출력값 -
'data.frame':	150 obs. of  4 variables:
 $ no    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ gender: int  2 2 2 2 2 2 2 2 2 1 ...
 $ survey: int  1 0 1 1 1 1 1 1 0 1 ...
 $ time  : num  5.1 5.2 4.7 4.8 5 5.4 NA 5 4.4 4.9 ...


x <- data$time
head(x) 출력값 : [1] 5.1 5.2 4.7 4.8 5.0 5.4 

 

2단계 데이터 전처리 (데이터 분포/결측치 제거)

summary(x) # NA's -> 41

- 출력값 -
 Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
 3.000   5.000   5.500   5.557   6.200   7.900      41 

mean(x) 출력값 :  [1] NA

 

3단계 데이터 정제 

mean(x, na.rm=T) # NA 제외 평균(방법1) 출력값 :  [1] 5.556881
x1 <- na.omit(x) # NA 제외(방법2)

mean(x1) 출력값 :  [1] 5.556881

 

4단계 정규분포 검정

- 귀무가설(H0) : x의 데이터 분포는 정규분포

- shapior.test(정규분포 검정) 값이 인계치보다 높으면 따른다고 볼 수 있습니다. 

shapiro.test(x1)

 

정규분포 검정 함수(p-value = 0.7242), 표본이 정규 분포로부터 추출된 것인지 테스트하기 위한 함수로, 이때 귀무가설은 주어진 데이터가 정규 분포로부터의 표본이라고 합니다. 
p-value > α(알파) : 정규분포로 본다.(정규분포를 따른다)

 

 

5단계 정규분포 시각화 

hist(x1)

qqline(x1, lty=1, col='blue') 

 

stats 패키지에서 정규성 검정을 위해서 제공되는 시각화 함수

파란줄 : 정규분포도를 따랐을 때 -  분포도 / 정규분포도를 따르고 있음을 시각적으로 확인 할 수 있습니다. 

 

6단계 평균차이 검정

 

T-test(T-검정) : 모집단에서 추출한 표본 데이터의 분포형태가 정규분포일 때 수행

- 양측검정: x1 객체와 기존 모집단의 평균 5.2시간 비교 

t.test(x1, mu=5.2, alternative = "two.side", conf.level = 0.95) 

mu= "기준치 값"

p-value = 0.0001417  < 0.05 = 연구가설 채택 : 연구가설(H1):국내에서 생산된 노트북과 A회사에서 생산된 노트북의 평균 사용 시간에 차이가 있다. 라는 결과를 도출합니다. 

 

 

- 방향성을 갖는 단측가설 검정  (유의확률 값이 유일수준 보다 작으면 채택) 

t.test(x1, mu=5.2, alternative = "greater", conf.level = 0.95)

 p-value = 7.083e-05  < 0.05 : 5.2의 시간보다 평균시간이 더 크다는 결과를 도출할 수 있습니다. 

7.083e-05 (=0.000007083)

추정(estimation)

: 표본을 통해서 모집단을 확률적으로 추측

 

1) 점 추정 : 제시된 한 개의 값과 검정통계량(표본을 통해 계산된 통계량)을 직접 비교하여 가설 기각 유무를 결정
     ex) 우리 나라 중학교 2학년 남학생 평균키는 165.2cm로 추정 (거의 불가능) 

2) 구간 추정 : 신뢰구간과 검정통계량을 비교하여 가설 기각유무 결정 - 일반적으로 많이 사용 
    신뢰구간 : 오차범위에 의해서 결정된 하한값과 상한값의 범위
     ex) 우리 나라 중학교 2학년 남학생 평균키는 164.5 ~ 165.5cm로 추정

 

용어 정의. 

- (가설) 검정(hypotheses testing) :  유의 수준과 표본의 검정통계량을 비교하여 통계적 가설의 진위를 입증
- 검정통계량 : 표본에 의해서 계산된 통계량(표본평균, 표본표준편차) 
- 모수 : 모집단에 의해서 나온 통계량(모평균, 모표준편차) 

 

 

예제) 우리나라 중학교 2학년 남학생 평균 신장 표본 조사 
 - 전체 표본 크기(N) : 10,000명 
 - 표본평균(X)       : 165.1 cm
 - 표본 표준편차(S)  : 2 cm

 

표본크기 결정

① 요구정밀도 e의 결정 : 허용가능 최대오차(10% 설정)


② 신뢰수준 α의 결정 : 95% 신뢰도(α=0.05 설정)
    – 95% 신뢰도 → α=0.05 → k = 1.96
    – 90% 신뢰도 → α=0.1 → k = 1.65
    – 99% 신뢰도 → α=0.01 → k = 2.58


③모집단 비율 P 예측 : 예비조사 결과나 기졲의 설문조사 결과를 기초로 P값 예측

   (예측 불가능한 경우 P(찬성률) 50% 설정)


④수식 계산 : 유한 또는 무한모집단의 특성을 고려 해당 수식 적용

 

 

- 모평균 신뢰수준 95%의 신뢰구간(하한값과 상한값) 구하기

N <- 10000  # 표본크기
X <- 165.1  # 표본평균
S <- 2      # 표본 표준편차

low <- X - 1.96 * S / sqrt(N) # 신뢰구간 하한값  # sqrt() : 제곱근 계산 
high <- X + 1.96 * S / sqrt(N) # 신뢰구간 상한값

low; high  # 165.0608 ~ 165.1392

-출력값-
[1] 165.0608
[1] 165.1392

해석 : 신뢰수준 95%는 신뢰구간이 모수를 포함할 확률을 의미하고, 신뢰구간은 오차범위에 의해서 결정된 하한값~상한값을 의미합니다. 

 

 

- 신뢰구간으로 표본오차 구하기 

low - X  출력값 :  -0.0392 = 신뢰구간 하한값(165.0608) - 표본 평균 (x= 165.1)
high -X  출력값 :  0.0392 = 신뢰구간 상한값(065.1392) - 표본 평균 (x= 165.1)

(low - X) * 100 # -3.92
(high - X) * 100 # 3.92

최종 해석 : 우리나라 중학교 2학년 남학생 평균 신장이 95% 신뢰 수준에서 표본오차 -3.92~3.92 범위에서 165.1cm로 조사가 되었다면, 실제 평균키는 165.0608cm ~ 165.1392cm 사이에 나타날 수 있다는 것을 의미합니다. 

 

 

 

- 표본 크기 결정 예제

A전기 회사의 사원수가 5,000명인 경우 요구정밀도 10%, 신뢰수준 95% 일 때 표본의 크기는 얼마인가?

N: 모집단 크기, e: 요구정밀도, P: 모집단 비율, k: 신뢰수준 

 

Chi-square 검정

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

 

② 교차분석으로 얻어진 교차 분할표를 대상으로 유의확률을 적용하여 변수 간의 독립성 및 관련성 여부 등을 검정하는 분석 방법입니다. (모집단의 변량을 추정할 때 사용) 

 

- 범주(Category)별로 관측 빈도와 기대빈도가 차이가 있는지 검정
- 카이제곱 분포에 기초학 통계적 방법(카이제곱 분포표 이용)
- χ2 = Σ (관측값 - 기댓값)2 / 기댓값
- 분석을 위해서 교차분할표 작성
- 교차분석은 검정통계량으로 카이제곱 사용(=카이제곱 검정)

 

 

- 검증 유형 분류 : 일원카이제곱검정, 이원카이제곱검정

 

일원카이제곱 : 교차분할표 이용 안함(한 개 변수)  
적합성 검정 : 실제 표본이 내가 생각하는 분포와 같은가? 다른가?

예) 관찰도수가 기대도수와 일치하는지를 검정

 

이원카이제곱 : 교차분할표 이용

동질성 검증과 독립성 검증 두 유형

 

   동질성 검증: '변인의 분포가 이항분포나 정규분포와 동일하다'라는 가설을 설정

   이는 어떤 모집단의 표본이 그 모집단을 대표하고 있는지를 검증하는 데 사용합니다. 

           

   독립성 검증: 변인이 두 개 이상일 때 사용되며, 기대빈도는 '두 변인이 서로 상관이 없고 독립적'이라고

   기대하는 것을 의미하며 관찰빈도와의 차이를 통해 기대빈도의 진위여부를 확인합니다. 

 

 

Chi-square 검정 절차

 

1. 가설을 설정

 

2. 유의수준을 결정

 

3. 기각값(카이제곱 분포표 참조)을 결정

  -  자유도(df)와 유의수준으로 기각값 결정

 

4. 관찰도수에 대핚 기대도수를 구함

 

5. 검정통계량 x^2의 값을 구함

 

6. 귀무가설의 채택 또는 기각 여부를 판정

 

7. 카이제곱 검정 결과를 설명

 

 

 

1. 일원카이제곱 검정

 

(1) 적합성 검정

 

귀무가설(영가설): 기대치와 관찰치는 차이가 없다(관련성x). : p >= 알파 (유의수준 인계치 값) 
     예) 주사위는 게임에 적합하다. (차이가 없다는 것 = 변수의 차이가 없다는 것) 즉, 확률 1/6

 

 연구가설(대립가설): 기대치와 관찰치는 차이가 있다(관련성o). : p < 알파 (유의수준 인계치 값)
     예) 주사위는 게임에 적합하지 않다. 특정 눈금이 많이 나올 수 있다. 

 귀무가설 채택 = 연구가설 기각 / 귀무가설 기각 = 연구가설 채택
 귀무가설이 증명하기 쉽다.- 일반적으로 귀무가설을 사용
 유의수준에 대한 인계치 값을 정의해야 한다 (사회과학 0.05(95% 신뢰도 보장), 생명분야 0.01(99% 신뢰도 보장))

 

60회 주사위를 던져서 나온 관측도수/기대도수 

주사위수 :  1   2   3   4   5   6
기대도수 : 10, 10, 10, 10, 10, 10  (이론상 균등) 
관측도수 :  4,  6, 17, 16,  8,  9

 

 chisq.test(c(4,6,17,16,8,9))  # 관측도수

chisq.test : 단일 모집단의 모분산에 대한 신뢰구간 추정과 검정 

 

* 모델 관련 함수는 states 패키지에 저장되어 있습니다. 

 

 

2가지 해석 가능 

 

1) x-squared 분포도와 자유도(df) = n-1 ( 6 - 1 = 5)를 가지고 해석

 

< 카이제곱 분포표>

14.2 보다 11.07 로 카이제곱 분포표 보다 더 크므로 연구가설이 채택됩니다. ( X-squared = 14.2 > 11.07 )

결과 : 기무가설 기각, 연구가설 채택 = 주사위의 시행 획수를 통해서 적합하지 않음을 알 수 있습니다.

 

 

 

2) p-value 를 유의수준 인계치 값 활용하여 해석

 

사회과학 분야 이므로 p >= 0.05 이어야 하는데 결과값 = 0.01439 로 범위에 맞지 않기 때문에 연구가설이 채택됩니다. 

결과 : 기무가설 기각, 연구가설 채택 = 주사위의 시행 획수를 통해서 적합하지 않음을 알 수 있습니다.

 

 

 

(2) 선호도 검정(분석)

 

귀무가설:기대치와 관찰치는 차이가 없다. : p >= 알파
   예) 스포츠음료의 선호도에 차이가 없다. 


 연구가설:기대치와 관찰치는 차이가 있다. : p < 알파
   예) 스포츠음료의 선호도에 차이가 있다.

 

 귀무가설 채택 = 연구가설 기각 / 귀무가설 기각 = 연구가설 채택 
 귀무가설이 증명하기 쉽다.- 일반적으로 귀무가설을 사용
 유의수준에 대한 인계치 값을 정의해야 한다 (사회과학 0.05(95% 신뢰도 보장), 생명분야 0.01(99% 신뢰도 보장))

 

- 5개 제품의 스포츠 음료에 대한 선호도에 차이가 있는지 검정 

 

스포츠음료종류  관측도수 
       1                  41
       2                  30
       3                  51
       4                  71
       5                  61

data <- textConnection( # textConnection : text 형태로 받아서 저장
  "스포츠음료종류  관측도수 
      1               41
      2               30
      3               51
      4               71
      5               61
  ")

class(data) 출력값 : [1] "textConnection" "connection" 

x <- read.table(data, header = T)

x # 스포츠음료종류   관측도수
- 출력값 - 

  스포츠음료종류 관측도수
1              1       41
2              2       30
3              3       51
4              4       71
5              5       61

str(x)
- 출력값 - 
'data.frame':	5 obs. of  2 variables:
 $ 스포츠음료종류: int  1 2 3 4 5
 $ 관측도수      : int  41 30 51 71 61
 
 
 chisq.test(x$관측도수)
 

< 카이제곱 분포표>

1) x-squared =20.488 > 9.49 보다 카이제곱 분포표 보다 크므로 연구가설이 채택되고 결과는 스포츠음료의 선호도에 차이가 있음을 알 수 있습니다.

 

2) p-value = 0.0003999 이므로, 0.05보다 작으므로 귀무가설은 긱가되고 연구가설이 채택되고 결과는 스포츠음료의 선호도에 차이가 있음을 알 수 있습니다. 

 

 

 

 

2. 이원카이제곱 검정 - 교차분할표 이용 

 

(1) 독립성 검정(관련성 검정)  

: 동일 집단의 두 변인을 대상으로 관련성이 있는가? 없는가?를 검정하는 방법입니다. 

귀무가설(H0) : 부모의 학력 수준과 자녀의 대학 진학 여부는 관련성이 없다
연구가설(H1) : 부모의 학력 수준과 자녀의 대학 진학 여부는 관련성이 있다

 

위 데이터를 통해서 살펴 보겠습니다. 

 

독립변수(x) = 설명변수, 종속변수(y) = 반응 변수 생성  

x <- data$level2 # 부모의 학력수준
y <- data$pass2  # 자녀의 대학 진학 여부 

CrossTable(x, y, chisq = T)

1) p 의 값이0.2507057으로 0.05 보다 크므로 귀무가설이 채택 되므로 부모의 학력 수준과 자녀의 대학 진학 여부는 관련성이 없다는 결과가 나옵니다. 

 

 

2) 자유도 2(부모님의 학력수(3-1=2) , chi^2 = 2.766951

< 카이제곱 분포표>

 chi^2 값이  2.766951 < 5.99 로 카이제곱 분포표 보다 작으므로 귀무가설이 책택 되어 부모의 학력 수준과 자녀의 대학 진학 여부는 관련성이 없다는 결과가 나옵니다. 

 

 

 

(2) 동질성 검정

: 두 집단의 분포가 동일한가? 분포가 동일하지 않는가?를 검정하는 방법으로 즉, 동일한 분포를 가지는 모집단에서 추출된 것인지를 검정하는 방법

귀무가설 : 교육방법에 따라 만족도에 차이가 없다.
연구가설 : 교육방법에 따라 만족도에 차이가 있다.

 

위의 데이터를 활용하여 살펴보도록 하겠습니다.

(레코드 수 150개, 열 3개(no : 카운팅, method : 교육방법, survey :만족도

 

- 데이터 확인

table(data$method)
-출력값-
 1  2  3  (한반에 50의 학생 1 - PT만 이용교육 , 2 - 실습으로만 교육, 3 - PT, 실습 병행 교육)
 50 50 50  

table(data$survey)
-출력값-
 1  2  3  4  5 (1-매우 만족, 2-만족, 3-보통, 4-불만족, 5-매우 불만족)
 21 29 37 42 21 

 

- 전처리 :  결측치/ method와 survey 변수만 서브셋 생성

data <- subset(data, !is.na(survey), c(method, survey)) # NA 값 배제 , no 배제 

length(data$survey) # [1] 150 (NA(결측치) 값이 없었음)

 

- 변수리코딩 - 코딩 변경 

- method2 필드 추가 
data$method2[data$method == 1] <- "방법1"
data$method2[data$method == 2] <- "방법2"
data$method2[data$method == 3] <- "방법3"


- survey2 필드 추가
data$survey2[data$survey == 1] <- "1. 매우만족"
data$survey2[data$survey == 2] <- "2. 만족"
data$survey2[data$survey == 3] <- "3. 보통"
data$survey2[data$survey == 4] <- "4. 불만족"
data$survey2[data$survey == 5] <- "5. 매우불만족"

 

- 교차분할표 작성 

table(data$method2, data$survey2) - 교차표 생성 -> table(행, 열)
         1. 매우만족 2. 만족 3. 보통  4. 불만족  5. 매우불만족
방법1           5       8      15        16             6
방법2           8      14      11        11             6
방법3           8       7      11        15             9

 

- 교차분할표 생성 

CrossTable(data$method2, data$survey2, chisq = T)

1) 0.5864574 로 0.05보다 크므로 귀무가설을 채택합니다. 그래서 교육방법에 따라 만족도에 차이가 없다. 라는 결과를 가집니다.  

 

 

< 카이제곱 분포표>

2) 6.544668 로 15.51 이 더 크므로 귀무가설을 채택합니다.  그래서 교육방법에 따라 만족도에 차이가 없다. 라는 결과를 가집니다.  

 

 

동질성 검정 - 모수(모집단) 특성치에 대한 추론 검정 

chisq.test(data$method2, data$survey2)

교차분할표 생성하여 나온 결과와 동일합니다. 

 

결과 : p-value = 0.5865 > α(알파: 0.05) : 귀무가설 채택  = 교육방법에 따라 만족도에 차이가 없다. 

+ Recent posts