Ответ дается в сообщении об ошибке. Посмотрите на свои смоделированные данные для SpatData$x
:
SpatData$x
#> [1] 14.65469 14.65469 14.65469 14.65469 14.65469 14.65469 14.65469 14.65469 14.65469 14.65469
#> [11] 55.59340 55.59340 55.59340 55.59340 55.59340 55.59340 55.59340 55.59340 55.59340 55.59340
#> [21] 88.07651 88.07651 88.07651 88.07651 88.07651 88.07651 88.07651 88.07651 88.07651 88.07651
#> [31] 58.31331 58.31331 58.31331 58.31331 58.31331 58.31331 58.31331 58.31331 58.31331 58.31331
#> [41] 30.44448 30.44448 30.44448 30.44448 30.44448 30.44448 30.44448 30.44448 30.44448 30.44448
#> [51] 53.43158 53.43158 53.43158 53.43158 53.43158 53.43158 53.43158 53.43158 53.43158 53.43158
Каждое значение повторяется 10 раз из-за способа, которым вы генерировали случайные данные. То же самое относится и к значениям у. Поэтому у вас есть только 6 уникальных (x, y) координат в ваших данных, и вы запрашиваете пространственную автокорреляцию, когда некоторые из выборок совмещены. Это немного похоже на попытку проанализировать временной ряд стоимости акций, когда у вас есть десять различных значений для цены акций в каждый момент времени. Это на самом деле не имеет никакого смысла.
Если вы создаете свой тестовый фрейм данных, используя runif(60, 0, 100)
для x, и делаете то же самое для y, проблема исчезает, потому что теперь у вас есть 60 уникальных (x, y) координаты.
Ваше описание ваших реальных данных не совсем ясно, чтобы знать, является ли это реальной проблемой или нет. Предполагая, что у вас есть несколько образцов из каждого места, вам нужно решить, что с ними делать. Если они все разные переменные, то вы просто помещаете их в разные столбцы вашего фрейма данных. Если они являются несколькими измерениями одной и той же переменной (как в вашем примере), вам нужно решить, хотите ли вы их усреднить или (если они были взяты в разное время), хотите ли вы запускать пространственную автокорреляцию в каждый момент времени.
Вот пример взятия средней температуры в каждой точке и использования ее для пространственной автокорреляции:
library(DHARMa)
library(dplyr)
SpatData <- data.frame(x = rep(runif(6, 0, 100), each = 10),
y = rep(runif(6, 0, 100), each = 10),
Temperature = rep(c(23.5, 18, 26.1, 24.7, 20.8, 20), each = 10),
DependentVar = rnorm(60, mean = 9.5, sd = 0.5))
MeanData <- SpatData %>%
group_by(x, y) %>%
summarize(Temperature = mean(Temperature), DependentVar = mean(DependentVar))
SpatLM <- lm(DependentVar ~ Temperature, data = MeanData)
sims <- simulateResiduals(SpatLM)
testSpatialAutocorrelation(sims, x = MeanData$x, y = MeanData$y)
#>
#> DHARMa Moran's I test for spatial autocorrelation
#>
#> data: sims
#> observed = -0.45465, expected = -0.20000, sd = 0.19274, p-value =
#> 0.1864
#> alternative hypothesis: Spatial autocorrelation
Создано в 2020-02-18 пакетом Представ (v0.3.0)