[R-sig-Geo] How to handle NA-values in raster-based Geary´s C test?

Kerstin Traut Kerstin.Traut at uni-jena.de
Thu Jul 12 19:31:04 CEST 2012


Zitat von Roger Bivand <Roger.Bivand at nhh.no>:

> On Thu, 12 Jul 2012, Kerstin Traut wrote:
>
>> Zitat von Roger Bivand <Roger.Bivand at nhh.no>:
>>
>>> On Thu, 12 Jul 2012, Kerstin Traut wrote:
>>>
>>>> Zitat von Roger Bivand <Roger.Bivand at nhh.no>:
>>>>
>>>>> On Thu, 12 Jul 2012, Kerstin Traut wrote:
>>>>>
>>>>>> Zitat von Roger Bivand <Roger.Bivand at nhh.no>:
>>>>>>
>>>>>>> On Thu, 12 Jul 2012, Roger Bivand wrote:
>>>>>>>
>>>>>>>> On Thu, 12 Jul 2012, Kerstin Traut wrote:
>>>>>>>>
>>>>>>>>> Zitat von Roger Bivand <Roger.Bivand at nhh.no>:
>>>>>>>>>
>>>>>>>>>> On Thu, 12 Jul 2012, Kerstin Traut wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> I have a question on testing spatial autocorrelation on  
>>>>>>>>>>> raster data including NA-values. In particular, I like to  
>>>>>>>>>>> calculate Moran´s I and Geary´s C indices by using inverse  
>>>>>>>>>>> distance weighting matrices.
>>>>>>>>>>> Calculating Moran´s I with moran.test works fine, because  
>>>>>>>>>>> the function contains the option "na.action=na.pass".  
>>>>>>>>>>> Unfortunately, the function geary.test does not contain  
>>>>>>>>>>> this option. The problem is that geary.test needs an nb  
>>>>>>>>>>> argument for which I cannot perform for example  
>>>>>>>>>>> nb<-ifelse(value, nb, NA), because it would change the  
>>>>>>>>>>> nb-format to a list-format.
>>>>>>>>>>> Is there a way to ignore NA-values in geary.test? Or how  
>>>>>>>>>>> can I set NA values in a neigbors (nb) list?
>>>>>>>>>>
>>>>>>>>>> The simple answer is to subset the variable of interest and  
>>>>>>>>>> the nb object to omit NA observations (which is what  
>>>>>>>>>> moran.test does internally). Alternatively, you could  
>>>>>>>>>> contribute a patch to geary.test(), if you like.
>>>>>>>>>>
>>>>>>>>>> Hope this helps,
>>>>>>>>>>
>>>>>>>>>> Roger
>>>>>>>>>
>>>>>>>>> Thanks for your answer. Unfortunately, I think that  
>>>>>>>>> subsetting is in my case not the right solution, because I  
>>>>>>>>> need to define the amount of neighbors in cell2nb on the  
>>>>>>>>> basis of a rectangular extent (e.g. 50 x 50 neighbors).  
>>>>>>>>> Subsetting this extent by deleting NA-values would destroy  
>>>>>>>>> the nb list format required by geary.test.
>>>>>>>>> Is there any solution for subsetting an nb list without  
>>>>>>>>> destroying the nb format?
>>>>>>>>
>>>>>>>> Yes, there are subset methods for nb and listw objects. To  
>>>>>>>> ensure data integrity, use dnearneigh() instead of cell2nb(),  
>>>>>>>> and use a SpatialPointsDataFrame to hold your data. In that  
>>>>>>>> way, you make sure that the subset condition is applied to  
>>>>>>>> the same observations.
>>>>>>>
>>>>>>> The latter advice may not work if your coordinates are planar  
>>>>>>> and you really mean to set torus=TRUE in cell2nb(). You'll  
>>>>>>> have to get the data order right by deconstructing the  
>>>>>>> region.id attribute of the nb object created by cell2nb() to  
>>>>>>> ensure data integrity.
>>>>>>>
>>>>>>> Roger
>>>>>>
>>>>>> I already tested dnearneigh(), but I like to avoid this  
>>>>>> function because for large datasets cell2nb() calculates  
>>>>>> neighbors more quickly.
>>>>>> Thanks to your suggestion I was able to subset the nb list by  
>>>>>> using nb.subset(). But I could not find a suitable function for  
>>>>>> subsetting a listw. Using the subset() function results in the  
>>>>>> following error message: "Not yet able to subset general  
>>>>>> weights lists". Do you have an explaination?
>>>>>
>>>>> Yes, because the changes may not be appropriate, depending on  
>>>>> how the general weights were defined. In your case, subset the  
>>>>> nb object and the list of idw weights, and rebuild the listw  
>>>>> object with the subsetted objects.
>>>>>
>>>>> Roger
>>>>
>>>> That´s what I already tried, but the error message says  
>>>> "neighbors and glist do not conform"??
>>>
>>> Right, you'll need to rebuild from the subsetted nb object from  
>>> the nbdists() step (and subsetted coordinates), because the  
>>> subsetted idw list will have weights for excluded observations.
>>>
>>> Roger
>>
>> Ok, I hope I understood everything right. You mean, firstly, I need  
>> to subset my nb list and afterwards, I need to calculate the  
>> nb-distances using nbdists()?
>
> Yes, that will give consistent results when the listw object  
> contains general weights. The same would apply to moran.test() with  
> a listw object with general weights, I would have thought based on  
> the code of subset.listw(), so I suggest not using na.pass in the  
> moran.test() call, and doing the same reconstruction before calling  
> the tests. I'd be interested in seeing an example of data (value,  
> nb.idw, coordinates(subset)),  that run successfully through  
> moran.test() because it should also fail on general weights.
>
> Roger

Finally, after some more failed trials the geary.test() is working for  
my dataset. Thank you so much for your suggestions!
I tested moran.test() with the consistent method against the na.pass  
method. For the first method I got an I-value of 0.7952, for the  
second a Moran´s I value of 0.79477. Do you know, how to explain this  
small (but existing) difference?

Kerstin

>>
>> Kerstin
>>
>>
>>>>
>>>> Kerstin
>>>>
>>>>>>
>>>>>> Kerstin
>>>>>>
>>>>>>
>>>>>>>>
>>>>>>>> Roger
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Kind regards,
>>>>>>>>> Kerstin
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>> Thank you very much,
>>>>>>>>>>> Kerstin
>>>>>>>>>>>
>>>>>>>>>>> ---
>>>>>>>>>>>
>>>>>>>>>>> file<-raster(test.tif")
>>>>>>>>>>> mask<-extent(file, 1, 50, 1, 50)
>>>>>>>>>>> subset<-crop(file,mask,test.tif", overwrite=TRUE)
>>>>>>>>>>> value <- as.matrix(subset)
>>>>>>>>>>>
>>>>>>>>>>> # Creation of a list of integer vectors giving the region  
>>>>>>>>>>> id numbers for the neighbors within the grid extent
>>>>>>>>>>> nb <- cell2nb(50, 50, type="queen", torus=TRUE)
>>>>>>>>>>>
>>>>>>>>>>> # Calculation of the distances along the links in the  
>>>>>>>>>>> neighbous list
>>>>>>>>>>> dist <- nbdists(nb, coordinates(subset), longlat=TRUE)
>>>>>>>>>>>
>>>>>>>>>>> # Converting the distances to inverse distance values
>>>>>>>>>>> inv.dist <- lapply(dist, function (x) 1/(x*100))
>>>>>>>>>>>
>>>>>>>>>>> # Supplementing the neighbors list with spatial weights  
>>>>>>>>>>> for a coding scheme
>>>>>>>>>>> nb.idw <- nb2listw(nb, glist=inv.dist, style="W")
>>>>>>>>>>> summary(unlist(nb.idw$weights))
>>>>>>>>>>>
>>>>>>>>>>> # Moran's test (two-sided)
>>>>>>>>>>> moran.global <- moran.test(value, listw=nb.idw,  
>>>>>>>>>>> zero.policy = TRUE, na.action=na.pass,  
>>>>>>>>>>> alternative="two.sided")
>>>>>>>>>>> moran.global
>>>>>>>>>>>
>>>>>>>>>>> # Geary's test (two-sided)
>>>>>>>>>>> geary.global <- geary.test(value, listw=nb.idw,  
>>>>>>>>>>> zero.policy = TRUE , alternative="two.sided")
>>>>>>>>>>> geary.global
>>>>>>>>>>>
>>>>>>>>>>> ----------------------------------------------------------------
>>>>>>>>>>> This message was sent through https://webmail.uni-jena.de
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> 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, NHH Norwegian School of Economics,
>>>>>>>>>> Helleveien 30, N-5045 Bergen, Norway.
>>>>>>>>>> voice: +47 55 95 93 55; fax +47 55 95 95 43
>>>>>>>>>> e-mail: Roger.Bivand at nhh.no
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ----------------------------------------------------------------
>>>>>>>>> This message was sent through https://webmail.uni-jena.de
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> -- 
>>>>>>> Roger Bivand
>>>>>>> Department of Economics, NHH Norwegian School of Economics,
>>>>>>> Helleveien 30, N-5045 Bergen, Norway.
>>>>>>> voice: +47 55 95 93 55; fax +47 55 95 95 43
>>>>>>> e-mail: Roger.Bivand at nhh.no
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> ----------------------------------------------------------------
>>>>>> This message was sent through https://webmail.uni-jena.de
>>>>>
>>>>> -- 
>>>>> Roger Bivand
>>>>> Department of Economics, NHH Norwegian School of Economics,
>>>>> Helleveien 30, N-5045 Bergen, Norway.
>>>>> voice: +47 55 95 93 55; fax +47 55 95 95 43
>>>>> e-mail: Roger.Bivand at nhh.no
>>>>>
>>>>
>>>>
>>>>
>>>> ----------------------------------------------------------------
>>>> This message was sent through https://webmail.uni-jena.de
>>>
>>> -- 
>>> Roger Bivand
>>> Department of Economics, NHH Norwegian School of Economics,
>>> Helleveien 30, N-5045 Bergen, Norway.
>>> voice: +47 55 95 93 55; fax +47 55 95 95 43
>>> e-mail: Roger.Bivand at nhh.no
>>>
>>
>>
>>
>> ----------------------------------------------------------------
>> This message was sent through https://webmail.uni-jena.de
>
> -- 
> Roger Bivand
> Department of Economics, NHH Norwegian School of Economics,
> Helleveien 30, N-5045 Bergen, Norway.
> voice: +47 55 95 93 55; fax +47 55 95 95 43
> e-mail: Roger.Bivand at nhh.no
>



----------------------------------------------------------------
This message was sent through https://webmail.uni-jena.de



More information about the R-sig-Geo mailing list