2013-12-21 8 views
3

У меня есть данные с сайта USGS Nation Water Data. В настоящее время я пытаюсь построить кривые и использовать кривые для использования в предсказании для разных измерений, взятых в наборе данных (растворенный кислород, pH, высота и темп измерения) по отношению к скорости разряда. Я использовал команду «nls», и я использую книгу уравнений, чтобы найти, какую кривую использовать ... для этого примера я специально использовал уравнение Шумахера (стр.48 в книге).Использование «прогнозирования» в nls

Найти ссылку на данные:

кривой книга: 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_pmcode_00300=1&index_pmcode_00400=1&index_pmcode_00095=1&index_pmcode_00010=1&group_key=NONE&sitefile_output_format=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=search_station_nm,realtime_parameter_selection

Моя проблема заключается в том, что я не могу получить 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) 
+0

Это немного сложно: вы должны использовать ** точно ** те же самые имена переменных в 'прогнозе', что и в исходной модели. В противном случае «предсказать», как вы нашли, возвращает установленные значения без предупреждения. Я думаю, что 'pred (phm, newdata = list (ph = newph))' будет работать. –

+0

Carl Я попробовал это ... он все еще возвращает установленные значения. Это разочаровывающая часть, о которой я не могу понять, почему она возвращает только эти установленные значения: pred (phm, newdata = newph) [1] 663.69857 460.76412 322.92607 228.39464 162.95840 117.25539 85.05862 62.18766 – Jarrod

ответ

3

Похоже, вы уже получили ответ на свой вопрос (??), но:

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] но вы пытаетесь предсказать в [3,9]. Модель, которую вы выбрали, нестабильна для рН, который находится далеко за пределами диапазона.

+0

Да, похоже, это так ! Спасибо за ваш ответ, похоже, работает, но, возможно, мне нужно выбрать лучшую модель? – Jarrod

1

Jarrod, попробуйте это. Привет, Роберт.

#Try this 
#pH <- ph$pH # you don't need this 
#disch <- ph$Discharge # you don't need this 
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,0.1)) # it'll be smoother with a sequence in increments of 0.1 
plot(newph,predict(phm, data=newph,type="l")) 
+0

Кажется, что это не нравится ... Это дает ошибку в графике:> plot (newph, pred (phm, data = newph, type = "l") + plot (newph, pred (phm, data = newph, type = "l") Ошибка: неожиданный символ в: «plot (newph, pred (phm, data = newph, type =" l ") plot" – Jarrod

+0

Он по-прежнему возвращает только установленные значения, если вы берете это из графика и просто используете предсказание. Возможно, это ошибка с моделью? Должен ли я использовать «glm» вместо этого? – Jarrod

+0

Я забыл закрыть parens в выражении «plot()». Я отредактировал его выше. – wobetfwoze

Смежные вопросы