DS {clim.pact}R Documentation

Downscaling of monthly or daily means

Description

Identifies statistical relationships between large-scale spatial climate patterns and local climate variations for monthly and daily data series. Calibrates a linear regression model using step-wise screening and common EOFs (EOF) as basis functions. Evaluates the statistical relationship. Predicts local climate parameter from predictor fields. Works with ordinary EOFs, common EOFs (catFields) and mixed-common EOFs (mixFields). The rationale for using mixed-common EOFs is that the coupled structures described by the mixed-field EOFs may have a more physical meaning than EOFs of single fields [Benestad et al. (2002), "Empirically downscaled temperature scenarios for Svalbard", Atm. Sci. Lett., doi.10.1006/asle.2002.0051].

The downscaling analysis returns a time series representing the local climate, patterns of large-scale anomalies associated with this, ANOVA, and analysis of residuals. Care must be taken when using this routine to infer local scenarios: check the R2 and p-values to check wether the calibration yielded an appropriate model. It is also important to examine the spatial structures of the large-scale anomalies assocaiated with the variations in the local climate: do these patterns make physical sense? Experiment with both single and mixed fields. It is also a good idea to check whether there are any structure in the residuals: if so, then a linear model for the relationship between the large and small-scale structures may not be appropriate. It is furthermore important to experiment with predictors covering different regions [ref: Benestad (2001), "A comparison between two empirical downscaling strategies", Int. J. Climatology, vol 21, Issue 13, pp.1645–1668. DOI 10.1002/joc.703]. There is a cautionary tale for how the results can be misleading if the predictor domain in not appropriate: domain for northern Europe used for sites in Greenland [ref: Benestad (2002), "Empirically downscaled temperature scenarios for northern Europe based on a multi-model ensemble", Climate Research, vol 21 (2), pp.105–125. http://www.int-res.com/abstracts/cr/v21/n2/index.html]

The function ds() is a generic routine which in principle works for when there is any real statistical relationship between the predictor and predictand. The predictand is therefore not limited to a climate variable, but may also be any quantity affected by the regional climate. It is important to stress that the downscaling model must reflect a well-understood (physical) relationship.

The trend-estimation uses regression to fit a 5th-order polynomial (in time) to fit the observed time series. The rate-of-change is estimated by taking the time-derivative of this equation. If

y= c0 + c1 x + c2 x^2 + c3 x^3 + c4 x^4 + c5 x^5,

where x is the time, then the rate-of-change is:

y= c1 + 2 c2 x + 3 c3 x^2 + 4 c4 x^3 + 5 c5 x^5.

[ref: Benestad (2002), What can present climate models tell us about climate change?, Climatic Change, accepted.]

The routine uses a step-wise regression (step) using the leading EOFs. The calibration is by default carried out on de-trended data [ref: Benestad (2001), "The cause of warming over Norway in the ECHAM4/OPYC3 GHG integration", Int. J. Clim., 15 March, vol 21, p.371-387.].

The downscaled scenario is saved in a text file in the output directory (default: 'output').

The course notes from Environmental statistics for climate researchers http://www.gfi.uib.no/~nilsg/kurs/notes/course.html is a useful reference to statistical modelling and regression.

DS provides the basis for an 'objective' downscaling though objDS.

Changes - 02.02.2005: Improved the representation of the correct constant level: # pre.gcm <- pre.gcm - gcm.mean + obs.mean2 # REB 26.08.2004: 'obs.mean' replaced with 'obs.mean2' pre.gcm <- pre.gcm - cal.mean + obs.mean2 # REB 02.02.2005: 'gcm.mean' replaced with 'cal.mean'

Usage

DS(dat,preds,mon=NULL,direc="output/",cal.id=NULL,
              ldetrnd=TRUE,i.eofs=seq(1,8,by=1),ex.tag="",
              method="lm",plot=TRUE,leps=FALSE,param="t2m",
              plot.res=FALSE,plot.rate=FALSE,xtr.args="",
              swsm="step",predm="predict",lsave=FALSE,rmac=TRUE,
               silent=FALSE,exit.on.screening.failure=FALSE)

Arguments

dat A climate.station object (station.obj or station.obj.dm). [e.g. from getnacd, getnordklim or station.obj].
preds The predictor EOF.
mon month or season to downscale, this is automatically changes if predictor only contains a different month (this is normally a redundant feature).
direc name of directory inwhich the output is dumped (e.g. figures, tables).
cal.id ID tag used for calibration. By default use the first field (catFields) for calibration.
ldetrnd F for no detrending; T for removing linear trends before model calibration.
i.eofs select which EOFs to include in the setp-wise screening.
ex.tag Extra labelling tag for file names for experiments.
method Sets the method to use for regression. Method is set to "lm" by default, but "anm" allows the incorporation of an analog model, see anm. "anm.weight" weights the principal components according to the eigenvalues, whereas "anm" uses unweighted series.
plot 'TRUE' produces figures.
leps 'TRUE' produces EPS figures (files).
param Name of parameter (for plot labels).
plot.res 'TRUE' shows statistics for residuals.
plot.rate 'TRUE' shows analysis of rate-of-change.
xtr.args Extra/additional arguments in the formula. E.g. for method=='glm', one can pass on 'xtr.args="family='gaussian'"'. Can be used to pass on the family argument to glm.
swsm Step-wise screening method, default=='step'; 'none' skips stepwise sceeening.
predm Prediction method, default is "predict"
lsave TRUE -> saves the result on disc
rmac TRUE -> subtracts (removes) the annual cycle in station data.
silent TRUE -> no output to screen.
exit.on.screening.failure If stepwise screening returns no variables, then return()

Value

A 'ds' object - a list of following elements:
X.1 .. X.n 1..nth predictor pattern for n fields (mixFields).
lon.1 .. Longitude coordinate of spatial fields (a vector).
lat.1 .. Latitude coordinate of spatial fields (a vector).
n.fld Number of fields (different types of predictors, mixFields).
unit Unit of quantity in station series.
pred.name Name of predictor.
lon.loc Longitude of predictand location.
lat.loc Latitude of predictand location
yy.gcm Years corresponding to scenario (GCM).
mm.gcm Months corresponding to scenario (GCM).
dd.gcm Days corresponding to scenario (GCM).
yy.cal Years corresponding to observation (Calibration).
mm.cal Months corresponding to observation (Calibration).
dd.cal Days corresponding to observation (Calibration).
yy.o Years corresponding to station series (obs.).
mm.o Months corresponding to station series (obs.).
dd.o Days corresponding to station series (obs.).
rate.ds Estimated linear rate of change of downscaled scenario.
rate.err Error estimate for rate.ds.
gcm.trnd.p P-value of linear trend in downscaled scenario.
fit.p ANOVA p-value for fit between large-scale and small-scale
variability(from regression analysis).
fit.r2 ANOVA R2 for fit between large-scale and small-scale
variability (from regression analysis).
pre.gcm The downscaled scenario (a vector).
pre.y The downscaled results using the calibration data.
location Nsme of location of predictor.
gcm.stat ANOVA of linear trend fit to scrnario.
month Month of study (0-> all months).
v.name Name of downscaled element.
region Region used for downscaling.
pre.fit Linear fit to prediction (downscaled scenario) (a vector).
pre.p.fit Polynomial fit to the downscaled scenario.
tr.est.p.fit Rate of change derived from a fifth-order polynomial
trend-fit to prediction (downscaled scenario) (a vector).
id.1, id.2 IDs labelling which data was used for calibration (id.1).

Author(s)

R.E. Benestad

Examples

library(clim.pact)
data("oslo.t2m")
data("eof.mc")
a<-DS(dat=oslo.t2m,preds=eof.mc,plot=FALSE)
## Not run: 
# Example 1: for computing common EOFs and using these as a basis for DS.
slp.obs <- retrieve.nc("ncep_slp.nc",x.rng=c(-20,40),y.rng=c(50,70))
                                              # Get gridded observations/analysis from NCEP
slp.gcm <- retrieve.nc("EH4OPYC_B2_slp.nc")   # Get results from climate models
slp <- catFields(slp.obs,slp.gcm)             # combine the fields.
eof <- EOF(slp,mon=1)
obs <- getnordklim("Stockholm")
ds <- DS(preds=eof,obs)


# Example 2:
# A demonstration for the linear regression model: monthly values
library(clim.pact)

# Read the gridded netCDF data:

t2m<-retrieve.nc("DNMI_t2m.nc")

# Manipulate the data: assign one part as calibration and one part as independent data
nt<-length(t2m$tim)
t2m$id.t[1:floor(nt/2)]<-"calibrate"
t2m$id.t[ceiling(nt/2):nt]<-"independent"

# Compute EOFs
eof<-EOF(t2m,mon=1,neofs=3)
plotEOF(eof)

# Get the predictand: a local station series
obs<-getnordklim("Goeteborg",ele=101)

# Apply the downscaling
DS(preds=eof,obs)
plotStation(obs,mon=1,add=TRUE,col="darkgreen",lwd=1,lty=2)


# Example 3: A demonstration for the linear regression model: daily values
# These files are not distributed with the clim.pact package, but
# nevertheless demonstrate how the downscaling can be done with a few
# clim.pact functions.

library(clim.pact)
data(eof.dc)
list<-read.table("data/daily/station.list.good",header=TRUE)
print(list)

i<-as.numeric(readline("Which number? (1-37)"))
obs1<-read.table(paste("data/daily/",list$file.name[i],sep=""))

obs<-station.obj.dm(t2m=obs1$V5,precip=obs1$V6,yy=obs1$V4,mm=obs1$V3,dd=obs1$V2,
                    station=obs1$V1[1],location=as.character(list$location[i]),
                    lon=list$lon[i],lat=list$lat[i],alt=list$alt[i],
                    obs.name<-c("t2m","precipitation"))

plotStation(obs)
DS(preds=eof.dc,obs)


Example 4: A demonstration for the analog model: daily values

library(clim.pact)
library(anm)
source("clim.R")
data(eof.dc)
list<-read.table("data/daily/station.list.good",header=TRUE)
print(list)

i<-as.numeric(readline("Which number? (1-37)"))
obs1<-read.table(paste("data/daily/",list$file.name[i],sep=""))

obs<-station.obj.dm(t2m=obs1$V5,precip=obs1$V6,yy=obs1$V4,mm=obs1$V3,dd=obs1$V2,
                    station=obs1$V1[1],location=as.character(list$location[i]),
                    lon=list$lon[i],lat=list$lat[i],alt=list$alt[i],
                    obs.name<-c("t2m","precipitation"))

plotStation(obs)

print("Please be patient - this takes a while...")
ds-anm<-DS(preds=eof.dc,obs,method="anm.weight",swsm="none",
           predm="predict.anm",param="precip",
           lsave=FALSE,ldetrnd=FALSE)

## End(Not run)

[Package clim.pact version 2.2-15 Index]