繁体   English   中英

如何在R中平滑非线性回归曲线

[英]How to smooth non-linear regression curve in R

因此,我被要求在MASS软件包中获取变量Length的估计theta。 我使用的代码以及生成的曲线如下所示。 不知何故,我最终不会得到平滑的曲线,而是得到了非常“块状”的曲线,以及曲线上各点之间的一些线。 谁能帮助我获得平滑的曲线?

utils::data(muscle,package = "MASS")
Length.fit<-nls(Length~t1+t2*exp(-Conc/t3),muscle,
                start=list(t1=3,t2=-3,t3=1))
plot(Length~Conc,data=muscle)
lines(muscle$Conc, predict(Length.fit))

剧情图片: 在此处输入图片说明

编辑:作为后续问题:如果我想更准确地预测曲线,我将使用非线性回归来预测21种物种的曲线。 这给我一个向量

theta=(T11,T12,...,T21,T22,...,T3).

我可以创建一个绘制所有图形的for循环,但是像以前一样,我最终得到了块状曲线。 但是,我必须绘制这些曲线,如下所示:

for(i in 1:21) {
  lines(muscle$Conc,theta[i]+theta[i+21]*
        exp(-muscle$Conc/theta[43]), col=color[i])
  i = i+1
}

我看不到如何使用相同的技巧来平滑这些曲线,因为muscle $ Conc仍然只有4个值。

编辑2:我想通了,并将其更改为以下内容:

lines(seq(0,4,0.1),theta[i]+theta[i+21]*exp(-seq(0,4,0.1)/theta[43]), col=color[i])

如果查看cbind(muscle$Conc, predict(Length.fit)) ,您会看到许多点是重复的,并且它们没有按照Conc顺序排序。 lines只是按顺序绘制点并连接点,从而为您提供多条来回线。 下面的代码根据Conc一组唯一的有序值进行predict

plot(Length ~ Conc,data=muscle)
lines(seq(0,4,0.1),
      predict(Length.fit, newdata=data.frame(Conc=seq(0,4,0.1))))

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM