Лучший способ рассчитать IC50 с предельными ограничениями в drc :: drm () - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть такие данные

df<- structure(list(Conc = c(0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 
0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 0.03125, 0.0625, 0.125, 
0.25, 0.5, 1, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 0.03125, 
0.0625, 0.125, 0.25, 0.5, 1, 0.03125, 0.0625, 0.125, 0.25, 0.5, 
1), Response = c(167.11246201, 53.96960486, 128.42857143, 43.67173252, 
4.51975684, 0.34042553, 120.10334347, 101.14589666, 155.17629179, 
35.31306991, 8.56534954, 1.7112462, 146.34954407, 108.50151976, 
163.60182371, 64.70212766, 2.88145897, 0.50759878, 82.92401216, 
109.80547112, 116.69300912, 26.85410334, 3.01519757, 0.37386018, 
87.06990881, 84.82978723, 118.36474164, 27.52279635, 2.34650456, 
0.10638298, 89.47720365, 109.47112462, 85.43161094, 17.69300912, 
2.31306991, 0.07294833)), class = "data.frame", row.names = c(NA, 
-36L))

Как только я пытаюсь установить параметры, не зная, что я на самом деле делаю

library(drc)

fit <- drm(formula = Response ~ Conc, data = df,
               fct = LL.4(names=c("Slope","Lower Limit","Upper Limit", "EC50")))

Как только я позволил пакету выбрать его для меня, не зная, что он делает

fit2 <- drm(formula = Response ~ Conc, data = df, 
           fct = LL.4(names=c("Slope","Lower Limit","Upper Limit", "EC50")),
           lowerl = c(-Inf, 0, min(df$Response), 0), 
           upperl = c(Inf, min(df$Conc), max(df$Conc), Inf))

Может кто-нибудь помочь мне понять это?

Тогда я вижу, что результаты совершенно разные, и я лично не знаю, как выбрать параметры

plot(fit, main = paste("ED(drm, 50):", ED(fit, 50)[[1]]))
plot(fit2, main = paste("ED(drm, 50):", ED(fit2, 50)[[1]]))

1 Ответ

0 голосов
/ 23 апреля 2019

Устанавливая пределы в upperl и lowerl, вы ограничиваете оценки параметров. Здесь верхний предел в fit2 для параметра «Верхний предел» установлен на низком уровне (см. Кривую в виде плоской линии). Если вы отрегулируете это значение ближе к наблюдаемым данным, тогда оценка EC-50 станет намного ближе к fit.

fit3 <- drm(formula = Response ~ Conc, data = df, 
            fct = LL.4(names=c("Slope","Lower Limit","Upper Limit", "EC50")),
            lowerl = c(-Inf, 0, min(df$Response), 0), 
            upperl = c(Inf, min(df$Conc), max(df$Response) - 10, Inf))

plot(fit3, main = paste("ED(drm, 50):", ED(fit, 50)[[1]]))

FWIW, когда я использую drc::drm() Я редко устанавливаю эти ограничения. Единственная причина их установки - если у вас есть предварительные / экспертные знания о том, как ведет себя доза-ответ, и оценка модели нарушает это. В таком случае, когда у вас есть значения в верхнем плато и нижнем плато, аргументы по умолчанию хорошо справятся с оценкой EC-50.

...