【问题标题】:Spatial autocorrelation analysis withe several observations per location in R空间自相关分析,R 中每个位置有多个观测值
【发布时间】:2020-02-18 10:19:57
【问题描述】:

我从一个景观的多个采样点收集了数据。 每个单独的样本都有一个唯一的因变量 (y) 和与其他 9 个样本共享的解释变量:

DependentVar<-rnorm(60,mean = 9.5,sd=.5)
Temperature<-rep(c(23.5,18,26.1,24.7,20.8,20),each=10)
SpatData<-data.frame(x = rep(runif(6,0,100),each=10), y = rep(runif(6,0,100),each=10))
SpatData$Temperature<-Temperature
SpatData$DependentVar<-DependentVar

我已经构建了一个线性模型来测试温度的影响。关于因变量:

SpatLM<-lm(DependentVar~Temperature,data = SpatData)

然后我尝试像这样测试残差的自相关:

library(DHARMa)
sims<-simulateResiduals(SpatLM)
testSpatialAutocorrelation(sims, x=SpatData$x,y=SpatData$y)

我收到的信息是:

testSpatialAutocorrelation(sims, x = SpatData$x, y = SpatData$y) 中的错误: 测试空间自相关需要唯一的 x,y 值 - 如果每个位置有多个观测值,请使用 recalculateResiduals 函数来聚合每个位置的残差,或者从拟合对象中提取残差,并独立绘制/测试它们中的每一个以进行空间重复子组(一种典型的场景是重复空间观察,在这种情况下,可以分别绘制/测试每个时间步长的时间自相关)。请注意,后者必须在 testSpatialAutocorrelation 之外手动完成。

无论有没有分组,使用recalculateResiduals() 似乎都不起作用: simsrecalc&lt;-recalculateResiduals(sims,group = SpatData$Temperature)

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: r spatial autocorrelation


    【解决方案1】:

    错误信息中给出了答案。查看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 次。 y 值也是如此。因此,您的数据中只有 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
    

    reprex package (v0.3.0) 于 2020 年 2 月 18 日创建

    【讨论】:

    • 感谢您的回答。数据是植物属性。我在几个地点对植物进行了采样,每个采样点有几株植物。因此类似的温度。和坐标。我需要测试采样点之间的距离是否对植物的属性有影响。我不确定对每个站点的结果求和是否正确,因为它可能会掩盖每个站点内的变化。
    【解决方案2】:

    我同意这里的另一个答案,即数据集/结构存在一些混淆......

    要对错误消息添加一些说明: 我遇到了类似的问题,发现testSpatialAutocorrelation() 中的xy 参数(同样,testTemporalAutocorrelation() 中的time 参数)需要是唯一的向量值,而不仅仅是分组变量的面板化数据框向量/列。

    使用与原始问题类似的结构的示例解决方案:

    library(DHARMa)
    library(stringr)
    
    SpatData$coords <- paste(SpatData$x,", ",SpatData$y)
    coords <- c(unique(SpatData$coords))
    x_unique <- c(str_extract(coords, "^.+(?=,)"))
    y_unique <- c(str_extract(coords, "(?<=, ).+$"))
    
    sims<-simulateResiduals(SpatLM)
    simsrecalc<-recalculateResiduals(sims,group = SpatData$coords)
    testSpatialAutocorrelation(simsrecalc, x = x_unique, y = y_unique)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      相关资源
      最近更新 更多