我有来自美国地质勘探局国家水数据网站的数据。我目前正在尝试绘制数据曲线并将其拟合到数据中,以用于预测数据集中进行的不同测量(溶解氧、pH、仪表高度和温度),所有这些都与放电率有关。我使用了“nls”命令,并且正在使用一本方程书来查找要使用的曲线...对于这个例子,我专门使用了 Schumacher\xe2\x80\x99s 方程(书中第 48 页)。
\n\n找到数据链接:
\n\n曲线书:http://www.for.gov.bc.ca/hfd/pubs/docs/bio/bio04.htm
\n\n\n\n我的问题是,一旦我选择了一条编码曲线,我就无法让 nls 预测新值...我也不太清楚如何绘制它...我猜这可能与残差有关?\n在代码中,我使用“聚合”来提取列出的测量值和相应的放电率的平均值,现在我只需要让 R 为我预测。我已经得到了我认为合适的值......但我不确定,我用“?nls”碰壁了。
\n\n##Create new dataframes with means given date for each constituent\nph <- aggregate(Discharge~pH, data=River.Data, mean)\n\n##pH models\npH <- ph$pH\ndisch <- ph$Discharge\nphm <- nls(disch~exp(a+(b/pH)), data=ph, trace=T, start=list(a=-47.06 ,b=400.2))\nnewph<- data.frame(ph=c(3.0,4.0,5.0,6.0,7.0,8.0,9.0))\npredict(phm, newdata=newph)\nRun Code Online (Sandbox Code Playgroud)\n
看起来你已经得到了答案(?),但是:
ph <- aggregate(Discharge~pH, data=River.Data, mean)
phm <- nls(Discharge~exp(a+(b/pH)), data=ph, trace=T, start=list(a=-47.06 ,b=400.2))
newph <- data.frame(pH=seq(3,9,by=0.1))
Discharge.pred <- predict(phm, newdata=newph)
plot(ph$pH, ph$Discharge, xlim=c(3,9), ylim=c(0,1000))
par(new=t)
plot(newph$pH,Discharge.pred, xlab="", ylab="", axes=F, xlim=c(3,9), ylim=c(0,1000), type="l")
Run Code Online (Sandbox Code Playgroud)

问题是您的数据是 [7.5,8.2] 中的 pH 值,但您试图在 [3,9] 中进行预测。您选择的模型对于远超出范围的 pH 值不稳定。