Как я могу получить доверительные интервалы для объекта класса nls (сломанная палка)

Я пытаюсь выяснить, как получить/построить доверительные границы для объектов nls в R.

Например, вот модель nls

bstick.lm.mean <- nls(TCTmean ~ cbind("intercept" = 1, 
                                      "l2Flow" = l2Flow, 
                                      "l2FlowBr" = ifelse(l2Flow > Br, 
                                                          l2Flow - Br, 0)),
                      start = list(Br = 6), 
                      algorithm = "plinear", 
                      data = flow.new.sum.dat)

Итак, bstick.lm.mean — это объект класса nls.

new.seq4 = seq(min(flow.new.sum.dat$l2Flow), max(flow.new.sum.dat$l2Flow), length = 200)
new.seq4 = data.frame(new.seq4)
names(new.seq4) = 'l2Flow'

pz = predict(bstick.lm.mean, newdata = new.seq4, 
             interval = 'confidence', se.fit = TRUE, level = 0.95)
test.frame2 = data.frame(new.seq4,pz)

ggplot(data = test.frame2)+
  geom_point(mapping = aes(x = l2Flow, y = pz),
             shape = 1, col = 'red') +
  geom_point(data = test.frame,
             aes(x = l2Flow, y = TCTmean),
             shape = 0) +
  theme(panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black")) +
  xlab("Log2 Flow (KL)") +
  ylab("Mean Transformed Ct")

Производит следующий сюжет:

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

Мой вопрос: как я могу получить доверительные интервалы для этого нелинейного графика? Я имею в виду полосы вокруг линии регрессии.


person Quality    schedule 25.10.2019    source источник


Ответы (2)


Я извлек данные из диаграммы рассеяния для анализа и выполнил поиск по уравнению. Я обнаружил, что несколько различных сигмоидальных уравнений лучше всего соответствуют данным, а для отдельных сигмоидальных уравнений должно быть проще определить доверительные интервалы с помощью стандартного статистического программного обеспечения. В качестве примера, вот мои результаты для сигмоидального уравнения гиперболической логистики «y = (a * pow(x, b)) / (c + pow(x, b))» с подобранными параметрами a = 1,6177820755100655E+01. , b = -1,5270446610701983E+01 и c = 4,2601082365916449E-12, что дает RMSE = 2,58 и R-квадрат = 0,85. Опять же, на выбор было несколько одинаково «хороших» сигмоидальных уравнений.

участок1

участок2

person James Phillips    schedule 26.10.2019

Оценки неопределенности вокруг точек изменения (точки разрыва), как известно, трудно выполнить аналитически. Попробуйте пакет R mcp, который использует вычислительный (байесовский) подход:

library(mcp)
model = list(
  y ~ 1 + x,  # Slope
  ~ 0  # joined plateau
)

fit = mcp(model, df)
plot(fit, q_fit = TRUE)  # Plot with quantiles

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

Красные линии представляют собой интервал с наибольшей плотностью, серые линии — случайные апостериорные отрисовки, а синяя кривая — апостериорное распределение местоположения точки изменения. Используйте plot_pars(fit) и summary(fit) для получения сводных данных и графиков по параметрам, включая неопределенность.

person Jonas Lindeløv    schedule 10.01.2020