我有一个简单的数据框,用于测量不同剂量药物治疗的反应:
drug <- c("drug_1", "drug_1", "drug_1", "drug_1", "drug_1",
"drug_1", "drug_1", "drug_1", "drug_2", "drug_2", "drug_2",
"drug_2", "drug_2", "drug_2", "drug_2", "drug_2")
conc <- c(100.00, 33.33, 11.11, 3.70, 1.23, 0.41, 0.14,
0.05, 100.00, 33.33, 11.11, 3.70, 1.23, 0.41, 0.14, 0.05)
mean_response <- c(1156, 1833, 1744, 1256, 1244, 1088, 678, 489,
2322, 1867, 1333, 944, 567, 356, 200, 177)
std_dev <- c(117, 317, 440, 200, 134, 38, 183, 153, 719,
218, 185, 117, 166, 167, 88, 50)
df <- data.frame(drug, conc, mean_response, std_dev)
我可以使用以下代码绘制这些点,并获得我想要的可视化的基本基础:
p <- ggplot(data=df, aes(y=mean_response, x= conc, color = drug)) +
geom_pointrange(aes(ymax = (mean_response + std_dev), ymin = (mean_response - std_dev))) +
scale_x_log10()
p
我想对这些数据做的下一件事是在图中添加一条 sigmoidal 曲线,它适合每种药物的绘制点。之后,我想计算这条曲线的 EC50。我意识到我的数据中可能没有 S 形曲线的整个范围,但我希望能用我所拥有的得到最好的估计。此外,drug_1 的最终点并未遵循 S 形曲线的预期趋势,但这实际上并不意外,因为药物所在的溶液可以抑制高浓度的反应(每种药物在不同的溶液中)。我想从数据中排除这一点。
我陷入了将 S 形曲线拟合到我的数据的步骤中。我已经查看了一些其他解决方案来将 sigmoidal 曲线拟合到数据,但似乎没有一个有效。
一篇与我的问题非常接近的帖子是: (sigmoid) curvefitting glm in r
在此基础上,我尝试了:
p + geom_smooth(method = "glm", family = binomial, se = FALSE)
这会产生以下错误,并且似乎默认绘制直线:
`geom_smooth()` using formula 'y ~ x'
Warning message:
Ignoring unknown parameters: family
我也尝试了这个链接的解决方案: Fitting a sigmoidal curve to this oxy-Hb data
在这种情况下,我收到以下错误:
Computation failed in `stat_smooth()`:
Convergence failure: singular convergence (7)
并且没有线被添加到情节中。
我已尝试查找这两个错误,但似乎找不到对我的数据有意义的原因。
任何帮助将非常感激!