Оцените степени свободы в линейных смешанных контрастах моделей на больших наборах данных, используя R
У меня есть большой набор данных, который я анализировал с использованием линейной смешанной модели (~600000 наблюдений). Обычно я оцениваю средние наименьших квадратов и делаю парные контрасты, используя пакет lsmeans из lsmeans. Я также использую оценки степеней свободы, чтобы проверить значимость каждого контраста, используя t- статистику, так как много раз у меня на самом деле было довольно небольшое число. Однако я не могу применить lsmeans к своему набору данных. Ниже я показываю пример, в котором я моделирую наборы данных разных размеров.
library(lme4)
library(lsmeans)
SmallData<-data.frame(R=rnorm(10000,23,4),A=sample(letters[1:2],10000,replace=TRUE),B=sample(letters[11:23],10000,replace=TRUE))
MediumData<-data.frame(R=rnorm(100000,23,4),A=sample(letters[1:2],100000,replace=TRUE),B=sample(letters[11:23],10000,replace=TRUE))
LargeData<-data.frame(R=rnorm(600000,23,4),A=sample(letters[1:2],600000,replace=TRUE),B=sample(letters[11:23],10000,replace=TRUE))
modelSmall<-lmer(R ~ B + (1|A),data=SmallData)
modelMedium<-lmer(R ~ B + (1|A),data=MediumData)
modelLarge<-lmer(R ~ B + (1|A),data=LargeData)
Small.lsm<-lsmeans(modelSmall,~B)
Small.lsm
$lsmeans
B lsmean SE df lower.CL upper.CL
k 22.99691 0.05649338 74.85 22.88436 23.10945
l 22.99451 0.05656906 75.68 22.88184 23.10719
Results are averaged over the levels of: C
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
k - l 0.002397375 0.0799509 9992.92 0.03 0.9761
Results are averaged over the levels of: C
Small.lsm<-lsmeans(modelSmall,pairwise~B|C)
Small.lsm
$lsmeans
C = m:
B lsmean SE df lower.CL upper.CL
k 22.98629 0.07980879 294.10 22.82923 23.14336
l 23.01980 0.07946976 286.64 22.86338 23.17621
C = n:
B lsmean SE df lower.CL upper.CL
k 23.00752 0.07996624 292.46 22.85014 23.16490
l 22.96923 0.08053307 304.92 22.81075 23.12770
Confidence level used: 0.95
$contrasts
C = m:
contrast estimate SE df t.ratio p.value
k - l -0.03350181 0.1126268 9996.00 -0.297 0.7661
C = n:
contrast estimate SE df t.ratio p.value
k - l 0.03829656 0.1134942 9994.74 0.337 0.7358
Medium.lsm<-lsmeans(modelMedium,pairwise~B|C) # Memory overload (~70 Gb RAM)
Large.lsm<-lsmeans(modelLarge,pairwise~B|C)
Large.lsm<-lsmeans(modelLarge,pairwise~B|C)
*** caught segfault ***
address 0x7f9de00ff000, cause 'memory not mapped'
Traceback:
1: t(ZZ) %*% EE %*% ZZ
2: t(ZZ) %*% EE %*% ZZ
3: .get_SigmaG(object, details)
4: get_SigmaG.lmerMod(object, details)
5: get_SigmaG(object, details)
6: pbkrtest::vcovAdj.lmerMod(object, 0)
7: lsm.basis.merMod(object, trms, xlev, grid, ...)
8: lsm.basis(object, trms, xlev, grid, ...)
9: ref.grid(object = <S4 object of class "lmerMod">, by = "C", contr = "pairwise")
10: do.call("ref.grid", rgargs)
11: lsmeans.default(object, specs, ...)
12: lsmeans.character.default(object, specs = all.vars(specs[-2]), by = by, contr = contr.spec, ...)
13: lsmeans.character(object, specs = all.vars(specs[-2]), by = by, contr = contr.spec, ...)
14: lsmeans(object, specs = all.vars(specs[-2]), by = by, contr = contr.spec, ...)
15: lsmeans.formula(modelLarge, pairwise ~ B | C)
16: lsmeans(modelLarge, pairwise ~ B | C)
Я также попробовал пакет lmerTest и использовал функцию difflsmeans, и он также потерпел крах. Я могу получить средние оценки с помощью общего теста линейных гипотез - glht из пакета multcomp - но эта процедура не оценивает степени свободы конкретных контрастов. Знаете ли вы какую-либо альтернативу этим процедурам, которая применима к большим наборам данных?
Огромное спасибо.