Как решить ошибку длины соседей Impact() после запуска spdep::lagsarlm (модель пространственной авторегрессии)?

В моем наборе данных 9150 полигонов. Я пытался запустить пространственную авторегрессионную модель (SAR) в spdep, чтобы проверить пространственную зависимость моей переменной результата. После запуска модели я хотел изучить прямые/косвенные воздействия, но столкнулся с ошибкой, которая, похоже, как-то связана с тем, что длина соседей в матрице весов не равна n.

Я попытался запустить то же самое уравнение, что и модель SLX (Пространственное отставание X), и impacts() работало нормально, хотя в моем наборе были некоторые полигоны, у которых не было соседей. Я погуглил и просмотрел документацию spdep, но не смог найти подсказку, как решить эту ошибку.

# Defining queen contiguity neighbors for polyset and storing the matrix as list
q.nbrs <- poly2nb(polyset) 
listweights <- nb2listw(q.nbrs, zero.policy = TRUE)

# Defining the model
model.equation <- TIME ~ A + B + C

# Run SAR model
reg <- lagsarlm(model.equation, data = polyset, listw = listweights, zero.policy = TRUE)

# Run impacts() to show direct/indirect impacts
impacts(reg, listw = listweights, zero.policy = TRUE)

Error in intImpacts(rho = rho, beta = beta, P = P, n = n, mu = mu, Sigma = Sigma,  : 
  length(listweights$neighbours) == n is not TRUE

person Denys D.    schedule 30.06.2019    source источник


Ответы (1)


Я знаю, что это вопрос из 2019 года, но, возможно, он может помочь людям, столкнувшимся с той же проблемой. Я обнаружил, что в моем случае проблема заключалась в типе набора данных, ваш data=polyset должен быть типа "SpatialPolygonsDataFrame". Что может быть достигнуто путем преобразования ваших данных:

polyset_spatial_sf <- sf::as_Spatial(polyset, IDs = polyset$ID)

Затем перезапустите свой код.

person Perla Rivadeneyra    schedule 19.05.2020
comment
Спасибо за ответ, но проблема в том, что мой polyset уже sp типа SpatialPolygonsDataFrame. Я подумал, что, возможно, есть другое решение для того, которое обычно всплывает в Интернете. Я написал на R-sig-geo и получил ответ от Роджера Биванда. Он комментирует мой lagsarlm() Если ваши веса симметричны, используйте разложение Холецкого (матрицу), намного быстрее, с тем же результатом. Затем он добавляет в ответ на мою impacts() строку: Используйте трассировки, а не сами веса. С объектом listw вам нужно инвертировать матрицу nxn один раз в этом случае, 1+R раз, если вы запускаете симуляции Монте-Карло. - person Denys D.; 19.05.2020