我有USGS国家水数据网站的数据。我目前正在尝试绘制曲线并将其拟合到数据,以用于预测与数据集排放率相关的数据集内的不同测量值(溶解氧,pH,量规高度和温度)。我使用了“ nls”命令,并且使用了一本方程式来查找要使用的曲线...对于本示例,我专门使用了舒马赫方程式(书中第48页)。
查找数据链接:
曲线书:http : //www.for.gov.bc.ca/hfd/pubs/docs/bio/bio04.htm
我使用的数据:http : //waterdata.usgs.gov/mi/nwis/uv?referred_module=qw&search_station_nm=River%20Rouge%20at%20Detroit%20MI&search_station_nm_match_type=anywhere&index_pmcode_00065=1&index_pmcode_00060=1&index_pm_code_ONE_PM__109_pm_00_code_00_code_00_code_00_code_00_code_00_code_00_group_00 html_table&column_name = agency_cd&column_name = site_no&column_name = station_nm&range_selection = date_range&begin_date = 2013-11-18&end_date = 2013-12-18&format = html_table&date_format = YYYY-MM-DD&rdb_compression = file&list_of_search_criteria = real
我的问题是,一旦我选择了一条编码曲线,我就无法让nls预测新值...我也不太清楚如何绘制它的曲线...我猜想这可能与残差有关吗?在代码中,我使用“聚合”来提取列出的测量值和相应的放电速率的平均值,现在我只需要获取R即可为我预测。我得到了我认为合适的值……但是我不确定,我碰到了“?nls”。
##Create new dataframes with means given date for each constituent
ph <- aggregate(Discharge~pH, data=River.Data, mean)
##pH models
pH <- ph$pH
disch <- ph$Discharge
phm <- nls(disch~exp(a+(b/pH)), data=ph, trace=T, start=list(a=-47.06 ,b=400.2))
newph<- data.frame(ph=c(3.0,4.0,5.0,6.0,7.0,8.0,9.0))
predict(phm, newdata=newph)
似乎您已经有了答案(??),但是:
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")
问题在于您的数据是针对[7.5,8.2]中的pH值,但是您正试图在[3,9]中进行预测。您选择的模型对于超出此范围的pH值不稳定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句