Learn R Programming

RandomFields (version 3.1.16)

RFfitoptimiser: Optimisers for fitting model parameters to spatial data

Description

See RFfit for a detailed description of the fitting procedure.

Arguments

Details

Two parameters, see also RFoptions can be passed to RFfit that allow for choosing an optimiser different from optim:

optimisertakes one of the values "optim", "optimx", "soma", "nloptr", "GenSA", "minqa", "pso" or "DEoptim", see the corresponding packages for a description

If optimiser="nloptr", then the additional parameter algorithm must be given which takes the values "NLOPT_GN_DIRECT", "NLOPT_GN_DIRECT_L", "NLOPT_GN_DIRECT_L_RAND", "NLOPT_GN_DIRECT_NOSCAL", "NLOPT_GN_DIRECT_L_NOSCAL", "NLOPT_GN_DIRECT_L_RAND_NOSCAL", "NLOPT_GN_ORIG_DIRECT", "NLOPT_GN_ORIG_DIRECT_L", "NLOPT_LN_PRAXIS", "NLOPT_GN_CRS2_LM", "NLOPT_LN_COBYLA", "NLOPT_LN_NELDERMEAD", "NLOPT_LN_SBPLX", "NLOPT_LN_BOBYQA", "NLOPT_GN_ISRES", see nloptr for a description.

See Also

RFfit, RFoptions

Examples

Run this code
RFoptions(seed=0) ## *ANY* simulation will have the random seed 0; set
##                   RFoptions(seed=NA) to make them all random again



## Here some alternative optimisers to 'optim' are considered.
## All but the \pkg{nloptr} algorithms are largely slower than 'optim'.
## Only a few of them return results as good as 'optim'.

data(soil)
str(soil)
soil <- RFspatialPointsDataFrame(
 coords = soil[ , c("x.coord", "y.coord")],
 data = soil[ , c("moisture", "NO3.N", "Total.N", "NH4.N", "DOC", "N20N")],
 RFparams=list(vdim=6, n=1)
)
data <- soil["moisture"]


model <- ~1 + RMwhittle(scale=NA, var=NA, nu=NA) + RMnugget(var=NA)

## standard optimiser 'optim'
print(unix.time(fit <- RFfit(model, data=data)))
print(fit)


opt <- "minqa" # 330 sec %ok
print(unix.time(fit2 <- try(RFfit(model, data=data, optimiser=opt))))
print(fit2)


opt <- "soma" #  450 sec % sehr schlecht
print(unix.time(fit2 <- try(RFfit(model, data=data, optimiser=opt))))
print(fit2)


opt <- "optimx" #  30 sec; better result
print(unix.time(fit2 <- try(RFfit(model, data=data, optimiser=opt))))
print(fit2)

opt <- "nloptr"
algorithm <- RC_NLOPTR_NAMES

for (i in 1:length(algorithm)) { 
  print(algorithm[i])
  print(unix.time(fit2 <- try(RFfit(model, data=data, optimiser=opt,
                                    algorithm=algorithm[i]))))
  print(fit2)
}


if (interactive()) {
## the following two optimisers are too slow to be run on CRAN.

opt <- "pso" # 600 sec
print(unix.time(fit2 <- try(RFfit(model, data=data, optimiser=opt))))
print(fit2)

opt <- "GenSA" #  10^4 sec
print(unix.time(fit2 <- try(RFfit(model, data=data, optimiser=opt))))
print(fit2)
}





Run the code above in your browser using DataLab