如何平滑 R 中的非线性回归曲线
How to smooth non-linear regression curve in R
所以我被要求获得 MASS 包中变量 Length 的估计值。我使用的代码以及生成的曲线如下所示。不知何故,我并没有得到一条平滑的曲线,而是一条非常 "blocky" 的曲线,以及曲线上各点之间的一些线。谁能帮我弄个平滑的曲线?
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))))
所以我被要求获得 MASS 包中变量 Length 的估计值。我使用的代码以及生成的曲线如下所示。不知何故,我并没有得到一条平滑的曲线,而是一条非常 "blocky" 的曲线,以及曲线上各点之间的一些线。谁能帮我弄个平滑的曲线?
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))))