Наскільки надійні інтервали довіри для lmer-об'єктів через пакет ефектів?


36

EffectsПакет забезпечує дуже швидкий і зручний спосіб для побудови результатів лінійних моделей змішаного ефекту, отриманих через lme4пакет . У effectфункції обчислює довірчі інтервали (ДІ) дуже швидко, але , як заслуговують на довіру цих довірчі інтервали?

Наприклад:

library(lme4)
library(effects)
library(ggplot)

data(Pastes)

fm1  <- lmer(strength ~ batch + (1 | cask), Pastes)
effs <- as.data.frame(effect(c("batch"), fm1))
ggplot(effs, aes(x = batch, y = fit, ymin = lower, ymax = upper)) + 
  geom_rect(xmax = Inf, xmin = -Inf, ymin = effs[effs$batch == "A", "lower"],
        ymax = effs[effs$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

введіть тут опис зображення

Відповідно до CI, обчислених за допомогою effectsпакету, партія "E" не перетинається з партією "A".

Якщо я спробую те ж саме, використовуючи confint.merModфункцію та метод за замовчуванням:

a <- fixef(fm1)
b <- confint(fm1)
# Computing profile confidence intervals ...
# There were 26 warnings (use warnings() to see them)

b <- data.frame(b)
b <- b[-1:-2,]

b1 <- b[[1]]
b2 <- b[[2]]

dt <- data.frame(fit   = c(a[1],  a[1] + a[2:length(a)]), 
                 lower = c(b1[1],  b1[1] + b1[2:length(b1)]), 
                 upper = c(b2[1],  b2[1] + b2[2:length(b2)]) )
dt$batch <- LETTERS[1:nrow(dt)]

ggplot(dt, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
  geom_rect(xmax = Inf, xmin = -Inf, ymin = dt[dt$batch == "A", "lower"], 
        ymax = dt[dt$batch == "A", "upper"], alpha = 0.5, fill = "grey") + 
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

введіть тут опис зображення

Я бачу, що всі КІ перекриваються. Я також отримую попередження, що вказують на те, що функція не змогла обчислити надійні CI. Цей приклад, і мій фактичний набір даних, змушує мене підозрювати, що effectsпакет має ярлики в обчисленні ІС, які можуть бути не повністю затверджені статистиками. Наскільки надійні КІ повертаються за effectфункцією з effectsпакету для lmerоб'єктів?

Що я спробував: Заглянувши у вихідний код, я помітив, що effectфункція покладається на Effect.merModфункцію, яка в свою чергу спрямовує на Effect.merфункцію, яка виглядає приблизно так:

effects:::Effect.mer
function (focal.predictors, mod, ...) 
{
    result <- Effect(focal.predictors, mer.to.glm(mod), ...)
    result$formula <- as.formula(formula(mod))
    result
}
<environment: namespace:effects>

mer.to.glmфункція, здається, обчислює Variance-Covariate Matrix з lmerоб'єкта:

effects:::mer.to.glm

function (mod) 
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}

Це, у свою чергу, ймовірно, використовується у Effect.defaultфункції для обчислення ІС (я, можливо, неправильно зрозумів цю частину):

effects:::Effect.default
...
     z <- qnorm(1 - (1 - confidence.level)/2)
        V <- vcov.(mod)
        eff.vcov <- mod.matrix %*% V %*% t(mod.matrix)
        rownames(eff.vcov) <- colnames(eff.vcov) <- NULL
        var <- diag(eff.vcov)
        result$vcov <- eff.vcov
        result$se <- sqrt(var)
        result$lower <- effect - z * result$se
        result$upper <- effect + z * result$se
...

Я не знаю достатньо про LMM, щоб оцінити, чи це правильний підхід, але, враховуючи обговорення навколо розрахунку інтервалу довіри для LMM, такий підхід видається підозріло простим.


1
Коли у вас довгі рядки коду, я дуже вдячний, якщо ви розділите їх на кілька рядків, тому нам не доведеться прокручувати, щоб побачити все це.
rvl

1
@rvl Код зараз має бути більш читабельним.
Мікко

Відповіді:


52

Усі результати по суті однакові ( для цього конкретного прикладу ). Деякі теоретичні відмінності:

  • як зазначає @rvl, ваша реконструкція ІП без врахування коваріації серед параметрів просто неправильна (вибачте)
  • довірчі інтервали для параметрів можуть бути засновані на довірчі інтервалах Wald (за умови , квадратна логарифмічна правдоподібність поверхні): lsmeans, effects, confint(.,method="Wald"); за винятком lsmeansцих методів ігноруються ефекти обмеженого розміру ("ступеня свободи"), але в цьому випадку він ледь не має ніякої різниці ( df=40практично не відрізняється від нескінченного df)
  • ... або на довірчих інтервалах профілю (метод за замовчуванням; ігнорує ефекти обмеженого розміру, але допускає неквадратичні поверхні)
  • ... або про параметричне завантаження (золотий стандарт - припускає, що модель правильна [відповіді нормальні, випадкові ефекти нормально розподіляються, дані умовно незалежні тощо], але в іншому випадку робиться мало припущень)

Я думаю, що всі ці підходи є розумними (деякі з них більш приблизні, ніж інші), але в цьому випадку він ледь не має значення, яким саме ви користуєтесь. Якщо вас турбує, спробуйте кілька контрастних методів на своїх даних або на імітованих даних, що нагадують ваші власні, і подивіться, що станеться ...

(PS: Я б не дуже велику вагу на те , що довірчі інтервали Aі Eне перекривають один одного Ви повинні були б зробити належну процедуру порівняння парне зробити достовірні висновки про відмінності між цим. Певною пари оцінок. ..)

95% ІС:

введіть тут опис зображення

Код порівняння:

library(lme4)
fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
c0 <- confint(fm2,method="Wald")
c1 <- confint(fm2)
c2 <- confint(fm2,method="boot")
library(effects)
library(lsmeans)
c3 <- with(effect("batch",fm2),cbind(lower,upper))
c4 <- with(summary(lsmeans(fm2,spec="batch")),cbind(lower.CL,upper.CL))
tmpf <- function(method,val) {
    data.frame(method=method,
               v=LETTERS[1:10],
               setNames(as.data.frame(tail(val,10)),
                        c("lwr","upr")))
}
library(ggplot2); theme_set(theme_bw())
allCI <- rbind(tmpf("lme4_wald",c0),
      tmpf("lme4_prof",c1),
      tmpf("lme4_boot",c2),
      tmpf("effects",c3),
               tmpf("lsmeans",c4))
ggplot(allCI,aes(v,ymin=lwr,ymax=upr,colour=method))+
    geom_linerange(position=position_dodge(width=0.8))

ggsave("pastes_confint.png",width=10)

2
Я приймаю цю відповідь як правильну суть і дає приємне порівняння між різними методами. Однак, ознайомтеся з відмінною відповіддю rlv для отримання додаткової інформації.
Мікко

Дякую за відмінну і дуже корисну відповідь. Я правильно розумію, що не можна використовувати CI для порівняння груп / груп, але можна порівняти ефекти. Скажіть, що у мене було дві терапії, кілька осіб та кілька вимірювань у людей. Я б використовував людей як випадковий ефект, оскільки кожен з них містив би x вимірювання. Тоді я хотів знати, чи спричинили ці два методи лікування різні реакції. Чи можу я effectsв цьому випадку використовувати перекриття пакета та CI?
Мікко

5
Це більш загальне питання, яке стосується будь-якого стандартного модельного підходу. Може бути варто окремого питання. (1) Загалом спосіб відповіді на запитання про відмінності між методами лікування полягає у встановленні моделі таким чином, щоб різниця між фокусними процедурами була контрастною (тобто оціночним параметром) в моделі, а потім обчислити р-значення або перевірити, чи включають довірчі інтервали на певному рівні альфа. (продовження)
Бен Болкер

4
(2) перекриття КІ в кращому випадку є консервативним і приблизним критерієм відмінностей між параметрами (на цю тему є кілька опублікованих робіт). (3) Існує окрема / ортогональна проблема з парними порівняннями. Це полягає в тому, що треба належним чином контролювати множинність та незалежність порівнянь (це можна зробити, наприклад, методами в multcompпакеті, але для цього потрібно хоча б трохи турботи)
Бен Болкер

1
Для чого? Ви можете задати нове запитання.
Бен Болкер

20

Схоже, що ви зробили у другому методі - це обчислити довірчі інтервали для коефіцієнтів регресії, а потім перетворити ті, щоб отримати CI для прогнозів. Це ігнорує коваріації між коефіцієнтами регресії.

Спробуйте встановити модель без перехоплення, щоб batchефекти насправді були передбаченнями і confintповернули потрібні інтервали.

Додаток 1

Я зробив саме те, що запропонував вище:

> fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
> confint(fm2)
Computing profile confidence intervals ...
           2.5 %    97.5 %
.sig01  0.000000  1.637468
.sigma  2.086385  3.007380
batchA 60.234772 64.298581
batchB 57.268105 61.331915
batchC 60.018105 64.081915
batchD 57.668105 61.731915
batchE 53.868105 57.931915
batchF 59.001439 63.065248
batchG 57.868105 61.931915
batchH 61.084772 65.148581
batchI 56.651439 60.715248
batchJ 56.551439 60.615248

Ці інтервали, здається, збігаються з результатами effects.

Додаток 2

Ще одна альтернатива - пакет lsmeans . Він отримує ступені свободи та скориговану матрицю коваріації з пакету pbkrtest .

> library("lsmeans")
> lsmeans(fm1, "batch")
Loading required namespace: pbkrtest
 batch   lsmean       SE    df lower.CL upper.CL
 A     62.26667 1.125709 40.45 59.99232 64.54101
 B     59.30000 1.125709 40.45 57.02565 61.57435
 C     62.05000 1.125709 40.45 59.77565 64.32435
 D     59.70000 1.125709 40.45 57.42565 61.97435
 E     55.90000 1.125709 40.45 53.62565 58.17435
 F     61.03333 1.125709 40.45 58.75899 63.30768
 G     59.90000 1.125709 40.45 57.62565 62.17435
 H     63.11667 1.125709 40.45 60.84232 65.39101
 I     58.68333 1.125709 40.45 56.40899 60.95768
 J     58.58333 1.125709 40.45 56.30899 60.85768

Confidence level used: 0.95 

effecteffectconfint±1,96×se

Результати effectі lsmeansсхожі, але при незбалансованій багатофакторній ситуації lsmeansза замовчуванням усереднюються за невикористані коефіцієнти з рівними вагами, тоді як effectваги за спостережуваними частотами (доступні як опція в lsmeans).


Дякую за таке рішення. Інтервали зараз схожіші, хоча не зовсім однакові. Ваша відповідь все ще не відповідає на питання, чи effectsможна довіряти CI з пакета lmerоб’єктам. Я розглядаю можливість використання результатів у публікації та хочу бути впевненим, що КІ розраховуються за затвердженим методом для ЛММ.
Мікко

Скажіть, будь ласка: у Вашому Додатку 1 перші два параметри .sig01та .sigmaрезультати confint, чи є цей інтервал довіри для відхилення ? або довірчий інтервал стандартного відхилення ?
ABC

Вони є CI для будь-яких параметрів, позначених таким чином у моделі. Слід переглянути документацію lmerдля отримання остаточної відповіді. Однак люди зазвичай використовують позначення, як sigmaпосилання на стандартні відхилення, sigma.squareабо sigma^2на посилання на відхилення.
rvl

Чи краще використовувати lmertest, lsmeans або mertools?
скан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.