[R-sig-Geo] Moran's I with Objects of Different Length

Roger Bivand Roger@B|v@nd @end|ng |rom nhh@no
Wed Aug 12 12:55:21 CEST 2020


On Tue, 11 Aug 2020, Chanda Chiseni wrote:

> I am trying to perform moran's I test on residuals from by probit model
> using k-nearest neighbour weights, however i run into an error which i
> cant seem to find the solution anywhere online the error is
>
>> moran.test(residuals.glm(svyprobitest),knear2weight)
> Error in moran.test(residuals.glm(svyprobitest), knear2weight) :
>  objects of different length
>
>
> The codes I use to come up to this are below
>
>> library(foreign)
>> dhsanalysis2= read.dta("DHSSpatialreg11.dta")
> ##removing NAs in PSU
>> dhsanalysis3=subset(dhsanalysis2, !is.na(psu))
> ##generating a survey design
>> mydesighdhs= svydesign(ids =~psu, data =dhsanalysis3, weight = ~wgt,
> strata = ~v023,nest=TRUE)
> ##Defining coordinate colums
>> coordinates(dhsanalysis3)= c("longnum","latnum")
> #Defining Projection
>> proj4string(dhsanalysis3) <- CRS("+init=epsg:4326")
> ##binding longiude and latitude
>> lon2<- dhsanalysis3$longnum
>> lat2<- dhsanalysis3$latnum
>> coords<- cbind(lon2,lat2)
> ##Creating spatial weights based on the nearest neighbour
>> knear2= knearneigh(coords,k=2,longlat=T)
> Warning message:
> In knearneigh(coords, k = 2, longlat = T) :
>  knearneigh: identical points found ### I get a warning message on
> identical points found, is this a problem and how would i deal with this

It usually indicates muddled thinking. You have more than one observation 
at the same point, which could be an unintended duplicate (copy of the 
same observation), or it could indicate that any spatial process has 
multiple values at that point. In geostatistics, one would jitter the 
points to introduce distance. In your case, this probably isn't households 
living at one address point. All the observations at the same point will 
get the same sets of neighbours. If there are many co-located 
observations, k in k-nearest may be too small to include them all.

>> knear2.nb= knn2nb(knear2)
>> knear2weight= nb2listw(knear2.nb, style="W",zero.policy=T)
>
> ##declaring categorical variables as factor variables
>> dhsanalysis3$hivpositive.f <- factor(dhsanalysis3$hivpositive)
>> dhsanalysis3$protestant.f <- factor(dhsanalysis3$protestant2)
>> dhsanalysis3$Married.f <- factor(dhsanalysis3$Married)
>> dhsanalysis3$female.f <- factor(dhsanalysis3$female)
>> dhsanalysis3$urban1.f <- factor(dhsanalysis3$urban1)
>> dhsanalysis3$river10kmdum.f <- factor(dhsanalysis3$river10kmdum)
>> dhsanalysis3$Explorer50kmdum.f <- factor(dhsanalysis3$Explorer50kmdum)
>> dhsanalysis3$Rail50kmdum.f <- factor(dhsanalysis3$Rail50kmdum)
>> dhsanalysis3$Province1.f <- factor(dhsanalysis3$Province1)
>> dhsanalysis3$WealthIndex.f <- factor(dhsanalysis3$WealthIndex)
>> dhsanalysis3$occupation2.f <- factor(dhsanalysis3$occupation2)
>> dhsanalysis3$highested.f <- factor(dhsanalysis3$highested)
>> protestant.f= dhsanalysis3$protestant.f
>> hivpositive.f=dhsanalysi3$hivpositive.f
>> Married.f=dhsanalysis3$Married.f
>> female.f=dhsanalysis3$female.f
>> urban1.f=dhsanalysis3$urban1.f
>> river10kmdum.f=dhsanalysis3$river10kmdum.f
>> Explorer50kmdum.f=dhsanalysis2$Explorer50kmdum.f
>> Province1.f=dhsanalysis3$Province1.f
>> WealthIndex.f=dhsanalysis3$WealthIndex.f
>> occupation2.f=dhsanalysis3$occupation2.f
>> highested.f=dhsanalysis3$highested.f
>> Age=dhsanalysis3$Age
>> Age2=dhsanalysis3$Age2
>> HIVKnowledge=dhsanalysis3$HIVKnowledge
>> churchkm=dhsanalysis3$churchkm
>> lnhospitalkm=dhsanalysis3$lnhospitalkm
>> lnElevationMean=dhsanalysis3$lnElevationMean
>
>> ###VARIABLES IN SURVEY DESIGN
>> mydesighdhs$hivpositive.f <- factor(dhsanalysis3$hivpositive)
>> mydesighdhs$protestant.f <- factor(dhsanalysis3$protestant2)
>> mydesighdhs$Married.f <- factor(dhsanalysis3$Married)
>> mydesighdhs$female.f <- factor(dhsanalysis3$female)
>> mydesighdhs$urban1.f <- factor(dhsanalysis3$urban1)
>> mydesighdhs$river10kmdum.f <- factor(dhsanalysis3$river10kmdum)
>> mydesighdhs$Explorer50kmdum.f <- factor(dhsanalysis3$Explorer50kmdum)
>> mydesighdhs$Rail50kmdum.f <- factor(dhsanalysis3$Rail50kmdum)
>> mydesighdhs$Province1.f <- factor(dhsanalysis3$Province1)
>> mydesighdhs$WealthIndex.f <- factor(dhsanalysis3$WealthIndex)
>> mydesighdhs$occupation2.f <- factor(dhsanalysis3$occupation2)
>> mydesighdhs$highested.f <- factor(dhsanalysis3$highested)
>> mydesighdhs$Age=Age
>> mydesighdhs$Age2=Age2
>> mydesighdhs$HIVKnowledge=HIVKnowledge
>> mydesighdhs$churchkm=churchkm
>> mydesighdhs$lnhospitalkm=lnhospitalkm
>> mydesighdhs$lnElevationMean=lnElevationMean
>
>> svyprobitest= svyglm(hivpositive.f~ churchkm +lnhospitalkm +protestant.f+
> Age+
> Age2+Married.f+female.f+urban1.f+river10kmdum.f+Explorer50kmdum.f+Rail50kmdum.f+lnElevationMean+Province1.f
> + WealthIndex.f + HIVKnowledge+ occupation2.f+
> highested.f,design=mydesighdhs,family = quasibinomial(link =
> "probit"),data=dhsanalysis3)
> Error in .subset2(x, i, exact = exact) : subscript out of bounds

So you've an error anyway.

>
> ## Iran my probit model without implementing the survey design in the model
> just to see whether Moran test is working
>> svyprobitest2= glm(hivpositive.f~ churchkm +lnhospitalkm +protestant.f+
> Age+
> Age2+Married.f+female.f+urban1.f+river10kmdum.f+Explorer50kmdum.f+Rail50kmdum.f+lnElevationMean+Province1.f
> + WealthIndex.f + HIVKnowledge+ occupation2.f+ highested.f,family =
> quasibinomial(link = "probit"),data=dhsanalysis3)
> #Moran test
>> moran.test(residuals.glm(svyprobitest),knear2weight)
> Error in moran.test(residuals.glm(svyprobitest), knear2weight) :
>  objects of different length
>

Testing residuals using moran.test() is usually wrong, as the expectation 
and variance of the statistic are based on a null model (intercept only), 
not a model with covariates.

What are length(residuals.glm(svyprobitest)) and length(knear2.nb)? Did 
glm drop observations with missing values? If so, you should subset both 
the data submitted to glm() and the neighbour object so that they match.

Hope this helps,

Roger

>
> Kind Regards,
>
> Michael Chanda Chiseni
>
> Phd Candidate
>
> Department of Economic History
>
> Lund University
>
> Visiting address: Alfa 1, Scheelevägen 15 B, 22363 Lund
>
>
>
> *Africa is not poor, it is poorly managed (Ellen Johnson-Sirleaf ). *
>
> 	[[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo using 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 using nhh.no
https://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en


More information about the R-sig-Geo mailing list