inference of local Gi* using permutations
Thank you for the detailed explanation. Sorry for missing the explanation of res. It is an n by nsim+1 matrix where the n columns are the permutation results using sample() and the last column is the actual z values of G_i*s. The following line of code was modified to do the permutations: (i in 1:nsim) res[i] <- moran(sample(x), listw, n, S0, zero.policy)$I. This could be wrong since the sample() does not fix the value of interest at i. Are there any functions in R can do this in a correct way? How do we calculate the p-values after we get the n by nsim matrix? Thank you!
On Thu, Mar 7, 2019 at 8:05 AM Roger Bivand <Roger.Bivand at nhh.no> wrote:
On Wed, 6 Mar 2019, Jay Wang wrote:
Hello, I am currently using the localG () in spdep package, I was wondering if
we
can have a conditional permutation-based inference to get the P value for every Gi*. I saw that a Mote Carlo simulation is used in Moran.MC(), and
I
borrowed the following codes from this function and tried to see if I can
do a permutation for localG():
pvals<-matrix(0, nrow = V, ncol = 1)
for (i in 1:V){
rankresi<-rank(res[i, ])
xranki <- rankresi[length(res[i, ])]
diffi <- nsim - xranki
diffi <- ifelse(diffi > 0, diffi, 0)
pvali <- punif((diffi + 1)/(nsim + 1))
pvals[i,]<-pvali
}
Monte Carlo or Hope type tests or permutation bootstraps work like analytical permutation in the global case, and are redundant for that reason. Monte Carlo (conditional permutation) in the local case requires that there is no global autocorrelation or other mis-specifications. Your code snippet is not an example, and I think is not how permutation is actually done. In the local case in ArcGIS, GeoDa, etc., you fix the value of interest at i, randomly re-assign all the values to the other observations, and recompute the local indicator at i, doing this say 499 times. Then you move on to the next i, and repeat. In your snippet, we cannot see where res is coming from. Is this an n by nsim matrix from nsim runs? Might you be needing to compare the sample values with the observed value? If you are outputting Z-values of G_i anyway, you may need to step back to the actual G_i (here from spdep): attr(localG(..., return_internals=TRUE), "internals")[,1] Then mns <- apply(res, 1, mean) sds <- apply(res, 1, sd) permZ <- (obs_localG - mns)/sds are z values that can be considered as drawn from the normal. However, I advise against inference unless the assumptions are met, and p-values must be adjusted anyway. Roger
After running these codes with several different datasets, I found that
all
the negative Gi*s have very high P values say 0.999 with 999
permutations,
meaning that there are no significant cold spots. Where is the problem?
How
can we do conditional permutation-based inference for localG() with R
spdep? I understand the critics of permutation-based inference for local
indicators, but I just want to explore this. Thank you!
Best
[[alternative HTML version deleted]]
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
-- Roger Bivand Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; e-mail: Roger.Bivand at nhh.no https://orcid.org/0000-0003-2392-6140 https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en