问题描述
我正在为如何拟合我的数据而苦苦挣扎。
如图所示,它不适合所有数据
Cdata %>%
ggplot(aes(x=Timepoint,y=CFU)) +
geom_point() +
geom_smooth(method = "nls",se = FALSE,formula = y ~ SSlogis(x,Asym,xmid,scal),color = "blue")
我还想知道在拟合后如何预测并为这些数据添加 95% 的置信区间。
你能帮我解决这个问题吗?
提前致谢!
解决方法
“如何找到更适合我的数据的曲线?”可能是一个非常广泛的问题,很大程度上取决于为什么拟合您的数据(预测?推理?估计某些参数以进行比较?)看起来有点不对称我最初尝试了 Gompertz 合身(SSgompertz
,你有 SSlogis
),但它没有多大帮助。然后我尝试了广义加性模型,这是一个将平滑曲线拟合到数据的通用框架。 GAM 的优点是 (1) 快速且易于拟合,不需要起始值; (2) 自动为ggplot提供置信区间; (3) 模型复杂度/曲线摆动可调。 GAM 的缺点:(1)可解释性较差; (2) 更难应用约束(特别是,很难指定曲线收敛到一个有限渐近值,即 t → 无穷大)。
这里有两条 GAM 曲线,一条明显过拟合(k
参数指定了曲线的最大复杂度)
ggplot(dd,aes(Timepoint,CFU)) + geom_point() +
geom_smooth(method="gam",formula=y~s(x,k=6),colour="red") +
geom_smooth(method="gam",k=5),colour="blue")
您会注意到曲线不会收敛到水平渐近线,这可能是您的应用程序的问题。
为了获得预测值和标准误差,在 ggplot 之外工作通常更容易,例如
library(mgcv)
m1 <- gam(CFU~s(Timepoint,data=dd)
predict(m1,se.fit=TRUE)
我还尝试了具有不同 x 轴缩放比例 (SSgompertz
,SSfpl
) 的各种其他自启动曲线 (+ scale_x_log10()
,+ scale_x_sqrt()
) 但拟合要么失败要么没有没有表现出太大的改善。