時系列のサブセットの黄土曲線を作成しようとしています。黄土を適用すると、すべてのサブセットに同様の問題があるように見えるため、問題は私にある可能性がありますが、df
対処方法がわかりません.
データはこちらから入手できます: https://dl.dropbox.com/s/zy6b5mjcu7uteof/data_all_PAR_max.csv?dl=0
この関数はより大きな関数の一部であるため、いくつかの値が渡され、エラーの再現に役立つようにここで定義されています。
sumfile <- read.csv('https://dl.dropbox.com/s/zy6b5mjcu7uteof/data_all_PAR_max.csv')
codename = "EXEM"
descriptor = "max"
radtype = "PAR"
totYrs = c(1997:2015)
ylbl = expression("PAR " ~ (mu ~ mol ~ photons ~ m^{-2} ~ s^{-1}))
clr = "blue"
group <- melt(sumfile, id.vars = 'date', variable.name = 'series')
setnames(group, old = c('date','series','value'), new = c('Date','Year',radtype))
group$Date <- as.Date(group$Date)
# group <- na.omit(group) # uncommenting resolves error!
o <- order(group$Date)
lo <- loess(PAR ~ as.numeric(Date), span = 0.25, data=group)
plot(group$Date,group$PAR,pch=19,cex=0.1, col=clr,
xlab ="Date",
ylab = ylbl,
main = paste('Loess curve for', descriptor, radtype, 'from', min(totYrs), 'to',
max(totYrs), '\nmeasured at', codename, 'met',sep=' '))
lines(group$Date[o], lo$fitted[o], col='red', lwd=1)
lines
forを置き換えるpoints
と、エラーのより良い全体像が得られます
points(group$Date[o], lo$fitted[o], col='red', lwd=1)
プロットは次のようになります。
ファントム ポイントは、データ セット内の NA のアーティファクトのようです。
個々の年を調べるためのループを作成し、より多くのエラーを発見しました。
for (i in totYrs) {
tryCatch({
yval <- paste(radtype, i, descriptor,sep='_')
sumfile$date <- as.Date(sumfile$date)
lo_ <- eval(parse(text = paste("loess(", yval, "~ as.numeric(date),
span = 0.25, data=sumfile)")))
oo <- order(sumfile$date)
plot(sumfile$date, eval(parse(text = paste("sumfile$",yval))),
pch=19,cex=0.1, col=clr,
xlab ="Date",
ylab = ylbl,
main = paste('Loess curve for', descriptor, radtype, 'measured at\n',
codename, 'met during', i, '/', i+1, 'field season',sep=' '))
lines(sumfile$date[oo], lo_$fitted[oo], col='red', lwd=1)
}, error=function(e){print("One or more years was not plotted because there was no data")})
}
ループは年ごとにプロットを作成し、曲線の平滑化が機能する年と機能しない年があることを示します。
設定loess(y ~ x, na.action=na.exclude)
が最終結果に影響を与えるようには見えません。group <- na.omit(group)
融解df
前に追加すると、loess()
そのデータ フレームのエラーが解決されますが、個々の年を調べると問題が解決しないようです。以下に一例を示します。
sumfile$date <- as.Date(sumfile$date)
no_na <- na.omit(subset(sumfile, select=c(date,PAR_2013_max)))
lo13 <- loess(PAR_2013_max ~ as.numeric(date), span = 0.25, data=no_na)
oo <- order(sumfile$date)
plot(sumfile$date, sumfile$PAR_2013_max)
lines(sumfile$date[oo], lo13$fitted[oo], col='red', lwd=1)
年間曲線をプロットするための解決策を特定する助けがあれば大歓迎です。