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 (우도 비율) 유형의 표현식 lmerTest
이 ranova
있습니다. 그러나 나는 이것을 이해하지 못하는 것 같습니다. 귀무 가설 (임의 효과에 대한 제로 분산)이 참일 때 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- 검정의 경우 두 그룹의 개인 값 (평균)의 분산을 간단히 비교합니다. 이러한 수단은 다음과 같이 분배 된 조건 됩니다.제이
와이^I , J~ N( μ제이, σ2제이+ σ2ϵ10)
측정 오차 분산 이 모든 개인과 조건에 대해 동일하고 두 조건 대한 분산 ( )이 같으면 분산 비율 조건 1에서 40 개의 평균에 대해, 조건 2에서 40 개의 평균에 대한 분산은 분자 및 분모에 대한 자유도 39 및 39를 갖는 F- 분포에 따라 분포된다.σ j j = { 1 , 2 }σϵσ제이j = { 1 , 2 }
아래 그래프의 시뮬레이션에서이를 확인할 수 있습니다. 여기서 샘플을 기반으로 한 F- 점수는 모델에서 예측 된 분산 (또는 제곱 오차의 합)을 기반으로 F- 점수가 계산됨을 의미합니다.
이미지는 및 사용하여 10,000 반복으로 모델링됩니다 .σ ϵ = 1σj = 1= σj = 2= 0.5σϵ= 1
약간의 차이가 있음을 알 수 있습니다. 이 차이는 혼합 효과 선형 모델이 (임의 효과에 대한) 제곱 오차의 합계를 다른 방식으로 얻고 있다는 사실에 기인 할 수 있습니다. 그리고이 제곱 오차 항은 더 이상 단순한 카이 제곱 분포로 잘 표현되지 않지만 여전히 밀접한 관련이 있으며 근사 할 수 있습니다.
귀무 가설이 참일 때 (작은) 차이를 제외하고 귀무 가설이 참이 아닌 경우가 더 흥미 롭습니다. 특히 때의 조건 . 평균 의 분포는 해당 뿐만 아니라 측정 오류 에 의존합니다 . 혼합 효과 모델의 경우이 후자의 오류는 '필터링'되며 랜덤 효과 모델 분산에 기반한 F- 점수가 더 높은 검정력을 가질 것으로 예상됩니다.Y I , J σ J σ εσj = 1≠ σj = 2와이^I , Jσ제이σϵ
이미지는 , 및 사용하여 10,000 반복으로 모델링됩니다 .σ j = 2 = 0.25 σ ϵ = 1σj = 1= 0.5σj = 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)))