혼합 효과 모델 : 그룹화 변수 수준에서 랜덤 분산 성분 비교


14

내가 가진 가정 응답을 제공합니다 각각 누구의 참가자, 20 배, 10 조건 하나와 또 다른 10를. 각 조건에서 를 비교하는 선형 혼합 효과 모델에 적합합니다 . 다음은 패키지를 사용하여이 상황을 시뮬레이션하는 재현 가능한 예제 입니다 .NYY와이lme4R

library(lme4)
fml <- "~ condition + (condition | participant_id)"
d <- expand.grid(participant_id=1:40, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))

set.seed(23432)
d <- cbind(d, simulate(formula(fml), 
                       newparams=list(beta=c(0, .5), 
                                      theta=c(.5, 0, 0), 
                                      sigma=1), 
                       family=gaussian, 
                       newdata=d))

m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)

이 모델 m은 2 개의 고정 효과 (조건에 대한 절편 및 기울기)와 3 개의 임의 효과 (참가자 별 무작위 절편, 조건에 대한 참가자 별 무작위 기울기 및 절편-기울기 상관)를 산출합니다.

다음에 의해 정의 된 그룹 전체의 참가자 별 랜덤 절편 분산의 크기를 통계적으로 비교하고 싶습니다 condition(즉, 제어 및 실험 조건 내 에서 빨간색으로 강조 표시된 분산 성분을 계산 한 다음 성분의 크기 차이가 있는지 테스트 함). 0이 아님). 어떻게해야합니까 (R에서 선호)?

여기에 이미지 설명을 입력하십시오


보너스

모델이 약간 더 복잡하다고 가정 해 봅시다. 참가자들은 각각 20 번씩 10 번, 10 번은 10 번, 10 번은 다른 조건으로 경험합니다. 따라서 두 가지 교차 무작위 효과 세트가 있습니다 : 참가자에 대한 무작위 효과와 자극에 대한 무작위 효과. 재현 가능한 예는 다음과 같습니다.

library(lme4)
fml <- "~ condition + (condition | participant_id) + (condition | stimulus_id)"
d <- expand.grid(participant_id=1:40, stimulus_id=1:10, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))

set.seed(23432)
d <- cbind(d, simulate(formula(fml), 
                       newparams=list(beta=c(0, .5), 
                                      theta=c(.5, 0, 0, .5, 0, 0), 
                                      sigma=1), 
                       family=gaussian, 
                       newdata=d))

m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)

에 의해 정의 된 그룹에서 무작위 참가자 간 가로 채기 분산의 크기를 통계적으로 비교하고 싶습니다 condition. 어떻게해야합니까? 프로세스는 위에서 설명한 상황과 다른 것입니까?


편집하다

내가 찾고있는 것에 대해 좀 더 구체적으로 말하고 싶습니다.

  1. "각각의 조건 내의 조건부 평균 반응 (즉, 각 조건의 랜덤 절편 값)이 샘플링 오류로 인해 예상되는 것 이상으로 서로 실질적으로 다른가?"라는 질문이 잘 정의 된 질문입니까 (즉,이 질문입니까? 이론적으로 대답 할 수 있습니까)? 그렇지 않다면 왜 안됩니까?
  2. 질문 (1)에 대한 답변이 예라면 어떻게 대답합니까? R구현 을 선호 하지만 lme4패키지 와 관련이 없습니다. 예를 들어 OpenMx패키지에 다중 그룹 및 다중 수준 분석을 수용하는 기능이있는 것 같습니다 ( https : //openmx.ssri.psu). edu / openmx-features ), 이는 SEM 프레임 워크에서 대답 할 수있는 일종의 질문처럼 보입니다.

1
@MarkWhite, 귀하의 의견에 따라 질문을 업데이트했습니다. 나는 참가자들이 통제 조건에서 응답을 할 때와 실험 조건에서 응답을 할 때의 인터셉트의 표준 편차를 비교하고 싶다는 것을 의미합니다. 통계적으로, 즉 절편의 표준 편차 차이가 0과 다른지 테스트하고 싶습니다.
Patrick S. Forscher

2
나는 답변을 작성했지만 그것이 매우 유용하다는 것을 확신하지 못하기 때문에 잠들 것입니다. 질문은 당신이 요구하는 것을 할 수 있다고 생각하지 않는다는 것입니다. 절편의 무작위 효과는 참가자가 통제 조건에있을 때 참가자의 평균의 분산입니다. 따라서 실험 조건에서의 관찰에 대한 편차를 볼 수 없습니다. 절편은 개인 수준에서 정의되며 조건은 관찰 수준입니다. 조건 사이의 분산을 비교하려고하면 조건부이 분산 모델에 대해 생각할 것입니다.
Mark White

2
나는 자극 세트에 응답하는 참가자가있는 논문을 수정하고 다시 제출하고 있습니다. 각 참가자는 여러 조건에 노출되고 각 자극은 여러 조건에서 응답을받습니다. 즉, 제 연구는 "BONUS"설명에 설명 된 설정을 에뮬레이트합니다. 내 그래프 중 하나에서 평균 참가자 응답이 다른 조건보다 조건 중 하나에서 변동성이 더 큰 것으로 보입니다. 한 검토자가 나에게 이것이 사실인지 테스트 해 보라고 요청했습니다.
Patrick S. Forscher

2
그룹화 변수의 각 레벨에 대해 다른 분산 매개 변수를 사용하여 lme4 모델을 설정하는 방법 은 여기에서 stats.stackexchange.com/questions/322213 을 참조하십시오 . 두 분산 변수가 동일한 지 여부에 대한 가설 검정을 수행하는 방법을 잘 모르겠습니다. 개인적으로, 나는 항상 신뢰 구간을 얻기 위해 피험자와 자극에 부트 스트랩하는 것을 선호하거나 어쩌면 일종의 순열 같은 (리샘플링 기반) 가설 테스트를 설정하는 것을 선호합니다.
amoeba는

3
@MarkWhite의 의견에 동의하는 것은 "임의의 절편 분산이 서로 실질적으로 다른 것입니다 ..."라는 질문은 명확하지 않으며 최악의 경우에는 무의미한 것입니다. 그룹에 0 값을 할당 했으므로 그룹간에 "절편"을 비교하는 것은 의미가 없습니다. 본인이 이해 한대로 귀하의 질문을 다시 표현하는 더 좋은 방법은 다음과 같은 것이라고 생각합니다. "조건 A와 조건 B에서 참가자의 조건부 평균 반응의 차이가 같지 않습니까?"
Jake Westfall

답변:


6

이 가설을 테스트하는 방법은 여러 가지가 있습니다. 예를 들어, @amoeba가 설명한 절차가 작동합니다. 그러나 그것을 테스트하는 가장 간단하고 가장 편리한 방법은 두 개의 중첩 모델을 비교하는 좋은 오래된 우도 비율 테스트를 사용하는 것 같습니다. 이 접근법의 잠재적으로 까다로운 부분은 단일 모수를 제거하여 불균형 분산의 원하는 가설을 명확하게 테스트 할 수 있도록 모델 쌍을 설정하는 방법을 아는 것입니다. 아래에 그 방법을 설명합니다.

짧은 답변

독립 변수에 대한 대비 (합계에서 0으로) 코딩으로 전환 한 다음 전체 모형을 임의의 기울기와 임의의 절편 간의 상관을 0으로 강제하는 모델과 비교할 가능성 비율 테스트를 수행하십시오.

# switch to numeric (not factor) contrast codes
d$contrast <- 2*(d$condition == 'experimental') - 1

# reduced model without correlation parameter
mod1 <- lmer(sim_1 ~ contrast + (contrast || participant_id), data=d)

# full model with correlation parameter
mod2 <- lmer(sim_1 ~ contrast + (contrast | participant_id), data=d)

# likelihood ratio test
anova(mod1, mod2)

시각적 설명 / 직관

이 해답을 이해하려면 관찰 된 데이터에 대해 서로 다른 상관 매개 변수 값이 무엇을 의미하는지 직관적으로 이해해야합니다. (임의로 변하는) 주제별 회귀선을 고려하십시오. 기본적으로 상관 관계 매개 변수는 점을 기준으로 참가자 회귀선이 "오른쪽으로 팬 아웃"(양의 상관 관계) 또는 "왼쪽으로 팬 아웃"(음의 상관 관계)인지 여부를 제어합니다. 여기서 X는 대비 코딩 된 독립 변하기 쉬운. 이 중 하나는 참가자의 조건부 평균 응답에서 불균형 한 차이를 의미합니다. 아래에 설명되어 있습니다.엑스=0

랜덤 상관

이 그림에서 우리는 각 조건에서 각 대상에 대해 여러 관찰을 무시하고 대신 대상의 임의의 기울기를 나타내는 선으로 연결하여 각 대상의 두 임의의 평균을 플로팅합니다. (이는 OP에 게시 된 데이터가 아니라 10 개의 가상 주제의 데이터로 구성됩니다.)

음의 기울기-절편 상관 관계가 강한 왼쪽 열에서 회귀선은 점을 기준으로 왼쪽으로 펼쳐집니다 . 는 도면에 명확하게 볼 수있는 바와 같이 상태에서 피험자의 임의의 방법에서 큰 변동이 오퍼 상태보다 .엑스=0X = 1 X = 1엑스=1엑스=1

오른쪽 열은이 패턴의 반전 미러 이미지를 보여줍니다. 이 경우, 조건 보다 조건 에서 대상체의 랜덤 평균에 큰 차이가있다 .엑스=1엑스=1

가운데 열은 랜덤 슬로프와 랜덤 인터셉트가 상관되지 않은 경우 발생하는 상황을 보여줍니다. 이는 회귀선이 점을 기준으로 오른쪽으로 펼치는만큼 정확하게 왼쪽으로 펼칩니다 . 이것은 두 조건에서 대상의 평균의 분산이 같다는 것을 의미합니다.엑스=0

그것은 우리가 합계 0으로 대비 코딩 방식, 사용했던 것을 여기에 결정적 하지 더미 코드 (즉,에서 그룹을 설정하지 않는 대 ). 그것이 단지 우리가 차이가 동일한 것을 특징으로이 관계가있는 반면 코딩 방식에 따라 경우에만 기울기 절편 상관이 0이면 빌드하려고 아래 그림 직관한다 :엑스=0엑스=1

여기에 이미지 설명을 입력하십시오

이 그림이 보여주는 것은 두 열에서 동일한 정확한 데이터 집합이지만 독립 변수는 두 가지 다른 방식으로 코딩됩니다. 왼쪽 열에는 대비 코드가 사용됩니다. 이는 첫 번째 그림의 상황입니다. 오른쪽 열에는 더미 코드가 사용됩니다. 이것은 절편의 의미를 변경합니다. 이제 절편은 통제 그룹에서 대상의 예측 된 반응을 나타냅니다. 하단 패널은 이러한 변화의 결과를 보여줍니다. 즉, 데이터가 깊은 의미에서 동일하고 조건부 분산이 두 경우 모두 동일하지만 기울기-절편 상관이 더 이상 0에 가까워지지 않습니다. 이것이 여전히 의미가없는 것처럼 보인다면, 이 현상에 대해 더 많이 이야기하는 나의 이전 답변을 연구 하면 도움 될 것입니다.

증명

하자 될 의 반응 번째 조건 하에서 피사체 번째 . (여기서 두 개의 조건 만 있으므로 는 1 또는 2입니다.) 그런 다음 혼합 모델은 로 작성 될 수 있습니다 여기서 는 대상의 임의 가로 채기입니다. 분산 , 는 피험자의 랜덤 기울기이고 분산 , 는 관측 수준 오류 항이고 입니다.와이나는제이케이제이나는케이케이

와이나는제이케이=α나는+β나는엑스케이+이자형나는제이케이,
α나는σα2β나는σβ2이자형나는제이케이코브(α나는,β나는)=σαβ

우리는 표시하고자하는 그

var(α나는+β나는엑스1)=var(α나는+β나는엑스2)σαβ=0.

이 의미의 왼쪽부터 시작하여

var(α나는+β나는엑스1)=var(α나는+β나는엑스2)σα2+엑스12σβ2+2엑스1σαβ=σα2+엑스22σβ2+2엑스2σαβσβ2(엑스12엑스22)+2σαβ(엑스1엑스2)=0.

합산 대비 코드는 및 합니다. 그런 다음 위의 마지막 줄을 이것은 우리가 증명하고자하는 것입니다. (암시의 다른 방향을 설정하기 위해 동일한 단계를 반대로 수행하면됩니다.)엑스1+엑스2=0엑스12=엑스22=엑스2

σβ2(엑스2엑스2)+2σαβ(엑스1+엑스1)=0σαβ=0,

다시 한번 강조 있음이 도시 독립 변수 콘트라스트 (제로 합) 코딩의 경우 , 그 각각의 상태에서 피험자의 임의의 수단의 편차를가 동일한 경우에만 임의의 경사면 랜덤 도청 사이의 상관 관계가 0 인 경우 키 이 모든 점에서 이라는 귀무 가설을 테스트하면 OP에 설명 된 동일한 분산의 귀무 가설을 테스트 할 수 있습니다.σαβ=0

독립 변수가 더미 코딩 된 경우에는 작동하지 않습니다. 특히 및 값을 위의 방정식에 연결하면 엑스1=0엑스2=1

var(α나는)=var(α나는+β나는)σαβ=σβ22.


이것은 이미 훌륭한 답변입니다. 감사합니다! 나는 이것이 내 질문에 대답하는 데 가장 가깝다고 생각하므로, 나는 그것을 받아들이고 당신에게 현상금을 줄 것입니다 (만료 예정), 시간과 에너지가 있다면 대수 칭의를보고 싶습니다.
Patrick S. Forscher

1
@ PatrickS.Forscher 난 그냥 증거를 추가
제이크 서부 몰락 지대

1
@JakeWestfall 내 장난감 예제에서 대상은 두 가지 조건에서 반응을 뒤집 었습니다. 주제는 응답이있는 경우 조건 A의 및 조건 B에 우리가 사용하는 경우, 다음 무슨 일이이 주제에 대한 임의 절편의 BLUP 값이 될 것입니다 모델을? 모든 개체의 BLUP이 0과 같으면 랜덤 절편의 분산도 0입니다. 따라서이 모델은이 장난감 예제에 전혀 맞지 않습니다. 대조적으로, 위에서 정의 된 모델 은 각 주제에 대해 두 개의 BLUP을 가지며 쉽게 및 수 있습니다 . 여기에 뭔가 빠졌습니까? a a a(1 | subject)dummy
amoeba는 Reinstate Monica

1
설명을 해주셔서 감사합니다. @amoeba입니다. 그에 따라 답변을 편집하겠습니다.
Jake Westfall

1
@amoeba 모델에 상관 관계 매개 변수가 없어도 BLUP이 상관 관계가있을 수 있습니다. 그러나 테스트 목적을 위해 절차가 여전히 의도 한대로 작동한다고 생각합니다 (예 : 공칭 유형 1 오류율이 있음). . 즉, BLUP이 더 단순한 모델에서 상관 관계가있는 경우에도 총 우도에 관한 한 효과는 상관 관계가없는 것처럼 보이므로 LR 테스트가 작동합니다. 내 생각에 :)
Jake Westfall

6

lme4 패키지가 기능 하는 추정 신뢰 구간을 사용하여 모델 매개 변수의 유의성을 테스트 할 수 있습니다 confint.merMod.

부트 스트랩 (예 : 부트 스트랩의 신뢰 구간 참조 )

> confint(m, method="boot", nsim=500, oldNames= FALSE)
Computing bootstrap confidence intervals ...
                                                           2.5 %     97.5 %
sd_(Intercept)|participant_id                         0.32764600 0.64763277
cor_conditionexperimental.(Intercept)|participant_id -1.00000000 1.00000000
sd_conditionexperimental|participant_id               0.02249989 0.46871800
sigma                                                 0.97933979 1.08314696
(Intercept)                                          -0.29669088 0.06169473
conditionexperimental                                 0.26539992 0.60940435 

가능성 프로파일 (예 : 프로파일 가능성과 신뢰 구간의 관계는 무엇입니까? 참조 )

> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
                                                          2.5 %     97.5 %
sd_(Intercept)|participant_id                         0.3490878 0.66714551
cor_conditionexperimental.(Intercept)|participant_id -1.0000000 1.00000000
sd_conditionexperimental|participant_id               0.0000000 0.49076950
sigma                                                 0.9759407 1.08217870
(Intercept)                                          -0.2999380 0.07194055
conditionexperimental                                 0.2707319 0.60727448

  • 방법도 'Wald'있지만 이것은 고정 효과에만 적용됩니다.

  • 패키지에는 anova (우도 비율) 유형의 표현식 lmerTestranova있습니다. 그러나 나는 이것을 이해하지 못하는 것 같습니다. 귀무 가설 (임의 효과에 대한 제로 분산)이 참일 때 logLikelihood의 차이 분포는 카이-제곱 분포 가 아닙니다 (참가자 수와 시행 횟수가 높을 경우 우도 비 검정이 의미가있을 수 있음).


특정 그룹의 차이

특정 그룹의 분산에 대한 결과를 얻으려면 다시 매개 변수를 지정할 수 있습니다

# different model with alternative parameterization (and also correlation taken out) 
fml1 <- "~ condition + (0 + control + experimental || participant_id) "

데이터 프레임에 두 개의 열을 추가 한 경우 (비상 관적 '제어'및 '실험적'을 평가하려는 경우에만 필요합니다. 함수 (0 + condition || participant_id)는 상관되지 않은 상태의 여러 요인을 평가하지 않습니다)

#adding extra columns for control and experimental
d <- cbind(d,as.numeric(d$condition=='control'))
d <- cbind(d,1-as.numeric(d$condition=='control'))
names(d)[c(4,5)] <- c("control","experimental")

이제 lmer다른 그룹에 대한 분산을 제공합니다

> m <- lmer(paste("sim_1 ", fml1), data=d)
> m
Linear mixed model fit by REML ['lmerModLmerTest']
Formula: paste("sim_1 ", fml1)
   Data: d
REML criterion at convergence: 2408.186
Random effects:
 Groups           Name         Std.Dev.
 participant_id   control      0.4963  
 participant_id.1 experimental 0.4554  
 Residual                      1.0268  
Number of obs: 800, groups:  participant_id, 40
Fixed Effects:
          (Intercept)  conditionexperimental  
               -0.114                  0.439 

그리고 여기에 프로파일 방법을 적용 할 수 있습니다. 예를 들어 이제 confint는 제어 및 실행 분산에 대한 신뢰 구간을 제공합니다.

> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
                                    2.5 %     97.5 %
sd_control|participant_id       0.3490873 0.66714568
sd_experimental|participant_id  0.3106425 0.61975534
sigma                           0.9759407 1.08217872
(Intercept)                    -0.2999382 0.07194076
conditionexperimental           0.1865125 0.69149396

간단

우도 함수를 사용하여 고급 비교를 얻을 수 있지만 도로를 따라 근사치를 만드는 방법은 여러 가지가 있습니다 (예 : 보수적 인 anova / lrt-test를 수행 할 수는 있지만 원하는 것이 있습니까?).

이 시점에서 실제로 분산 사이의 비교 (이것은 일반적이지 않음)가 무엇인지 궁금합니다. 그것이 너무 정교 해지기 시작하는지 궁금합니다. 왜 분산 (고전 F- 분포와 관련이있는) 의 비율 대신 분산 의 차이가 발생 합니까? 신뢰 구간 만보고하지 않는 이유는 무엇입니까? 우리는 통계적 문제와 실제로 주요 주제 인 통계적 고려 사항에 불필요하고 느슨한 접촉을 할 수있는 고급 경로로 이동하기 전에 한 걸음 물러서서 데이터와 이야기를 명확히해야합니다.

나는 단순히 신뢰 구간 (가설 검정보다 훨씬 더 많은 것을 말해 줄 수 있음)을 진술하는 것보다 훨씬 더 많은 것을해야하는지 궁금합니다. 가설 검정은 대답이 없지만 인구의 실제 분포에 대한 정보는 없습니다. 유의미한 차이로보고되도록 약간의 차이를 만드십시오. (어떤 목적 으로든)이 문제에 더 깊이 들어가기 위해서는 수학 기계가 올바른 단순화를 할 수 있도록 안내하기위한보다 구체적이고 (좁게 정의 된) 연구 문제가 필요하다고 생각합니다 (정확한 계산이 가능할 때 또는 시뮬레이션 / 부트 스트랩 핑으로 근사 할 수 있지만 일부 설정에서는 여전히 적절한 해석이 필요합니다. 피셔의 정확한 테스트와 비교하여 (특별한) 질문 (우발 상황 테이블에 대한)을 정확하게 해결하십시오.

간단한 예

가능한 단순성의 예를 제공하기 위해 개별 평균 반응의 분산을 비교하고 비교하여 수행 한 F- 검정을 기반으로 두 그룹 분산 간의 차이를 간단히 평가하여 비교 (시뮬레이션으로) 아래에 표시합니다. 혼합 모형 파생 분산

F- 검정의 경우 두 그룹의 개인 값 (평균)의 분산을 간단히 비교합니다. 이러한 수단은 다음과 같이 분배 된 조건 됩니다.제이

와이^나는,제이(μ제이,σ제이2+σϵ210)

측정 오차 분산 이 모든 개인과 조건에 대해 동일하고 두 조건 대한 분산 ( )이 같으면 분산 비율 조건 1에서 40 개의 평균에 대해, 조건 2에서 40 개의 평균에 대한 분산은 분자 및 분모에 대한 자유도 39 및 39를 갖는 F- 분포에 따라 분포된다.σ j j = { 1 , 2 }σϵσ제이제이={1,2}

아래 그래프의 시뮬레이션에서이를 확인할 수 있습니다. 여기서 샘플을 기반으로 한 F- 점수는 모델에서 예측 된 분산 (또는 제곱 오차의 합)을 기반으로 F- 점수가 계산됨을 의미합니다.

정확성의 차이의 예

이미지는 및 사용하여 10,000 반복으로 모델링됩니다 .σ ϵ = 1σ제이=1=σ제이=2=0.5σϵ=1

약간의 차이가 있음을 알 수 있습니다. 이 차이는 혼합 효과 선형 모델이 (임의 효과에 대한) 제곱 오차의 합계를 다른 방식으로 얻고 있다는 사실에 기인 할 수 있습니다. 그리고이 제곱 오차 항은 더 이상 단순한 카이 제곱 분포로 잘 표현되지 않지만 여전히 밀접한 관련이 있으며 근사 할 수 있습니다.

귀무 가설이 참일 때 (작은) 차이를 제외하고 귀무 가설이 참이 아닌 경우가 더 흥미 롭습니다. 특히 때의 조건 . 평균 의 분포는 해당 뿐만 아니라 측정 오류 에 의존합니다 . 혼합 효과 모델의 경우이 후자의 오류는 '필터링'되며 랜덤 효과 모델 분산에 기반한 F- 점수가 더 높은 검정력을 가질 것으로 예상됩니다.Y I , J σ J σ εσ제이=1σ제이=2와이^나는,제이σ제이σϵ

힘의 차이의 예

이미지는 , 및 사용하여 10,000 반복으로 모델링됩니다 .σ j = 2 = 0.25 σ ϵ = 1σ제이=1=0.5σ제이=2=0.25σϵ=1

따라서 평균을 기반으로 한 모델은 매우 정확합니다. 그러나 덜 강력합니다. 이것은 올바른 전략이 원하는 / 필요한 것에 달려 있음을 보여줍니다.

위의 예에서 오른쪽 꼬리 경계를 2.1 및 3.1로 설정하면 등분 산의 경우 인구의 약 1 %를 얻지 만 (1 만 건의 경우 103 및 104), 분산이 같지 않은 경우 이러한 경계가 다릅니다. 많은 (사건의 5334와 6716를 준다)

암호:

set.seed(23432)

# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
fml <- "~ condition + (condition | participant_id)"

n <- 10000

theta_m <- matrix(rep(0,n*2),n)
theta_f <- matrix(rep(0,n*2),n)

# initial data frame later changed into d by adding a sixth sim_1 column
ds <- expand.grid(participant_id=1:40, trial_num=1:10)
ds <- rbind(cbind(ds, condition="control"), cbind(ds, condition="experimental"))
  #adding extra columns for control and experimental
  ds <- cbind(ds,as.numeric(ds$condition=='control'))
  ds <- cbind(ds,1-as.numeric(ds$condition=='control'))
  names(ds)[c(4,5)] <- c("control","experimental")

# defining variances for the population of individual means
stdevs <- c(0.5,0.5) # c(control,experimental)

pb <- txtProgressBar(title = "progress bar", min = 0,
                    max = n, style=3)
for (i in 1:n) {

  indv_means <- c(rep(0,40)+rnorm(40,0,stdevs[1]),rep(0.5,40)+rnorm(40,0,stdevs[2]))
  fill <- indv_means[d[,1]+d[,5]*40]+rnorm(80*10,0,sqrt(1)) #using a different way to make the data because the simulate is not creating independent data in the two groups 
  #fill <- suppressMessages(simulate(formula(fml), 
  #                     newparams=list(beta=c(0, .5), 
  #                                    theta=c(.5, 0, 0), 
  #                                    sigma=1), 
  #                     family=gaussian, 
  #                     newdata=ds))
  d <- cbind(ds, fill)
  names(d)[6] <- c("sim_1")


  m <- lmer(paste("sim_1 ", fml1), data=d)
  m
  theta_m[i,] <- m@theta^2

  imeans <- aggregate(d[, 6], list(d[,c(1)],d[,c(3)]), mean)
  theta_f[i,1] <- var(imeans[c(1:40),3])
  theta_f[i,2] <- var(imeans[c(41:80),3])

  setTxtProgressBar(pb, i)
}
close(pb)

p1 <- hist(theta_f[,1]/theta_f[,2], breaks = seq(0,6,0.06))       
fr <- theta_m[,1]/theta_m[,2]
fr <- fr[which(fr<30)]
p2 <- hist(fr, breaks = seq(0,30,0.06))



plot(-100,-100, xlim=c(0,6), ylim=c(0,800), 
     xlab="F-score", ylab = "counts [n out of 10 000]")
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,6), ylim=c(0,800), add=T)  # means based F-score
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,6), ylim=c(0,800), add=T)  # model based F-score
fr <- seq(0, 4, 0.01)
lines(fr,df(fr,39,39)*n*0.06,col=1)
legend(2, 800, c("means based F-score","mixed regression based F-score"), 
       fill=c(rgb(0,0,1,1/4),rgb(1,0,0,1/4)),box.col =NA, bg = NA)
legend(2, 760, c("F(39,39) distribution"), 
       lty=c(1),box.col = NA,bg = NA)
title(expression(paste(sigma[1]==0.5, " , ", sigma[2]==0.5, " and ", sigma[epsilon]==1)))

유용하지만 두 조건에서 분산을 비교하는 방법에 대한 질문은 다루지 않는 것 같습니다.
아메바는

@amoeba이 답변이 문제의 핵심 (임의 분산 성분 테스트에 관한 것)을 발견했습니다. OP가 정확히 원하는 것은 전체 텍스트를 읽기가 어렵습니다. "임의 절편 분산"이란 무엇입니까? (절편과 관련하여 복수가 혼동을 일으킬 수 있습니다.) 한 가지 가능한 사례는 모델을 사용하는 sim_1 ~ condition + (0 + condition | participant_id)"것입니다. 그룹을 위해 결합되어야합니다).
Sextus Empiricus

각 과목은 상태 A에서 평균 반응이 있고 조건 B에서 평균 반응이 있습니다. 문제는 A에서 과목에 대한 분산이 B에서 과목에 대한 분산과 다른지 여부입니다.
amoeba는 Reinstate Monica가

"그룹화 변수 수준에서 랜덤 분산 성분 비교"라는 제목의 작업을 완료하지 못했습니다. 질문의 본문에 혼란스러운 오타가 있음을 알았습니다. 나는 또한 그 질문의 문구를 더 명확하게하려고 노력했다.
Patrick S. Forscher

car::linearHypothesisTest( math.furman.edu/~dcs/courses/math47/R/library/car/html/… )를 사용하여 질문에 대답 할 수 있으며 ,이를 통해 사용자는 적합 모델로 임의의 가설을 테스트 할 수 있습니다. 그러나 @amoeba의 방법을 사용하여 동일한 모델 적합 모델에서 두 임의의 절편을 얻어야이 함수와 비교할 수 있습니다. 나는 또한 방법의 유효성에 대해 조금 불확실하다.
Patrick S. Forscher

5

비교적 간단한 방법 중 하나 anovalme4FAQ에 설명 된대로 우도 비 검정을 사용 하는 것 입니다.

분산이 구속되지 않는 전체 모형 (예 : 두 개의 다른 분산이 허용됨)으로 시작한 다음 두 분산이 동일한 것으로 가정되는 하나의 구속 된 모형에 적합합니다. 우리는 단순히과 비교 anova()(I 설정합니다 REML = FALSE있지만 REML = TRUE으로는 anova(..., refit = FALSE)완전히 가능하다 ).

m_full <- lmer(sim_1 ~ condition + (condition | participant_id), data=d, REML = FALSE)
summary(m_full)$varcor
 # Groups         Name                  Std.Dev. Corr  
 # participant_id (Intercept)           0.48741        
 #                conditionexperimental 0.26468  -0.419
 # Residual                             1.02677     

m_red <- lmer(sim_1 ~ condition + (1 | participant_id), data=d, REML = FALSE)
summary(m_red)$varcor
 # Groups         Name        Std.Dev.
 # participant_id (Intercept) 0.44734 
 # Residual                   1.03571 

anova(m_full, m_red)
# Data: d
# Models:
# m_red: sim_1 ~ condition + (1 | participant_id)
# m_full: sim_1 ~ condition + (condition | participant_id)
#        Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)
# m_red   4 2396.6 2415.3 -1194.3   2388.6                         
# m_full  6 2398.7 2426.8 -1193.3   2386.7 1.9037      2      0.386

그러나이 테스트는 보수적 일 수 있습니다. 예를 들어 FAQ는 다음과 같이 말합니다.

LRT 기반 귀무 가설 검정은 귀값 (예 : σ2 = 0)이 실행 가능한 공간의 경계에있을 때 보수적입니다. 가장 간단한 경우 (단일 랜덤 효과 분산) p- 값은 원래보다 두 배나 큽니다 (Pinheiro and Bates 2000).

몇 가지 대안이 있습니다.

  1. χ2

  2. RLRsim(FAQ에 설명 된대로)를 사용하여 올바른 분포를 시뮬레이션합니다 .

다음에서 두 번째 옵션을 보여 드리겠습니다.

library("RLRsim")
## reparametrize model so we can get one parameter that we want to be zero:
afex::set_sum_contrasts() ## warning, changes contrasts globally
d <- cbind(d, difference = model.matrix(~condition, d)[,"condition1"])

m_full2 <- lmer(sim_1 ~ condition + (difference | participant_id), data=d, REML = FALSE)
all.equal(deviance(m_full), deviance(m_full2))  ## both full models are identical

## however, we need the full model without correlation!
m_full2b <- lmer(sim_1 ~ condition + (1| participant_id) + 
                   (0 + difference | participant_id), data=d, REML = FALSE)
summary(m_full2b)$varcor
 # Groups           Name        Std.Dev.
 # participant_id   (Intercept) 0.44837 
 # participant_id.1 difference  0.13234 
 # Residual                     1.02677 

## model that only has random effect to be tested
m_red <- update(m_full2b,  . ~ . - (1 | participant_id), data=d, REML = FALSE)
summary(m_red)$varcor
 # Groups         Name       Std.Dev.
 # participant_id difference 0.083262
 # Residual                  1.125116

## Null model 
m_null <- update(m_full2b,  . ~ . - (0 + difference | participant_id), data=d, REML = FALSE)
summary(m_null)$varcor
 # Groups         Name        Std.Dev.
 # participant_id (Intercept) 0.44734 
 # Residual                   1.03571 

exactRLRT(m_red, m_full2b, m_null)
# Using restricted likelihood evaluated at ML estimators.
# Refit with method="REML" for exact results.
# 
#   simulated finite sample distribution of RLRT.
#   
#   (p-value based on 10000 simulated values)
# 
# data:  
# RLRT = 1.9698, p-value = 0.0719

보시다시피, REML = TRUE결과는 정확한 결과를 얻었음을 나타냅니다. 그러나 이것은 독자에게 연습으로 남아 있습니다.

보너스와 관련하여 RLRsim여러 구성 요소를 동시에 테스트 할 수 있는지 확실하지 않지만 동일한 경우 동일한 방법으로 수행 할 수 있습니다.


의견 답변 :

θ엑스θ0엑스

이 질문이 합리적인 답변을받을 수 있는지 잘 모르겠습니다.

  • 랜덤 절편은 그룹화 요소의 각 수준에 대한 전체 수준의 특유의 차이를 허용합니다. 예를 들어, 종속 변수가 응답 시간 인 경우 일부 참가자는 더 빠르며 일부는 느립니다.
  • 랜덤 슬로프는 그룹화 인자의 각 레벨이 랜덤 슬로프가 추정되는 인자의 특유한 효과를 허용합니다. 예를 들어, 요인이 일치하는 경우 일부 참가자는 다른 참가자보다 더 높은 일치 효과를 가질 수 있습니다.

랜덤 슬로프가 랜덤 인터셉트에 영향을 줍니까? 어떤 의미에서 이것은 그룹화 요소의 각 레벨이 각 조건에 대해 완전히 특유한 효과를 허용하기 때문에 의미가 있습니다. 결국, 우리는 두 가지 조건에 대한 두 가지 특유한 매개 변수를 추정합니다. 그러나 인터셉트에 의해 포착 된 전체 레벨과 랜덤 슬로프에 의해 포착 된 조건 특정 효과 간의 차이는 중요하며 랜덤 슬로프는 실제로 랜덤 인터셉트에 영향을 줄 수 없습니다. 그러나 여전히 그룹화 수준의 각 수준을 조건의 각 수준에 대해 별개로 허용합니다.

그럼에도 불구하고 내 시험은 여전히 ​​원래 질문이 원하는 것을 수행합니다. 두 조건 간의 분산 차이가 0인지 여부를 테스트합니다. 이 값이 0이면 두 조건의 분산이 같습니다. 즉, 임의의 기울기가 필요하지 않은 경우에만 두 조건의 분산이 동일합니다. 나는 그것이 의미가 있기를 바랍니다.


1
contr.treatment제어 조건이 참조 인 처리 대조 ( )를 사용합니다 (즉, 임의 절편이 계산 됨). 내가 제안하는 매개 변수화는 합 대비 (즉, contr.sum)를 사용하고 절편은 큰 평균입니다. 제어 조건 대신 절편이 큰 평균 일 때 차이가 null인지 테스트하는 것이 더 합리적이라고 생각합니다 (그러나 작성하면 비교적 중요하지 않을 수 있음). singmann.org/download/publications/…
Henrik

1
감사! 내 질문은 약간 다릅니다. (1) 귀하의 답변은 내 질문이 "0과 다른 조건의 임의 기울기"로 줄어드는 것을 암시하는 것 같습니다. 이것이 사실입니까? (2) 만약 (1) "예",이에 대한 임의의 기울기의 또 다른 해석을 제시한다에 대한 답 condition: 그것은 임의 절편의 수준마다 다를 수 있습니다 condition. 이것이 사실입니까?
Patrick S. Forscher

2
내 2 ¢ : @amoeba의 Henrik의 제안 된 절차에 대한 반례는 맞습니다. Henrik는 거의 정확하지만 잘못된 모델 쌍을 비교합니다. Patrick의 질문에 답하는 모델 비교는 Henrik 모델 m_full과 vs. 모델의 비교 m_full2b입니다. 즉 , 랜덤 인터셉트-슬로프 상관이 제로가 아닌 경우- 합산 대비 명암 코딩 파라미터 화 하에서 참가자 대 A의 조건부 평균 응답의 분산이 동일하지 않다 . 랜덤 슬로프 분산 테스트는 필요하지 않습니다. 간결이 설명하는 방법을 생각하려고 ...
제이크 서부 몰락 지대

2
이것은 실제로 올바른 설명이 아니지만 여기 에서 내 대답을 연구 하면 문제에 약간의 빛을 비출 수 있습니다. 기본적으로 상관 관계 매개 변수는 참가자 회귀 라인이 "오른쪽으로 팬 아웃"(양수) 또는 "왼쪽으로 팬 아웃"(음수)을 제어합니다. 이 중 하나는 참가자의 조건부 평균 응답에서 불균형 한 차이를 의미합니다. 그런 다음 합계에서 0으로 코딩하면 X의 올바른 지점에서 상관 관계를 찾을 수 있습니다.
Jake Westfall

2
시간을 찾을 수 있다면 사진과 함께 답을 올리는 것을 고려할 것입니다 ...
Jake Westfall

5

당신의 모델

m = lmer(sim_1 ~ condition + (condition | participant_id), data=d)

이미 제어 조건의 개체 간 분산이 실험 조건의 개체 간 분산과 다를 수 있습니다. 이는 동등한 매개 변수화를 통해보다 명확하게 할 수 있습니다.

m = lmer(sim_1 ~ 0 + condition + (0 + condition | participant_id), data=d)

랜덤 공분산 행렬은 이제 더 간단한 해석을 갖습니다.

Random effects:
 Groups         Name                  Variance Std.Dev. Corr
 participant_id conditioncontrol      0.2464   0.4963       
                conditionexperimental 0.2074   0.4554   0.83

여기서 두 가지 분산은 정확하게 관심있는 두 가지 분산입니다. 제어 조건에서 조건부 평균 반응의 [대상 간] 분산은 실험 조건에서 동일합니다. 시뮬레이션 된 데이터 세트에서 0.25와 0.21입니다. 차이점은 다음과 같습니다.

delta = as.data.frame(VarCorr(m))[1,4] - as.data.frame(VarCorr(m))[2,4]

0.039와 같습니다. 0과 크게 다른지 테스트하고 싶습니다.

편집 : 아래에 설명하는 순열 테스트가 잘못되었음을 깨달았습니다. 제어 / 실험 조건의 평균이 동일하지 않은 경우 의도 한대로 작동하지 않습니다 (무효 상태에서 관측 값을 교환 할 수 없기 때문에). 주제 (또는 보너스 사례의 주제 / 항목)를 부트 스트랩하고에 대한 신뢰 구간을 얻는 것이 더 좋습니다 delta.

아래 코드를 수정하여 시도합니다.


원래 순열 기반 제안 (잘못된)

나는 종종 순열 테스트를 통해 많은 문제를 해결할 수 있다는 것을 알게됩니다. 실제로이 경우 설정이 매우 쉽습니다. 각 주제에 대한 통제 / 실험 조건을 따로 따로 바꾸자. 분산의 차이를 제거해야합니다. 이것을 여러 번 반복하면 차이에 대한 널 분포가 산출됩니다.

(R로 프로그래밍하지는 않습니다. 모두 더 나은 R 스타일로 다음을 다시 작성하십시오.)

set.seed(42)
nrep = 100
v = matrix(nrow=nrep, ncol=1)
for (i in 1:nrep)
{
   dp = d
   for (s in unique(d$participant_id)){             
     if (rbinom(1,1,.5)==1){
       dp[p$participant_id==s & d$condition=='control',]$condition = 'experimental'
       dp[p$participant_id==s & d$condition=='experimental',]$condition = 'control'
     }
   }
  m <- lmer(sim_1 ~ 0 + condition + (0 + condition | participant_id), data=dp)
  v[i,] = as.data.frame(VarCorr(m))[1,4] - as.data.frame(VarCorr(m))[2,4]
}
pvalue = sum(abs(v) >= abs(delta)) / nrep

p=0.7nrep

보너스 사례에 정확히 동일한 논리를 적용 할 수 있습니다.


매우 흥미 롭습니다, 감사합니다! 이 답변의 핵심 통찰력 인 것처럼 재 매개 변수화가 작동하는 이유에 대해 더 많이 생각해야합니다.
Patrick S. Forscher

이상하게도, 답변의 그룹 별 차단 값은 @MartijnWeterings의 답변과 다른 것으로 보입니다.
Patrick S. Forscher

@ PatrickS.Forscher 그는 다른 데이터 세트를 생성하기 때문입니다. 나는 sim_1 ~ 0 + condition + (0 + dummy(condition, "control") + dummy(condition, "experimental") | participant_id)공식 을 사용 하고 내 대답과 같은 결과를 얻을 수 있습니다 .
amoeba는 Reinstate Monica

1
@ PatrickS.Forscher 아니요, 코드로 생성 된 데이터를 시드와 함께 사용했습니다. 순열 테스트를 수행 할 때만 시드를 42로 설정했습니다. 내가 아닌 데이터 세트를 변경 한 사람은 Martijn입니다.
amoeba는 Reinstate Monica

1
이 제안은 확실히 건전합니다. 이미 경험 한 것처럼 다중 수준 데이터에 대한 순열 테스트를 설정하는 것이 완전히 간단하지는 않습니다. 구현하기가 조금 더 쉬운 비슷한 접근 방식은 파라 메트릭 부트 스트래핑 (parametric bootstrapping)입니다. 분포. 놀러 갈 아이디어.
Jake Westfall

0

yijk=μ+αj+dij+eijk,diN(0,Σ),eijkN(0,σ2)
αjjdi=(di1,,diJ)ij
yi1kyi2kABdi

Σ=[σA2σABσABσB2]

σ2σ2

Σ

큰 평균에 해당하는 절편의 분산은 다음과 같습니다.

σ12: =Var (대 평균)=바르(12(+))=14(바르()+바르()+2코브(,)).

대비의 분산은

σ22: =Var (대비)=바르(12())=14(바르()+바르()2코브(,)).

절편과 대비 사이의 공분산은

σ12: =코브(대 평균, 대조)=코브(12(+),12())=14(바르()바르()).

Σ

Σ=[σ12+σ22+2σ12σ12σ22σ12σ22σ12+σ222σ12]=[σ2σσσ2].

Σ

Σ=[σ12σ12σ12σ12]+[σ22σ22σ22σ22]+2[σ1200σ12].

σ12

Σ=[σ12σ12σ12σ12]+[σ22σ22σ22σ22]=[σ12+σ22σ12σ22σ12σ22σ12+σ22]

이는 @Jake 웨스트 폴은 약간 다르게 유래, 등분 가설 테스트 우리 공분산 파라미터가 여전히 제로로 설정하지 / 포함 모델이없이 공분산 파라미터 모델을 비교할 때.

특히, 수행 할 수있는 모델 비교를 변경하지 않습니다 (예 : 자극으로) 다른 교차 임의 그룹화 요소를 도입 즉, anova(mod1, mod2)(선택적 인수를 refit = FALSE사용할 때 REML 추정) 곳 mod1mod2@Jake 서부 몰락 지대가 그랬던 것처럼 정의된다.

σ12σ22

Σ=[σ12σ12σ12σ12]

이는 두 가지 조건이 동일의 편차를가한다는 가설 테스트 그들이 두 상태 사이 (양극) 공분산 동일한 것으로한다.


두 가지 조건이있을 때 (양의) 복합 대칭 구조 에서 두 개의 모수를 갖는 공분산 행렬에 맞는 모형은 다음과 같이 쓸 수도 있습니다.

# code snippet from Jake Westfall
d$contrast <- 2*(d$condition == 'experimental') - 1

# new model
mod3 <- lmer(sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id), 
             data = d, REML = FALSE) 

또는 (범주 형 변수 / 인수 사용 condition)

mod4 <- lmer(sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id), 
             data = d, REML = FALSE)

Σ=[σ12+σ22σ12σ12σ12+σ22]=[σ12σ12σ12σ12]+[σ2200σ22]

σ12σ22Σ

아래 mod1에서 mod3, 및 mod4항복에 해당 하는 것을 볼 수 있습니다 .

# code snippet from Jake Westfall
d$contrast <- 2*(d$condition == 'experimental') - 1

mod1 <- lmer(sim_1 ~ contrast + (contrast || participant_id),
             data = d, REML = FALSE)

mod2 <- lmer(sim_1 ~ contrast + (contrast | participant_id),
             data = d, REML = FALSE)

# new models 
mod3 <- lmer(sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id), 
             data = d, REML = FALSE) 

mod4 <- lmer(sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id), 
             data = d, REML = FALSE)

anova(mod3, mod1)
# Data: d
# Models:
# mod3: sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id)
# mod1: sim_1 ~ contrast + ((1 | participant_id) + (0 + contrast | participant_id))
#      Df    AIC    BIC  logLik deviance Chisq Chi Df Pr(>Chisq)
# mod3  5 2396.9 2420.3 -1193.5   2386.9                        
# mod1  5 2396.9 2420.3 -1193.5   2386.9     0      0          1

anova(mod4, mod3)
# Data: d
# Models:
# mod4: sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id)
# mod3: sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id)
#      Df    AIC    BIC  logLik deviance Chisq Chi Df Pr(>Chisq)
# mod4  5 2396.9 2420.3 -1193.5   2386.9                        
# mod3  5 2396.9 2420.3 -1193.5   2386.9     0      0          1

Σ

Σ=[σ12σ12+σ12σ12+σ12σ12+σ22+2σ12]=[σ12σ12σ12σ12]+[000σ22]+[0σ12σ122σ12]

σ12σ22σ12

σ12σ22

mod4Σ

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.