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`.

### 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)

### 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.
`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.

.

### 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 Contents]