데이터 세트를 1000 번 대체하여 리샘플링했고 이제 1000 개 데이터 세트 각각에 3 가지 모델을 적용하고 AIC 점수를 포기하려고합니다. 이 절차의 최종 목표는 95 % 신뢰 구간과 함께 모든 모델에서 각 모델에 대한 평균 AIC 점수를 얻는 것입니다. 아래의 코드는 오류가 있으며 어디에서 실수하는지 알 수 없습니다. 최종 행렬에는 처음 몇 번의 반복 (즉, 모두 1000 개가 아닌)의 AIC 점수 벡터 만 포함됩니다. 각 반복마다 주 매트릭스 또는 벡터를 초기화하는 방식에 오류가 있습니까? 아니면 내 행 추가 프로 시저에 결함이 있습니까? 또는 코드가 맞다면이 코드에 입력되는 데이터 세트가있을 수 있습니까? 후자의 경우 코드가이 데이터 세트를 읽고 건너 뛰면 오류가 발생하지 않는 이유는 무엇입니까? 나는 며칠 동안 고생하고 있었고 매우 의아해했기 때문에 어떤 도움을 주시면 감사하겠습니다.혼합 효과 선형 회귀 모델의 AIC 값을 R
require(lme4)
require(lmerTest)
# initializing an empty matrix for storing each vector of AIC scores from each iteration
# the matrix has width 3 because three models are fitted at each iteration
AIC.scores = data.frame(matrix(, nrow = 0, ncol = 3))
#fit regression models to each of 1000 datasets
for(iter in 1:1000){
#retrieving the data set, named accordingly, for the current iteration
data = read.csv(paste("data_set_", iter,".csv", sep=""), header=TRUE)
#initializing vector of AICs from models in current iteration
AIC.score = vector(mode="numeric", length=3)
mod1 = lmer(RT.log ~ crit.var1.log.std +
(1|Subject) +
(1|Item),
data = data,
REML=FALSE)
AIC.score[1] = summary(mod1)$AIC[1]
mod2 = lmer(RT.log ~ crit.var2.log.std +
(1|Subject) +
(1|Item),
data = data,
REML=FALSE)
AIC.score[2] = summary(mod2)$AIC[1]
mod3 = lmer(RT.log ~ crit.var3.log.std +
(1|Subject) +
(1|Item),
data = data,
REML=FALSE)
AIC.score[3] = summary(mod3)$AIC[1]
#adding vector of AICs scores from current iteration to main matrix
AIC.scores = rbind(AIC.scores, t(AIC.score))
cat("bagging iteration", iter, "completed!\n")
}
#renaming column names in AIC score matrix
colnames(AIC.scores) = c("model1", "model2", "model3")
# function for calculating mean AIC and 95% C.I.s for each model across all iterations
norm.interval = function(data, z=1.96) {
mean = mean(data)
variance = var(data)
sd = sqrt(variance/length(data))
c(mean, mean - z * sd, mean + z * sd)
}
for (i in 1:3) {
cat("The mean, lCI, uCI for model", i, "are:", norm.interval(AIC.scores[,i]), "\n")
}
감사합니다. Adam! 코드는 매우 우아하게 보입니다.하지만 코드에 비해 두 개의 루프가 분리되어 있기 때문에 더 오래 걸릴 것으로 보입니다. 내 코드가 어떻게 향상 되었습니까? 내 코드의 어떤 부분이 개선되고 있는지 이해하면 도움이되므로 실수를 식별 할 수 있습니다. 나는 당신이 지적한 것처럼 데이터가 거기에 있지 않기 때문에 가능하지 않을 수도 있다는 것을 안다. –
모든 모델 객체를 중첩 된리스트에서 평가하고 유지한다는 점에서 의미가있다. 즉,'all.lmer.mod [[1]]'은 (는) data_set_1을 사용하여 평가 된 mod1에 대해 3 개의 객체를 포함합니다. 이렇게하면이 객체로 직접 돌아가서 AIC 값, BIC 값, 플롯, 예측 등을 검색 할 수 있습니다. data_set_1에 대한 첫 번째 모델의 AIC를 찾으려면'AIC (all.lmer.mod [[1]] [1])'을 실행하십시오. 이것은 모든 것이'for-loop'로 빌드되면 가질 수없는 옵션입니다. –
'for-loop'에없는 옵션 인 이유는'iter'가 1에서 2로 바뀌면'mod1'은 iter1의 mod1에서 iter2의 mod1로 바뀔 것입니다. –