Загрузочные доверительные интервалы для прогнозируемых данных перекрываются, когда фиксированные эффекты не совпадают

Примечание. Это может быть более подходящим для перекрестной проверки, и я могу переместить его туда, если потребуется, но я решил сначала попробовать здесь, поскольку это может быть связано с r.

Я сравниваю оценки параметров кривой роста между двумя группами, используя нелинейные смешанные модели с nlme. Я использую boot_nlme() из nlraa для начальной загрузки доверительных интервалов для оценок параметров модели и прогнозируемых данных.

Ниже приведен код, который я использую, но с penguin.data из FlexParamCurve. Он не имеет такой же проблемы, но предоставляет код в удобном формате. Если этого недостаточно, я могу редактировать свои собственные данные.

Что касается моих личных данных, моя проблема связана с перекрытием CI прогнозируемых данных (т. е. отсутствием статистической разницы) на асимптоте, когда в соответствии с моделью и оценочными CI с начальной загрузкой параметров они не перекрываются (т. е. не показывают статистическую разницу).

Мой вопрос: Почему загружаемые CI оценок параметров модели оспаривают CI прогнозируемых данных из той же модели? Может быть, я не совсем понимаю метод начальной загрузки? Или может быть что-то еще, что мне не хватает (связанное с кодом)?

Любая помощь/понимание будет оценено по достоинству.

library(FlexParamCurve) #loads dataset and  package 'nlme'
library(ggplot2)
library(nlraa)
library(boot)
library(dplyr)
library(car)



VarFunc.Auto<-varPower(form=~fitted(.))

##creating model

richards.func <- function(age, A, Ti, k, d){
  A * (1 + (d - 1) * exp(( (-k) * (age - Ti)) / ( d ^ ( d / (1 - d))))) ^ (1 / (1 - d))
}

ggplot(penguin.data, aes (x = ckage, y = weight, color = year)) +
  geom_smooth()

#fixed asymptote
mod <- nlme(weight ~ SSlogis(ckage, Asym, R0, lrc),
            data = penguin.data,
            fixed= list(Asym ~ year,
                        R0 ~ year,
                        lrc ~ year),
            random = Asym ~ 1,
            start = c(Asym = 1000, 0,
                      R0 = 21, 0,
                      lrc = 1, 0),
            control = list(maxIter = 100),
            na.action = na.pass)


summary(mod)

peng.mdiff <- function(x, ckage = seq(0, 80, length.out = 500)){
  ndat <- expand.grid(ckage = ckage, 
                      year = c('2000','2002'), 
                     nest = NA,
                     bandid = NA,
                      stringsAsFactors = TRUE)
  
  prd <- predict(x, newdata = ndat, level = 0)

}
set.seed(123)
#this takes a few minutes to run on my computer
system.time(peng.bt <- boot_nlme(mod, peng.mdiff, R = 500, cores = 3))
set.seed(123)
system.time(peng.bt.ci <- confint(peng.bt, level = 0.95))


prd.df <- as.data.frame(peng.bt.ci)

prd.df <- prd.df %>%
  rename_at('2.5 %', ~'lower.ci') %>%
  rename_at('97.5 %', ~'upper.ci')

ndat1 <- with(penguin.data,
              expand.grid(
                ckage=seq(0, 80 , length.out=500),
                year = c('2000','2002'), 
                nest = NA,
                bandid = NA
              ))

newX <- ndat1 %>%
  mutate(prd = predict_nlme(mod, newdata = ndat1, level = 0))

comb.df1 <- cbind(prd.df, ndat1, 'prd' = newX$prd)

ci.plot <- ggplot() +
  geom_ribbon(comb.df1, mapping = aes(x = ckage, ymin = lower.ci, ymax = upper.ci, fill = year ), alpha = 0.50) +
  geom_line(data = newX, aes(x = ckage, y = prd, group = year), color = 'black', alpha = 0.75)

ci.plot

когда я запускаю confint(peng.bt, level = 0.95)), я получаю сообщение «Нет применимого метода для vcov, примененного к объекту класса «boot». Вы что-то забыли сказать нам, чтобы мы загрузили? (Может library("car") ?) У меня тоже нет peng.dat02...

Ben Bolker 02.06.2024 00:58

Я признаю, что, несмотря на то, что вы приняли ответ, я все еще не совсем понимаю, в чем заключается ваш вопрос. График показывает, что прогнозируемые значения сильно различаются для больших возрастов. summary(mod) показывает, что Asym.year2002, измеряющий различия в асимптотах между 2000 и 2002 годами, велик (169 [грамм?]) и весьма значим...

Ben Bolker 02.06.2024 01:04

Я не был уверен, был ли мой вопрос более статистически значимым или я делал что-то не так в своем коде r (в первую очередь, я неправильно понимал перекрывающиеся CI), поэтому я предоставил воспроизводимый образец своего кода, используя penguin.data. В моих реальных данных две кривые расположены намного ближе друг к другу и имеют некоторое перекрытие CI, что было моей главной заботой в то время. Это помогает?

Emily Phillips 02.06.2024 02:53

В этом случае звучит так, как будто ответ @RobertLong, вероятно, имеет значение; если, скажем, значение p равно 0,03 и 95% доверительные интервалы слегка перекрываются, это полностью соответствует ожиданиям.

Ben Bolker 02.06.2024 19:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
4
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что касается моих личных данных, моя проблема связана с перекрытием CI прогнозируемых данных (т. е. отсутствием статистической разницы) на асимптоте, когда в соответствии с моделью и оценочными CI с начальной загрузкой параметров они не перекрываются (т. е. не показывают статистическую разницу).

Перекрытие доверительных интервалов не означает отсутствия статистически значимой разницы. Доверительные интервалы могут перекрываться, и при этом все равно может быть статистически значимая разница. То есть 95% доверительные интервалы все равно могут перекрываться, и разница будет существенно отличаться на уровне 5%.

Подробности смотрите здесь , здесь , здесь , здесь и здесь.

Спасибо! Я думаю, что использовал неправильную терминологию при поиске ответа, а также полагался на визуальную предвзятость, которую пытаюсь разрушить. Цените ссылки - это очень помогло.

Emily Phillips 01.06.2024 22:23

Не волнуйтесь, Эмили, рада помочь, хотя я все равно советую вам использовать визуализацию в своей работе :)

Robert Long 01.06.2024 22:51

Другие вопросы по теме