I want to know how to compute the importance of components for geographically-weighted-principal-component-analysis(gwpca)? That is, I want to reduce dimension according to cumulative proportion of component.
Here is the code about pca and gwpca from the jstatsoft paper about GWmodel package
require(GWmodel)
data("DubVoter")
Data.scaled <- scale(as.matrix(Dub.voter@data[,4:11]))
pca.basic <- princomp(Data.scaled, cor = FALSE)
(pca.basic$sdev^2 / sum(pca.basic$sdev^2))*100
pca.basic$loadings
R.COV <- covMcd(Data.scaled, cor = FALSE, alpha = 0.75)
pca.robust <- princomp(Data.scaled, covmat = R.COV, cor = FALSE)
pca.robust$sdev^2 / sum(pca.robust$sdev^2)
pca.robust$loadings
Coords <- as.matrix(cbind(Dub.voter$X, Dub.voter$Y))
Data.scaled.spdf <- SpatialPointsDataFrame(Coords, as.data.frame(Data.scaled))
bw.gwpca.basic <- bw.gwpca(Data.scaled.spdf,
vars = colnames(Data.scaled.spdf@data), k = 3, robust = FALSE, adaptive = TRUE)
bw.gwpca.basic
bw.gwpca.robust <- bw.gwpca(Data.scaled.spdf,
vars = colnames(Data.scaled.spdf@data), k = 3, robust = TRUE, adaptive = TRUE)
bw.gwpca.robust
gwpca.basic <- gwpca(Data.scaled.spdf,
vars = colnames(Data.scaled.spdf@data), bw = bw.gwpca.basic, k = 8,
robust = FALSE, adaptive = TRUE)
gwpca.robust <- gwpca(Data.scaled.spdf,
vars = colnames(Data.scaled.spdf@data), bw = bw.gwpca.robust, k = 8,
robust = TRUE, adaptive = TRUE)
prop.var <- function(gwpca.obj, n.components) {
return((rowSums(gwpca.obj$var[, 1:n.components]) /
rowSums(gwpca.obj$var)) * 100)
}
var.gwpca.basic <- prop.var(gwpca.basic, 3)
var.gwpca.robust <- prop.var(gwpca.robust, 3)
Dub.voter$var.gwpca.basic <- var.gwpca.basic
Dub.voter$var.gwpca.robust <- var.gwpca.robust
mypalette.4 <-brewer.pal(8, "YlGnBu")
spplot(Dub.voter, "var.gwpca.basic", key.space = "right",
col.regions = mypalette.4, cuts = 7,
main = "PTV for local components 1 to 3 (basic GW PCA)",
sp.layout = map.layout)
spplot(Dub.voter, "var.gwpca.robust", key.space = "right",
col.regions = mypalette.4, cuts = 7,
main = "PTV for local components 1 to 3 (robust GW PCA)",
sp.layout = map.layout)
loadings.pc1.basic <- gwpca.basic$loadings[,,1]
win.item.basic <- max.col(abs(loadings.pc1.basic))
loadings.pc1.robust <- gwpca.robust$loadings[,,1]
win.item.robust <- max.col(abs(loadings.pc1.robust))
Dub.voter$win.item.basic <- win.item.basic
Dub.voter$win.item.robust <- win.item.robust
mypalette.5 <- c("lightpink", "blue", "grey", "purple",
"orange", "green", "brown", "yellow")
spplot(Dub.voter, "win.item.basic", key.space = "right",
col.regions = mypalette.5, at = c(1, 2, 3, 4, 5, 6, 7, 8, 9),
main = "Winning variable: highest abs. loading on local Comp.1 (basic)",
colorkey = FALSE, sp.layout = map.layout)
spplot(Dub.voter, "win.item.robust", key.space = "right",
col.regions = mypalette.5, at = c(1, 2, 3, 4, 5, 6, 7, 8, 9),
main = "Winning variable: highest abs. loading on local Comp.1 (robust)",
colorkey = FALSE, sp.layout = map.layout)
The pca.basic indicates we can keep the first to 8th component because of cumulative proportion of comp.8 is higher than 85%. But how can I conduct similar job with gwpca ?
Some related materials :