본문 바로가기
Tools(시뮬레이션, 코딩, 프로그램들)/R, ezSPC

R을 이용한 14주차 예제 문제풀이

by 배고픈 대학원생 2021. 12. 2.
반응형

문제 1번(13 주차 문제3과 동일한 문제이다. 따라서 다중 비교 문제에 대해서만 설명하겠다)

 

2021.12.01 - [시뮬레이션 툴(Simulation Tool)/R, ezSPC] - ezSPC 2.0, R을 이용한 13주차 예제 풀이

 

ezSPC 2.0, R을 이용한 13주차 예제 풀이

문제 1번 자동차의 종류에 따라 연비가 서로 다른지 확인하고 싶다. 동급의 자동차 4 종류에 대해 1 리터당 주행거리 (km)를 측정하였다 . 자동차에 따라 연비가 서로 다르다고 할 수 있는가?(유의

doctorinformationgs.tistory.com

 

13 주차 코드

time=c(
24,24,29,20,21,25,28,27,23,21,24,26,23,24,28,23,23,27,26,25,
18,20,20,24,22,29,23,24,28,19,24,25,21,20,24,22,19,26,22,21,
10,11,8,12,12,10,14,9,8,11,16,12,18,14,13,11,14,9,11,12,
15,13,18,16,12,19,10,18,11,17,15,12,13,13,14,17,16,17,14,16,
33,22,28,35,29,28,30,31,29,28,33,30,32,33,29,35,32,26,30,29)

group=c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20))

rep=c(rep(1:20,5))

data=data.frame(time,group,rep)

boxplot(data[data$group==1,'time'],
data[data$group==2,'time'],
data[data$group==3,'time'],
data[data$group==4,'time'],
data[data$group==5,'time'])

summary(aov(time~as.factor(group),data=data))

 

의 결과가 나옴을 알 수 있었고 대립가설은 최소한 1개의 평균이 서로 다르다는 정보만 주었기 때문에 어느 그룹의 평균과 어느 그룹의 평균이 다른지 알 수 없었다. 그래서 LSD 최소 유의차 검정을 구할 것이다.

 

agricolae라는 패키지를 설치해야한다.

install.packages('agricolae')

국가 및 지역을 선택하고 설치한다. ... 이 안에 우리가 원하는 다중비교 함수가 있기 때문에 이것을 먼저 설치한다.

 

그 다음으로 library를 불러온다

 

library(agricolae)

 

model은 종속변수는 time 그리고 인자 group을 했었다.

따라서 아래와 같다.

 

model=aov(time~group, data=data)

그 다음 핵심인 비교를 선언한다.

comparison=LSD.test(model,'group',p.adj='bonferroni',group=F)
comparison

 

 

위와 같이 결과가 나오는데 MSE 52.268, 자유도 98 mean 20.75, CV, t-value, MSD 가 나옴을 결과 상단 창에서 확인 할 수 있다.

 

test 방법은 피셔의 LSD가 되겠고, 유의 수준은 bonferroni, ntr(number of treatment) 수준 수는 5개 알파는 0.05 일때

 

그룹별 소요 시간의 평균들은 중앙에 있음을 알 수 있다.(box plot으로 확인 했었음)

 

다중 비교 내용은 comparison에 있음을 알 수 있다.

 

1 - 2 에서 모평균차에 대한 가설검정을 할 때에 -4.56 ~ 8.56 이니까 이 신뢰 구간은 의미있는 숫자 0을 포함하고 있다.

µ1=µ2 라고 말할 수 있다.

 

즉 significant하지 않게 나옴을 확인 할 수 있다.

 

1-3 비교를 했더니 0을 포함하지 않고 p-value가 아주 작다. 따라서 기각을 할 수 있다.

1-4 역시 유의수준 0.001에서도 기각이 됨으로 차이가 있다.

1-5는 차이가 없다.

 

이는 지난 포스팅에서 해본 box plot을 통해 보게 되면

 

1-2, 1-5,3-4 는 차이가 없음을 알 수 있고, 2-5는 유의 수준(*가 한개이기 때문에) 0.05에서는 p-value가 0.0134이기 대문에 귀무가설을 기각한다.

 

만약에 alpha가 0.01이면 p-value가 0.0134가 0.01보다 크기 때문에 그 때는 틀리다고 말할 수 없다. 유의 수준을 어떻게 정하느냐에 따라서 결과는 달라질 수 있음을 상기하자

 

 

 

 

어떤 인자의 수준을 통해서 최적의 결과를 얻고자 할 때는 배송에 사용되는 최소의 시간을 보면 된다.

 

 

3이 제일 빠름을 알 수 있고 3은 배송업체 5보다 2배 넘게 느리다를 알 수있음을 확인 가능하다.

따라서 물량을 줄이는 방안으로 개선시킬 수 있다.

 

따라서 의사 결정을 할 때 이런 분산분석 다중비교 이런 결과들을 사용하면 아주 좋다.

 

문제 2번 

 

각 인자들과 교호작용의 효과를 구하시오

 

 

‣ 각 인자의 수준과의 결합으로 새로운 실험조건을 활용함
‣ 모든 인자의 수준 수를 2 개로 하는 경우 2 수준계 요인배치라고 함
‣ 교호작용이란 A 가 반응에 미치는 영향이 B 의 어떤 수준이 선택되는 지에 의존된다고 정의됨

 

풀이

 

 

2^2 요인실험에서

 

낮은 수준은 A0 높은 수준은 A1으로 표현했음을 인지하며, 어느게 낮은수준이며 어느 것이 높은 수준인지 알아야 한다.

따라서

 

A인자의 효과는

 

 

 

B인자의 효과는 

 

 

 

AB 교호효과는

 

 

 

이 값들만 보고 크다 작다를 판별할 수 없다.

 

무가설 및 대립가설의 효과가 있는지 없는지 객관적으로 판정하기 위해 분산분석을 사용한다.

 

 

문제 3

 

대학에서 학업성과를 높이기 위하여 수업형식에 따른 차이가 있는 지 확인하고 최적의 수업형식 조건을 찾기 위하여 다음과 같이 세 개의 인자에 대한 수준계 요인배치 실험을 실시하였다

 

인자 1 : 강의시간(75분과 50분)

인자 2 : 강의자료(PPT 파일과 칠판)

인자 3 : 강의방식(단순 강의와 강의실습)

 

요인배치를 하기 위해서 unrepx라는  package를 인스톨 해야한다.

install.packages('unrepx')

국가 및 지역 선택 후

library(unrepx)

 

X1이라는 변수를 통해서 2의 3승 요인배치 설계를 하기 위한 -1과 1의 조합을 A B C 로 구분해서 하는 명령이 바로 X1이 된다.

X1<-expand.grid(A=gl(2,1,labels=c("-1","1")),
B=gl(2,1,labels=c("-1","1")),
C=gl(2,1,labels=c("-1","1")))

X1이 어떻게 생겼는지 확인하면 아래와 같이 입력 하면 된다.

X1

 

 

낮은 수준을 -1, 높은 수준을 1로 하는 것임을 확인 하자 따라서 1-8까지의 표현은 아래와 같이 표현되는 것이다

(1), A,B,AB,C,AC,BC,ABC 로 표현되는 것이다.

 

각 조건에서 데이터를 구했더니 73,70,77,83,85,74,87,89이 나온다.

이를 넣는다

Y<-c(73,70,77,83,85,74,87,89)

 

다음 단계로 데이터를 하기 위해서 Y와 X1을 컬럼 Y로 엮는다.

 

data=cbind(X1,Y)
data

 

 

unrepx packages를 불러온 것은 바로 이 함수를 사용하기 위함이다.

ABC에 대한 주효과를 계산하는 함수가 바로 yates 함수가 된다.

yates(data$Y,c("A","B","C"))

 

각각의 주효과는 아래와 같이 나온다.

 

 

다음에는 회귀분석을 적용한다 왜냐면 이런 배치도 그렇고 모든 실험 계획법이 종속변수 Y는 각 인자들과의 관계식을 통해 나타나는 것이기 때문에 

 

 

model=lm(Y~A*B*C, data=data)

 

linear model(lm) Y는 ABC 모든 인자 수준들에 대해서 주효과 교호작용 세 인자 교호작용까지 다 포함하는 것을 이야기 한다.

 

결과를 보도록 한다.

 

summary(model)

 

 

각각에 대한 값들이 나오고 A,B,AB,C,AC,BC,ABC에 대해서 estimate 값들이 나왔고 standard error(std. Error)가 안나왔다.

not available이다. estimate값을 std. error로 나와야 t값이 나오고, p값을 통해 이 인자는 수준간 차이가 있다 없다를 판단할 수 있는데 나오지 않았다.

 

이는 바로 반복을 한번만 했기 때문에 총 데이터가 8개다 그리고 총 자유도는 7개이다 그리고 각 인자의 자유도가 하나씩이고 1부터 7, 결과적으로 오차항에 대한 잔차가 없다 오차항에 대한 자유도를 확보하지 못했기 때문에 오차항에 대한 mean squared error(MSE)를 계산할 수 없다는 이야기이다. 이럴 때는 가장 많은 정보를 포기하더라도 ABC 세 인자의 교호작용을 무시하고 이 값을 오차항으로 풀링할 수 있지만, 이것을 보여주는 이유는 실험 계획을 수립할 때는 반드시 반복화 원리를 적용해야한다.

최소한 두 번 이상의 반복실험을 하는 것이 필요하다 왜냐면 이렇게 중요한 인자 수준 간의 차이에 대해서 효과에 대해서 가설 검정을 할 수가 없다는 결과가 나오기 때문이다.

 

그래서 이런 문제를 보완하기 위해 반복 수를 두번 하는 것으로 한다. 그러기 위해서는 새로운 데이터 세트에 형식을 만드는 것이다.

 

ss.data.doel <- data.frame(rep1=rep(1:2,each=8),rbind(X1))

 

위 코드에서 data.frame은 replication이 2개가 있고 그 다음에 각각 8개씩 데이터가 있고 그 다음에 rbind(X1)이 반복 수가 있을 때 사용하는 기능이된다.

 

데이터는 첫 번째 반복수 데이터와 아까와 같은 데이터이다.

V1=c(73,70,77,83,85,74,87,89)
V2=c(78,79,81,90,84,85,80,94)  .... 이 부분은 이해가 가지 않음

 

그 다음에 다시 데이터는 V1, V2를 합친 것이다.

data=data.frame(V1,V2)

 

반복 수가 있을 때 각 인자의 주 효과를 교호작용을 계산해보기 위해서 두 데이터를 합해서 사용해야 하고 yates 함수를 다시 이용한다.

 

sum=V1+V2
yates(sum,c("A","B","C"))

 

 

데이터 두개가 합해진 것을 확인해볼수 있다.

 

 

그 다음에 분산 분석을 하기 위한 데이터에서 response만 따로 묶어 내고이 데이터를 가지고 regression linear modeling을 하고 결과를 보게 되면 아래와 같다.

 

ss.data.doel$response=c(data$V1, data$V2)
model=lm(response~A*B*C, data=ss.data.doel)
summary(model)

 

 

인터셉트 상수 부분과 std.error, t value, p-value가 구해졌다. 시그마 제곱 햇을 계산했기 때문에 std. error를 계산할 수 있다.

 

A1에 대한 P-Value에서 A1과 A0간의 평균에는 차이가 없다 나머지도 마찬가지

 

전체적으로 봤을 때 R-squared가 0.717이 나온 것을 보면 인자 abc들하고 Y하고 어떻게 보면 나름 설명력과 관계가 있음을 알 수 있다.

 

그 다음에 F-statistic을 봐도 p-value가 0.07 고로 모든 인자가 0이냐 효과 없느냐고 할 때 없다고 이야기하고 있는 것이다.

 

이 예제를 통해 반복수가 중요함을 강조한다.

 

 

문제 4 2의 4승 요인 배치법

 

전문가에 의하면 커피 맛을 결정하는 요소는 크게 네 가지 배전도 분쇄도 TDS, 물의 온도 라고 한다 . 배전도란 커피 생두를 얼마나 볶았느냐 정도이고 분쇄도는 그라인더에서 커피를 얼마나 갈았느냐 정도이고 TDS 는 물의 무기질 함량 정도이다 좋은 커피 맛을 확보하기 위하여 다음과 같은 실험을 진행하였다

심사자가 3 회씩 커피의 맛을 점수화한다.

이때 커피 맛은 1~10 사이의 값으로 나타낸다.
동일한 원두를 사용하고 원두를 볶는 온도는 200 C 로 한다
실험 인자는 배전도(A) 분쇄도 (B) TDS(C), 물의 온도 (D) 이고 각 인자는 다음과 같이 두 수준으로 한다

 

 

2의 4승 요인 배치법을 이용하려 분석하라.

 

풀이

 

X1<-expand.grid(A=gl(2,1,labels=c("-1","1")),
B=gl(2,1,labels=c("-1","1")),
C=gl(2,1,labels=c("-1","1")),
D=gl(2,1,labels=c("-1","1")))

X1

 

data.frame은 rep이 5회씩 잇고 그 다음에 반복 때마다 총 16번의 데이터가 있고 반복 수가 있기 대문에 rbindX1을 사용할 수 있다.

ss.data.doel <- data.frame(rep1=rep(1:5,each=16),rbind(X1))

 

각 데이터 입력

V1=c(10,6,7,8,7,7,10,10,10,7,6,6,7,10,6,9)
V2=c(9,8,7,10,9,8,10,9,7,7,6,10,5,8,5,7)
V3=c(9,10,10,9,10,9,9,8,9,8,8,9,10,9,10,9)
V4=c(8,7,7,10,10,6,7,10,10,9,9,9,6,9,9,7)
V5=c(10,9,10,9,10,10,9,10,10,10,9,9,10,10,10,10)

 

데이터의 data.frame 입력

data=data.frame(V1,V2,V3,V4,V5)
sum=V1+V2+V3+V4+V5
yates(sum,c("A","B","C","D"))

 

 

다음으로 분산분석을 하기 위한 절차

 

ss.data.doel$response=c(data$V1, data$V2, data$V3, data$V4, data$V5)
model=lm(response~A*B*C*D, data=ss.data.doel)
anova(model)

 

MS MSE가 나오고 F & P value를 볼 수 있다.

 

결과를 보면 어떠한 것이든 유의한 것이 없다.

반응형

댓글