2015-06-28 2 views
2

У меня проблема с использованием R для вычисления теста Moran I для пространственной автокорреляции.Проблемы с вычислением моран I для пространственной автокорреляции

я сделал следующее:

#I download all the appropriate libraries 

    library(maptools) 
    library(spdep) 
    library(splancs) 
    library(spatstat) 
    library(pwt) 

#i import my shapefile and I calculate the coordinates 
serbia<-readShapePoly("SRB_adm1") 
coords<-coordinates(serbia) 


#i created a weigthed matrix using the above definition of neigbour(dnb60 object) 
dnb60.listw<-nb2listw(dnb60,style="W", zero.policy=F) 

#i import my dataset which contains around 500 variables and is a firm level dataset containing 2373 firms. 
library(foreign) 
statafile<-read.dta("path", missing.type = T, warn.missing.labels = T) 

#i combine the shapefile(serbia) with the imported dataset(statafile) and created file with coordiantes (new) using common variable ID_1(region code). My final dataset is data_total. 
new<- cbind(coordinates(serbia), serbia$ID_1) 
newdata <- data.frame(new) 
names(newdata)<-c("X", "Y", "ID_1") 
cis_08_10 <- merge(statafile, serbia, by="ID_1", all.x=T) 
data_total<-merge(cis_08_10, newdata, by="ID_1",all.x=T) 

Я заинтересован в расчетном тесте Moran I для в конечном наборе данных data_total конкретной переменной prod_ser.

я сделал следующее:

#calculating Moran I test 
moran.test(data_total$prod_ser, dnb60.listw, randomisation=F) 
I get the following error: Error in moran.test(data_total$prod_ser, dnb60.listw, randomisation = F) : 
    objects of different length 

Теперь data_total$prod_ser имеет длину 2373 и dnb60.listw имеют длину 3. Я думаю, что главная проблема в том, что W матрицы была создана с использованием serbia шейпа, содержащих 25 регионов, в то время как prod_ser переменных является переменной уровня предприятия от data_total, имеющей 2373 фирмы (которые, как я полагаю, должны соответствовать точечным данным, а фирмами являются очки).

Почему слияние наборов данных не помогло? Что еще мне нужно сделать, чтобы вычислить Моран I без этой ошибки?

ответ

0

Ну, вы сами определили проблему. Именно по этой причине вы получаете такую ​​ошибку. «Dnb60.listw» основан на наборе данных serbia, и поскольку вы используете «total data» в формуле moran.test, вы получаете такую ​​ошибку. Сначала вы должны объединить данные, а затем оценить «dnb60.listw» на основе объединенных данных, а затем рассчитать Moran I. Тебе все должно быть хорошо.

P.S. Я не эксперт по R, а английский также не является моим первым языком, поэтому я заранее извиняюсь, если есть какие-то недоразумения :)

+0

Я пробовал это, но возникает следующая ошибка: knn1IT <- knnnen (knearneigh (knearneigh (knearneigh) data_total $ X, data_total $ Y, k = 1, longlat = T)) Ошибка в knearneigh (data_total $ X, data_total $ Y, k = 1, longlat = T): knearneigh: данные не в матричной форме X и Y являются координатами. Вы хоть представляете, как с этим бороться? Спасибо. –

Смежные вопросы