Learn R Programming

lctools (version 0.2-10)

gw.glm.bw: Optimal bandwidth estimation for Generalised Geographically Weighted Regression (GGWR)

Description

This function helps choosing the optimal bandwidth for the Generalised Geographically Weighted Regression (GGWR). At the moment the latter refers to the Geographically Weighted Poisson Regression (GWPR).

Usage

gw.glm.bw(formula, family, dframe, coords, kernel, algorithm="exhaustive", 
       optim.method="Nelder-Mead", b.min=NULL, b.max=NULL, step=NULL)

Value

bw

The optimal bandwidth (fixed or adaptive)

CV

The corresponding Cross Validation score for the optimal bandwidth

CVs

Available only in the case of the exhaustive algorithm. This is a numeric matrix in which the first column refers to the bandwidth in test and the second to the corresponding CV score.

Arguments

formula

the local model to be fitted using the same syntax used in the glm function in R. This is a sting that is passed to the sub-models' glm function. For more details look at the class formula.

family

a description of the error distribution and link function to be used in the local model as in the glm function. Currently the only option tested is "poisson".

dframe

a numeric data frame of at least two suitable variables (one dependent and one independent)

coords

a numeric matrix or data frame of two columns giving the X,Y coordinates of the observations

kernel

the kernel to be used in the regression. Options are "adaptive" or "fixed". The weighting scheme used here is defined by the bi-square function (weight = (1-(ndist/H)^2)^2 for distances less than or equal to H, 0 otherwise)

algorithm

a character argument that specifies whether the function will use an exhaustive or a heuristic algorithm. In the first case all possible bandwidths within a range are being tested. In the second case the optim function is being used allowing for the choice of various optimisation methods (such as Brent or BFGS) that may find a global or local optimum. The default algorithm is "exhaustive"

optim.method

the optimisation method to be used. A detailed discussion is available at the 'Details' section of the function optim (stats). Example methods are "Nelder-Mead", "Brent", "BFGS", "CG" and "L-BFGS-B". The default method is "Nelder-Mead".

b.min

the minimum bandwidth. This is important for both algorithms. In the case of the exhaustive algorithm it sets the lower boundary for the range in which the function will compute the CV score for each possible bandwidth. In the case of the heuristic algorithm it provides the initial value for the bandwidth to be optimised which is very important. In the latter case b.min and b.max should be provided if the optimisation method "L-BFGS-B" or "Brent" has been selected.

b.max

the maximum bandwidth. This is important for both algorithms. In the case of the exhaustive algorithm it sets the upper boundary for the range in which the function will compute the CV score for each possible bandwidth. In the case of the heuristic algorithm b.max and b.min should be provided if the optimisation method "L-BFGS-B" or "Brent" has been selected.

step

this numeric argument is used only in the case of a fixed kernel indicating the increment of the sequence of bandwidths in between the b.min and the b.max. In the case of the adaptive kernel the increment is 1 neighbour.

Author

Stamatis Kalogirou <stamatis.science@gmail.com>

Warning

Large datasets increase the processing time.

Details

Please carefully read the function optim(stats) when using a heuristic algorithm.

References

Kalogirou, S. (2016) Destination Choice of Athenians: an application of geographically weighted versions of standard and zero inflated Poisson spatial interaction models, Geographical Analysis, 48(2),pp. 191-230. DOI: 10.1111/gean.12092 https://onlinelibrary.wiley.com/doi/abs/10.1111/gean.12092

See Also

gwr

Examples

Run this code
RDF <- random.test.data(12,12,3,"poisson")
gwpr.bw <-gw.glm.bw(dep ~ X1 + X2, "poisson", RDF, cbind(RDF$X,RDF$Y), 
                    kernel = 'adaptive', b.min = 48, b.max=50)

Run the code above in your browser using DataLab