대비 코드를 사용하여 R에서 Type-III SS ANOVA를 어떻게 수행합니까?


26

-3, -1, 1, 3 대비로 개체 간 분산 분석을 수행 할 수있는 R 코드를 제공하십시오. 그러한 분석에 적절한 SS (Sum of Squares) 유형에 관한 논쟁이 있음을 이해합니다. 그러나 SAS 및 SPSS (Type III)에 사용되는 기본 SS 유형은 필자의 지역 표준으로 간주됩니다. 따라서이 분석 결과가 해당 통계 프로그램에 의해 생성 된 결과와 완벽하게 일치하도록하고 싶습니다. 답변을 받으려면 aov ()를 직접 호출해야하지만 다른 답변은 투표 할 수 있습니다 (이해하기 쉽고 이해하기 쉬운 경우).

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

편집 : 요청한 대비는 단순한 선형 또는 다항식 대비가 아니라 이론적 예측, 즉 Rosenthal과 Rosnow가 논의 한 대비 유형에 의해 파생 된 대비입니다.


5
Type III 합계가 필요하다는 것을 이해하지만이 ( stats.ox.ac.uk/pub/MASS3/Exegeses.pdf ) 기사를 잘 읽으십시오. 흥미로운 점을 보여줍니다.
suncoolsu

귀하의 질문에 관해서는 다음 토론에 관심이있을 것입니다 : stats.stackexchange.com/questions/60362/… 분산 분석 유형 I, II 및 III 중에서 선택하는 것은 쉬운 일이 아닙니다.
phx

몇 가지 학습 된 답변을 유발한다는 점에서 귀하의 질문을 유용한 것으로 판명했지만, 귀하는 기본적으로 질문의 전제가 잘못되었다고 응답 한 응답자와 동의 한 것에 주목합니다. 정의 된 대조가 "유형 I"에 의한 것이라고 정의하고 다른 유형에 대한 논의는 부분 회귀 통계를 평가할 때만 관련이 있다고 StaGuy의 입장을 요약하기를 바랍니다.
DWin

@DWin : 전적으로 당신을 따르는 지 모르겠습니다. '기계가 운전을하게'하지 않으면서도 다른 유형의 SS를 합법적으로 사용할 수 있습니다. 여기서 약간 녹슬지 만 메모리가 제공되면 부분 회귀를 사용하지 않을 때 다른 유형이 관련 될 수 있습니다. 예를 들어, 유형 III SS는 상호 작용에서 주요 효과를 부분적으로 나타내지 않습니다. 타입 III은 타입 III가 부분적인 것이 아니라 타입 I은 그렇지 않기 때문에 타입들 사이의 구별이 중요합니다. 언급 된 바와 같은 문제는 단지 하나의 대조만을 포함하므로, SS 유형의 구별은 무질서하다.
russellpierce

제 이해는 유형 III SSS 선택에 대한 SAS의 이론적 근거 (그리고 사람들이 유형 III을 선호한다고 생각하는 이유 인 것 같습니다)는 앞뒤 선택 프로세스를 더 잘 지원한다는 것입니다.
DWin

답변:


22

ANOVA의 유형 III 제곱합은 자동차 패키지 의 Anova()기능을 통해 쉽게 사용할 수 있습니다 .

대비 코딩은 C(), contr.*패밀리 (@nico로 표시)를 사용하거나 contrasts()함수 / 인수를 직접 사용하여 여러 가지 방법으로 수행 할 수 있습니다 . 이에 대한 자세한 내용은 S (Springer, 2002, 4 판 )와 Modern Applied Statistics 의 6.2 (pp. 144-151)에 자세히 나와 있습니다. 참고 aov()단지 래퍼 함수 lm()기능. 모델의 오차 항을 제어하고 싶을 때는 흥미롭지 만 (예 : 개체 내 설계에서와 같이) 동일한 결과를 얻습니다 (그리고 모델에 맞는 방법에 관계없이 ANOVA 또는 LM-을 출력 할 수 있음) 와 같은 요약 summary.aov또는 summary.lm).

SPSS가 두 출력을 비교할 수는 없지만

> library(car)
> sample.data <- data.frame(IV=factor(rep(1:4,each=20)),
                            DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> Anova(lm1 <- lm(DV ~ IV, data=sample.data, 
                  contrasts=list(IV=contr.poly)), type="III")
Anova Table (Type III tests)

Response: DV
            Sum Sq Df F value    Pr(>F)    
(Intercept)  18.08  1  21.815  1.27e-05 ***
IV          567.05  3 228.046 < 2.2e-16 ***
Residuals    62.99 76                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

먼저 시도해 볼 가치가 있습니다.

R과 SAS의 요소 코딩 정보 : R은 기준 또는 참조 수준을 사전 순서의 첫 번째 수준으로 간주하지만 SAS는 마지막 수준을 고려합니다. 따라서, 비교 결과를 얻을 수, 중 당신은 사용해야하는 contr.SAS()나에게 relevel()당신의 R 계수.


1
이 답변에 내가 지정한 -3, -1,1,3 대비를 사용한다고 생각하지 않으며 대비에 대한 1 df 테스트를 제공하지 않는 것 같습니다.
russellpierce

@drknexus 네, 맞습니다. 너무 빨리 썼습니다. 같은 Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")것이 더 좋을 것입니다. 괜찮 으시면 알려주십시오.
chl

감사! 괜찮아 보입니다. 내일 SPSS에 대해 유효성을 검사하고 다시 연락 드리겠습니다.
russellpierce

1
BTW, Anova 코드를 감싸기위한 ez 패키지 ( cran.r-project.org/web/packages/ez/index.html )를 살펴보십시오 ...
Tal Galili

2
@drknexus : 기능 요청 및 ez 제출 페이지 만있는 경우 ... github.com/mike-lawrence/ez/issues :)
Mike Lawrence

11

이것은 약간의 자기 승진처럼 보일 수 있습니다 (그리고 나는 그것이 있다고 가정합니다). 그러나 이러한 종류의 상황을 정확하게 처리하도록 설계된 R 용 lsmeans 패키지 (CRAN에서 사용 가능)를 개발했습니다. 다음은 예제에서 작동하는 방법입니다.

> sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> sample.aov <- aov(DV ~ factor(IV), data = sample.data)

> library("lsmeans")
> (sample.lsm <- lsmeans(sample.aov, "IV"))
 IV    lsmean        SE df   lower.CL  upper.CL
  1 -3.009669 0.2237448 76 -3.4552957 -2.564043
  2 -3.046072 0.2237448 76 -3.4916980 -2.600445
  3  1.147080 0.2237448 76  0.7014539  1.592707
  4  3.049153 0.2237448 76  2.6035264  3.494779

> contrast(sample.lsm, list(mycon = c(-3,-1,1,3)))
 contrast estimate       SE df t.ratio p.value
 mycon    22.36962 1.000617 76  22.356  <.0001

원하는 경우 목록에서 추가 대비를 지정할 수 있습니다. 이 예제에서는 내장 선형 다항식 대비를 사용하여 동일한 결과를 얻을 수 있습니다.

> con <- contrast(sample.lsm, "poly")
> con
 contrast   estimate        SE df t.ratio p.value
 linear    22.369618 1.0006172 76  22.356  <.0001
 quadratic  1.938475 0.4474896 76   4.332  <.0001
 cubic     -6.520633 1.0006172 76  -6.517  <.0001

이를 확인하기 위해 "poly"사양에서 호출하도록 지시 poly.lsmc하면 다음과 같은 결과가 나타납니다.

> poly.lsmc(1:4)
  linear quadratic cubic
1     -3         1    -1
2     -1        -1     3
3      1        -1    -3
4      3         1     1

여러 대조의 공동 테스트를 할 경우, 사용 test과 기능을 joint = TRUE. 예를 들어

> test(con, joint = TRUE)

"유형 III"테스트가 생성됩니다. 와 달리 car::Anova(), 모델 맞춤 단계에서 사용되는 대비 코딩에 관계없이 올바르게 수행됩니다. 테스트중인 선형 함수는 모델 축소를 통해 암시 적으로가 아니라 직접 지정되기 때문입니다. 추가 기능은 테스트중인 대비가 선형으로 의존하는 경우가 감지되고 올바른 테스트 통계 및 자유도가 생성된다는 것입니다.



7

대비를 수행 할 때 적절한 오류 항의 컨텍스트 내에서 셀 수단의 구체적이고 명시된 선형 조합을 수행합니다. 따라서 "SS 유형"이라는 개념은 대조적으로 의미가 없습니다. 각 대비는 본질적으로 유형 I SS를 사용하는 첫 번째 효과입니다. "SS의 유형"은 다른 용어에 의해 부분적으로 설명되거나 설명되는 것과 관련이 있습니다. 대조적으로, 부분적으로 설명되거나 설명되지 않습니다. 대조는 그 자체입니다.


너가 확실히 맞아.
russellpierce

3

유형 III 시험이 작업장에서 사용된다는 사실은 시험을 계속 사용해야하는 가장 약한 이유입니다. SAS는 이와 관련하여 통계에 큰 피해를 입혔습니다. 위에서 언급 한 Bill Venables의 주석은 이에 대한 훌륭한 자료입니다. 유형 III을 거부하면됩니다. 그것은 균형의 잘못된 개념을 기반으로하며 불균형 한 경우 셀의 바보 같은 가중치로 인해 전력이 낮습니다.

보다 명료하고 오류가 발생하기 쉬운 일반적인 대조 방법은 R rms패키지 contrast.rms기능 을 통해 제공됩니다 . 대비는 매우 복잡 할 수 있지만 예측 값의 차이로 표시되므로 사용자에게는 매우 간단합니다. 테스트 및 동시 대비가 지원됩니다. 이것은 비선형 회귀 효과, 비선형 상호 작용 효과, 부분 대비, 모든 종류의 것들을 처리합니다.


그것은 평판이 좋은 평판을 가진 사람으로서 당신에게 모두 훌륭하고 좋습니다. 다른 사람들은 리뷰어들에 동의하지 않습니다. 통계에 대한 해석이 다르기 때문에 새로운 사람들에게 원칙에 따라 불합리한 비용이 발생하도록 요구할 것입니다. 나는이 (그리고 비슷한) 언덕 위에서 나의 시간의 일부를 죽인 누군가라고 말한다. 이 전선의 IMO 변경은 게이트 키퍼, 즉 편집자와 검토 자의 책임입니다.
russellpierce

데이터에 능숙한 사람들은 다양한 직업을 선택할 수 있으며 자신의 기술과 의견이 존중되는 분야에서 일할 수있는 옵션이있을 수 있습니다.
Frank Harrell

1
... 그게 내가 지금하는 일입니다. 그러나이 질문에 도달하는 사람들은 종종 그 수업에 참여하지 않을 것입니다. 내가 7 년 전에 없었던 것처럼. 나는 초보자와 그들의 상황에 대한 약간의 공감만을 주장합니다.
russellpierce

2

자동차 라이브러리에서 Anova 명령을 사용해보십시오. type = "III"인수는 기본값이 유형 II로 사용되므로 사용하십시오. 예를 들면 다음과 같습니다.

library(car)
mod <- lm(conformity ~ fcategory*partner.status, data=Moore, contrasts=list(fcategory=contr.sum, partner.status=contr.sum))
Anova(mod, type="III")

3
무어가 자동차 라이브러리에 있다는 것을 알고 있지만 샘플 데이터를 제공 할 때 샘플 데이터를 사용하면 질문자가 응답을 이해하기가 더 쉽습니다.
russellpierce

0

또한 자체 홍보, 나는 이것을 정확하게 위해 함수를 썼습니다 : https://github.com/samuelfranssens/type3anova

다음과 같이 설치하십시오 :

library(devtools)
install_github(samuelfranssens/type3anova)
library(type3anova)

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

type3anova(lm(DV ~ IV, data = sample.data))

또한 car패키지가 설치되어 있어야합니다.


질문의 대조 부분에 이것을 어떻게 적용 하시겠습니까?
russellpierce

1
사과, 나는 질문을 제대로 읽지 못했습니다. 내 기능은 III 형 Anova 수행을 단순화 할뿐입니다. 위의 StatGuy와 마찬가지로 특정 대비를 테스트 할 때 SS가 어디에 사용되는지 알 수 없습니다.
sam_f
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.