我有这样的数据
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]]))
答案 0 :(得分:0)
通过在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]]))
当我使用drc::drm()
时,我很少设置这些限制。设置它们的唯一原因是,如果您对剂量响应的行为有先验/专业知识,而模型估计则违反了这一点。在这种情况下,如果您在上高原和下高原都有值,则默认参数会很好地估计EC-50。