Вопрос или проблема
Данные и цели
Я пытаюсь исправить пространственную автокорреляцию в регрессии, используя парные данные. Более конкретно, у меня есть для каждого пространственного полигона на сетке (квадраты 200м x 200м) число индивидуумов для двух групп популяции (назовем их a или b, это может быть, например, число взрослых и детей). У меня также есть растровая карта для одной экологической переменной (var). Для простоты я преобразовал оба набора данных в точки, используя центр каждого квадрата и присваивая соответствующее количество индивидуумов и медиану переменной в рассматриваемом квадрате.
Я хочу проверить, варьируется ли экологическая переменная между группами. Идея заключалась бы в использовании (вероятно, линейной) регрессии var ~ group с количеством индивидуумов в каждой группе в качестве весовой переменной.
Моя проблема
Мне не удалось написать модель, которая могла бы корректно учитывать 1. пространственную автокорреляцию, 2. веса и 3. повторяющиеся (т.е. зависимые) пространственные данные.
Что я пробовал (пример на игрушечных данных)
Игрушечные данные
library(sf)
library(nlme)
library(spdep)
# Создать координаты для каждой точки в сетке
df = data.frame(
id = 1:100,
x = rep(1:10, rep = 10),
y = rep(1:10, each = 10)
)
# Создать размер популяции
df = rbind(cbind(df, data.frame(pop = rep('a', 100), n = sample.int(100, 100))),
cbind(df, data.frame(pop = rep('b', 100), n = sample.int(100, 100))))
# Создать экологическую переменную с автокорреляцией и большей величиной в одной популяции
df$var = df$x*df$y/10 + rnorm(100, 1, 2) + as.numeric(df$pop == 'a')
data = st_as_sf(df, coords = c("x", "y"))
data$x = df$x
data$y = df$y
Простая линейная регрессия. Это не учитывает зависимость или пространственную корреляцию
mod0 = lm(var~pop, weights = n, data)
summary(mod0)
Модель смешанных эффектов с пространственной корреляционной структурой.
Здесь я не уверен, что случайный эффект необходим, так как расстояния должны это учитывать, но в любом случае я не могу использовать нулевые расстояния. Ссылка на формулу весов: https://www.r-bloggers.com/2012/12/a-quick-note-in-weighting-with-nlme/
mod1 = lme(var~pop, random = ~ 1|id, data = data, weights = ~1/n,
correlation = corExp(form = ~ x + y))
> Ошибка в getCovariate.corSpatial(object, data = data) :
недопустимые нулевые расстояния в "corSpatial"
Пространственная регрессия
# Найти ближайших соседей
nb <- spdep::dnearneigh(data, d1 = 0, d2 = 1)
lw <- nb2listw(nb, style = "W", zero.policy = TRUE)
# Модель с пространственно коррелированными ошибками
serr <- spatialreg::errorsarlm(var~pop,
data = data,
listw = lw,
zero.policy = TRUE,
na.action = na.omit,
weights = n)
summary(serr)
# Моя проблема здесь: зависимость между двумя группами в каждой точке
# Модель с пространственным лагом
slag <- spatialreg::lagsarlm(var~pop,
data = data,
listw = lw,
zero.policy = TRUE,
na.action = na.omit,
weights = n)
summary(slag)
> Ошибка в spatialreg::lagsarlm(var ~ pop, data = data, listw = lw, zero.policy = TRUE, :
неиспользуемый аргумент (weights = n)
# Мои проблемы здесь: зависимость между двумя группами в каждой точке +
# не могу использовать веса в lagsarlm?
# Другой вариант - дублировать строки (одна строка для каждого индивидуума), но я подозреваю, что это повлияет на тесты значимости.
Мой вопрос
Какова была бы правильная структура этой модели, используя эти или другие подходы для пространственной корреляции?
Ответ или решение
Пространственная регрессия для парных данных: способ построения модели
Введение
Ваша задача заключается в корректировке пространственной автокорреляции в регрессионном анализе с использованием парных данных. Конкретно, вы хотите исследовать, как экологическая переменная варьируется между двумя группами населения (a и b) внутри пространственно определенных полигонов. Важными аспектами вашего анализа являются: пространственная автокорреляция, использование весов и зависимость пространственных данных.
Проблематика
Существует несколько подходов к построению моделей пространственной регрессии, которые могут помочь учитывать заданные вами факторы. Рассмотрим несколько из них.
1. Подходы к учёту пространственной автокорреляции
1.1 Учет пространственной автокорреляции через ошибки
С помощью модель errorsarlm
из пакета spatialreg
вы можете учесть пространственную зависимость ошибок в вашей модели. Эта модель будет учитывать, что значения в близлежащих точках могут быть зависимыми.
library(spatialreg)
serr <- errorsarlm(var ~ pop, data = data, listw = lw, zero.policy = TRUE, na.action = na.omit)
summary(serr)
1.2 Пространственная лаговая регрессия
Хотя вы упомянули проблему с использованием весов в lagsarlm
, имейте в виду, что эта модель учитывает пространственное влияние на предикторы. Однако, в отличие от errorsarlm
, она не допускает прямого использования весов:
slag <- lagsarlm(var ~ pop, data = data, listw = lw, zero.policy = TRUE, na.action = na.omit)
summary(slag)
Чтобы учесть зависимость между группами, вы можете попробовать создать интерпретацию переменной "группа", которая комбинирует данные для обеих групп, предварительно нормировав их по количеству индивидуумов.
2. Модели с учетом весов
Если вы хотите использовать веса на уровне индивидуумов (например, на основе их численности), вы можете рассмотреть возможность использования модели с фиксированными эффектами. Такой подход опустит необходимость в весах на уровне наблюдений.
Модели с фиксированными эффектами можно реализовать с помощью пакета plm
или lme4
, который позволяет учитывать корреляцию между наблюдениями.
library(lme4)
mod2 <- glmer(var ~ pop + (1|id), data = data, weights = n, family = gaussian())
summary(mod2)
3. Повторное использование строк
Хотя вы заметили, что повторное использование строк может повлиять на статистические тесты, это может быть подходом к индивидуальному учёту каждой популяции. Вы можете создать новые строки для каждой особи в ваших группах (группы a и b), а затем протестировать разные модели.
Заключение
Построение модели для учета пространственной автокорреляции и зависимых данных – это сложная задача, которая требует глубокой экспертизы в области статистики и методов пространственного анализа. Рассмотрите различные подходы, такие как использование моделей пространственной регрессии, моделей с фиксированными эффектами и повторного использования строк для учета весов. Постарайтесь тщательно протестировать каждую модель, чтобы определить, насколько успешно она учитывает ваши факторы и отвечает на поставленные вами научные вопросы.