여정의 기록

분산분석이란 ... 본문

공부중 .../파이썬과 R

분산분석이란 ...

Chelsey 2022. 12. 11. 00:20
728x90

실험계획법에서 가장 대표적으로 사용하는 방법이 분산분석이다.

일원분산분석

  • Y : tensile 섬유의 장력
  • 요인(인자) : pct 목화 함유량
  • 수준 : 5 분류
  • 목화 함유량 수준에 따라 섬유의 장력이 달라지는지 알고 싶어서 분석
  • 실험계획법에서 가장 중요한게 랜덤이다(무엇을 ...?)
  • n 번째 수준의 목화 함유량 평균 - 
  • 전체 평균 mu + 효과 alpha i + error i = Y ij
    여기서 수준별 alpha가 다른가 ... ?
  • (각 값 - 총 평균) = ( 각 값 - 각 수준 평균 ) + ( 각 수준 평균 - 전체 평균 )
    (각 값 - 총 평균)의 제곱의 모든합 = (각 값 - 각 수준평균)의 제곱의 모든 합 + (각 수준 평균 - 전체 평균)의 제곱의 모든 합
    총 변동 = 오차에 대한 요인 + 인자에 대한 요인
    총 제곱합 = 오차에 대한 변동...? + 수준간의 차이 
    변동을 분해 -> 분산 분석표라고 한다!
  • 분산분석표 작성을 통해 수준 간의 차이가 있는지 확인할 수 있다.
  • 분산분석표를 통해 수준간의 차이가 있다는 것을 알았다 -> 어느 수준간의 차이가 있는가를 알아보자 - 다중비교

R

# 그룹별 기술통계량
by(cotton$tensile, cotton$pct, summary)

# 분산분석표 출력
fit = aov(tensile(원하는값) ~ pct(분류), data=cotton)
summary(fit)

다중비교분석

방법 1. Tukey 2. Duncan 3. Schefle

R

# 요인이 하나인 경우
TukeyHSD(fit) # Tukey방법의 다중비교
# a-b 방법의 차이 - p value도 확인할 수 있다.

# 분산분석표내기 위해 선형회귀 적합먼저
fit = lm(tensile ~ pct, data=cotton)
summary(fit)
# 분산분석표임
anova(fit)

Python

# Python
# 선형모형을 적합시킨다음 작업
# 각 수준별로 Mean, SD, SE 95% Conf 구함
rp.summary_cont(data['tensile'].groupby(data['pct'])

# y= ax+b+e 를 먼저 적합시키고
# C : 숫자가 아닌 인자이다.
fit = ols('data.tensile = C(cotton.pct)', data=data).fit()
fit.summary()

각 경우의 수에 따른 coef 값을 확인할 수 있다.

# 분산분석표
sm.stats.anova_lm(fit, typ=2)

 

tukeyhsd 방법에 의한 분산분석표

from statsmodels.formula.api import ols
from statsmodels.stats.multicomp import pairwise_tukeyhsd
from statsmodels.stats.multicomp import MultiComparison

fit = ols('cotton.tensile ~ C(cotton.pct)', data=cotton).fit()
mc = MultiComparison(cotton['tensile'], cotton['pct'])
mc_tukey = mc.tukeyhsd()

이원분산분석

결과값 = 총 합기대값 + 온도에 대한 기대값 + 유리종류에 대한 기대값 + 교호작용효과 + 오차항

위의 모형으로 진행한다.

limbrary(car)
# recode 값을 원하는 것을 바꿔준다.
glass$temperature=recode(glass$temperature, "100=1; 123=2; 150=3;")
# 인자변수로 선언
glass$glass = factor(glass$glass)
glass$temperature = factor(glass$temperature)

# 인자분석
# way1
fit = aov(strength ~ glass + temperature + glass : temperature, data=glass)
# way2
fit = aov(strength ~ glass * temperature, data=glass)
# 분산분석표
summary(fit)

 

시각화

728x90