Description Usage Arguments Details Value Author(s) See Also Examples
A front end function for calling SVDsmooth
(and
SVDsmoothCV
), with either a STdata
object
or vectors containing observations, dates and locations.
1 2 3 |
STdata |
A |
obs |
A vector of observations. |
date |
A vector of observation times. |
ID |
A vector of observation locations. |
subset |
A subset of locations to extract the data matrix for. A warning
is given for each name not found in |
extra.dates |
Additional dates for which smooth trends should be computed (any duplicates will be removed). |
n.basis |
Number of basis functions to compute, see
|
cv |
Also compute smooth functions using leave one out
cross-validation, |
... |
Additional parameters passed to |
The function uses createDataMatrix
to create a
data matrix which is passed to SVDsmooth
(and
SVDsmoothCV
). The output can be used as
STdata$trend = calcSmoothTrends(...)$trend
, or
STdata$trend = calcSmoothTrends(...)$trend.cv[[i]]
.
However, it is recommended to use updateTrend.STdata
.
Returns a list with
trend |
A data.frame containing the smooth trends and the dates.
This can be used as the |
trend.cv |
If |
trend.fnc,trend.fnc.cv |
Functions that produce the content of the above
data.frames, see |
Johan Lindstrom and Paul D. Sampson
Other SVD for missing data: SVDmiss
,
SVDsmooth
, plot.SVDcv
,
print.SVDcv
,
updateTrend.STdata
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | ##let's load some data
data(mesa.model)
##let's compute two smooth trend functions
trend <- calcSmoothTrends(mesa.model, n.basis=2)
##or with some other parameters for the splines
trend.alt <- calcSmoothTrends(mesa.model, n.basis=2, df=100)
##and study the trends
par(mfrow=c(2,1), mar=c(2.5,2.5,.5,.5))
plot(trend$trend$date, trend$trend$V1, type="l", ylab="", xlab="",
ylim=range(c(trend$trend$V1, trend$trend$V2)))
lines(trend$trend$date, trend$trend$V2, col=2)
plot(trend.alt$trend$date, trend.alt$trend$V1,
type="l", ylab="", xlab="",
ylim=range(c(trend.alt$trend$V1, trend.alt$trend$V2)))
lines(trend.alt$trend$date, trend.alt$trend$V2, col=2)
##Let's exclude locations with fewer than 100 observations
IND <- names(which(table(mesa.model$obs$ID) >= 100))
##now we also compute the CV trends.
trend2 <- calcSmoothTrends(mesa.model, n.basis=2, subset=IND, cv=TRUE)
##Let's compare to the previous result
lines(trend2$trend$date, trend2$trend$V1, lty=2)
lines(trend2$trend$date, trend2$trend$V2, lty=2, col=2)
##we can also study the cross validated results to examine the
##possible variation in the estimated trends.
plot(trend$trend$date, trend2$trend$V1, type="n", ylab="", xlab="",
ylim=range(c(trend2$trend$V1, trend2$trend$V2)))
for(i in 1:length(trend2$trend.cv)){
lines(trend2$trend.cv[[i]]$date, trend2$trend.cv[[i]]$V1, col=1)
lines(trend2$trend.cv[[i]]$date, trend2$trend.cv[[i]]$V2, col=2)
}
##trend functions for every week (mesa.model$obs$date is every 2-weekss)
trend.more <- calcSmoothTrends(mesa.model, n.basis=2,
extra.dates=seq(min(mesa.model$obs$date),
max(mesa.model$obs$date), by=7))
##This results in a message detailing how many times that
##have hade interpolated trends (i.e. no data)
##compare to the earlier
plot(trend$trend$date, trend$trend$V1, pch=19,
ylim=range(c(trend$trend$V1, trend.more$trend$V1)))
points(trend.more$trend$date, trend.more$trend$V1, col=2, pch=3)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.