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

时间:2015-10-08 20:47:12

标签: r non-linear-regression

所以我被要求在MASS包中获得变量Length的估计值。我使用的代码如下所示,以及结果曲线。不知何故,我不会得到一条平滑的曲线,而是一条非常“块状”的曲线,以及曲线上各点之间的一些线条。任何人都可以帮助我获得平滑的曲线吗?

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

情节图片:enter image description here

编辑:作为后续问题: 如果我想更准确地预测曲线,我会使用非线性回归来预测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
}

我不知道如何使用相同的技巧来平滑这些曲线,因为肌肉$ 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])

1 个答案:

答案 0 :(得分:4)

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

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

enter image description here