0

我有这样的数据

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]]))
4

1 回答 1

1

通过设置限制upperllowerl您可以限制参数估计。这里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。

于 2019-04-23T18:07:53.667 回答