상호 작용이있는 혼합 효과 모델 (lme4)에 대한 multcomp :: glht의 사후 테스트


10

R( lme4package) 의 선형 혼합 효과 모델에서 사후 테스트를 수행하고 있습니다. 내가 사용하고 multcomp패키지 ( glht()후 임시 테스트를 수행하는 기능).

내 실험 설계는 임의의 블록 효과로 반복 측정됩니다. 모델은 다음과 같이 지정됩니다.

mymod <- lmer(variable ~ treatment * time + (1|block), data = mydata, REML = TRUE)

여기에 내 데이터를 첨부하는 대신 패키지 warpbreaks내에서 호출 된 데이터 를 처리하고 multcomp있습니다.

data <- warpbreaks
warpbreaks$rand <- NA

"블록"효과를 모방하기 위해 추가 임의 변수를 추가했습니다.

warpbreaks$rand <- rep(c("foo", "bar", "bee"), nrow(warpbreaks)/3)

이것은 내 모델을 모방합니다.

mod <- lmer(breaks ~ tension * wool + (1|rand), data = warpbreaks) 

" 추가 Multcomp 예 -2 방법 Anova" 의 예를 알고 있습니다. 이 예는의 레벨 내에서 장력 레벨을 비교 wool합니다.

내가 반대를 수행하려는 경우 - 수준의 비교 wool의 수준에서 tension? (제 경우에는 시간 수준 (3-6 월, 7 월, 8 월) 내에서 치료 수준 (2-0, 1)을 비교하는 것입니다.

그렇게하기 위해 다음 코드를 생각해 냈지만 작동하지 않는 것 같습니다 (아래 오류 메시지 참조).

먼저, 예에서 ( 장소 wooltension교환 한 장소) :

tmp <- expand.grid(wool = unique(warpbreaks$wool), tension = unique(warpbreaks$tension))
X <- model.matrix(~ tension * wool, data = tmp)
glht(mod, linfct = X)

Tukey <- contrMat(table(warpbreaks$wool), "Tukey")

K1 <- cbind(Tukey, matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)))
rownames(K1) <- paste(levels(warpbreaks$tension)[1], rownames(K1), sep = ":")

K2 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(warpbreaks$tension)[2], rownames(K2), sep = ":")

여기에서 내 자신의 코드 :

K3 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(warpbreaks$tension)[3], rownames(K3), sep = ":")

K <- rbind(K1, K2, K3)
colnames(K) <- c(colnames(Tukey), colnames(Tukey))

> summary(glht(mod, linfct = K %*% X))
Error in summary(glht(mod, linfct = K %*% X)) : 
  error in evaluating the argument 'object' in selecting a method for function 'summary': Error in K %*% X : non-conformable arguments

답변:


6

lsmeans 패키지를 사용하는 것이 훨씬 쉽습니다

library(lsmeans)
lsmeans(mod, pairwise ~ tension | wool)
lsmeans(mod, pairwise ~ wool | tension)

잘 작동합니다! 감사. 참고 :이 코드는 반복 변수를 숫자 값 (3 & 6)에서 알파벳 값 (A & B)으로 변경 한 후에 만 ​​데이터에 적용되었습니다.

글쎄, 그것은 매우 중요하다! 수치 예측 변수 와 다른 모델 이기 때문 time입니다. 나는 당신이 그것을 요인으로 원했다고 생각합니다.
Russ Lenth

더 많은 예측 변수를 일반화하려면 어떻게해야합니까? 예를 들어 예측 변수가 3 개인 경우 어떻게 작동합니까?
이 재미

1
@havefun 제발 봐 help("lsmeans", package = "lsmeans")vignette("using-lsmeans"). 많은 문서와 예제가 있습니다.
Russ Lenth

1
각 방법으로 얻은 비교 횟수를 세십시오. 동일하지 않습니다. 여러 테스트 조정에 대해서도 읽어보십시오. 더 큰 테스트 제품군을 사용하는 경우 조정 된 P 값은 더 작은 제품군과 다릅니다. by 변수를 사용하면 조정이 각 세트에 개별적으로 적용됩니다.
Russ Lenth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.