【问题标题】:How to deal with temporal correlation/trend in mppm如何处理以 mppm 为单位的时间相关性/趋势
【发布时间】:2016-06-28 00:16:26
【问题描述】:

早安,

我一直在通过Baddeley et al. 2015 使用mppm {spatstat} 将点过程模型拟合到多个点模式。 我的点模式是保护区 (owin) 中大型食草动物的年度计数数据(即雄性/雌性动物的点位置 (x, y) * 5 年)。我有许多空间协变量,例如到河流的距离(rivD)和植被生产力(NDVI)。

最初我拟合了一个模型,其中食草动物反应是 rivD + NDVI 的函数,并允许系数因性别而异(参见下面可重复示例中的 mppm1)。然而,我的年度点数模式在不同年份之间并不是独立的,因为存在随时间增加的趋势(即,与第 5 年相比,第 1 年的动物数量成倍增加)。 所以我添加了年份作为随机效应,认为如果我允许截距每年变化,我可以解释这一点(参见 mppm2)。

现在我想知道这是否是正确的方法?如果我要拟合 GAMM gamm {mgcv},我会添加一个时间相关结构,例如correlation = corAR1(form=~year) 但不认为这在 mppm 中是可能的(见 mppm3)?

我非常感谢任何关于如何使用 mppm {spatstat} 在复制点模式中处理这种时间相关结构的想法。

非常感谢

桑德拉

# R version 3.3.1 (64-bit)
library(spatstat) # spatstat version 1.45-2.008

#### Simulate point patterns
# multitype Neyman-Scott process (each cluster is a multitype process)
nclust2 = function(x0, y0, radius, n, types=factor(c("male", "female"))) {
  X = runifdisc(n, radius, centre=c(x0, y0))
  M = sample(types, n, replace=TRUE)
  marks(X) = M
  return(X)
}

year1 = rNeymanScott(5,0.1,nclust2, radius=0.1, n=5)
# plot(year1)
#-------------------
year2 = rNeymanScott(10,0.1,nclust2, radius=0.1, n=5)
# plot(year2)
#-------------------
year2 = rNeymanScott(15,0.1,nclust2, radius=0.1, n=10)
# plot(year2)
#-------------------
year3 = rNeymanScott(20,0.1,nclust2, radius=0.1, n=10)
# plot(year3)
#-------------------
year4 = rNeymanScott(25,0.1,nclust2, radius=0.1, n=15)
# plot(year4)
#-------------------
year5 = rNeymanScott(30,0.1,nclust2, radius=0.1, n=15)
# plot(year5)

#### Simulate distance to rivers
line <- psp(runif(10), runif(10), runif(10), runif(10), window=owin())
# plot(line)
# plot(year1, add=TRUE)

#------------------------ UPDATE ------------------------#
#### Create hyperframe
#---> NDVI simulated with distmap to point patterns (not ideal but just to test)
hyp.years = hyperframe(year=factor(2010:2014),
                       ppp=list(year1,year2,year3,year4,year5),
                       NDVI=list(distmap(year5),distmap(year1),distmap(year2),distmap(year3),distmap(year4)),
                       rivD=distmap(line),
                       stringsAsFactors=TRUE)
hyp.years$numYear = with(hyp.years,as.numeric(year)-1)
hyp.years

#### Run mppm models
# mppm1 = mppm(ppp~(NDVI+rivD)/marks,data=hyp.years); summary(mppm1)
#..........................
# mppm2 = mppm(ppp~(NDVI+rivD)/marks,random = ~1|year,data=hyp.years); summary(mppm2)
#..........................
# correlation = corAR1(form=~year)
# mppm3 = mppm(ppp~(NDVI+rivD)/marks,correlation = corAR1(form=~year),use.gam = TRUE,data=hyp.years); summary(mppm3)

###---> Run mppm model with annual trend and random variation in growth
mppmCorr = mppm(ppp~(NDVI+rivD+numYear)/marks,random = ~1|year,data=hyp.years)
summary(mppm1)

【问题讨论】:

    标签: spatstat


    【解决方案1】:

    如果人口规模随着时间的推移存在趋势,那么将这种趋势包含在模型的系统部分中可能是有意义的。我建议您在数据框中添加一个新的数字变量NumYear(例如,给出自 2010 年以来的年数)。然后尝试在模型公式中添加简单的趋势项,例如 +NumYear(这将对应于您观察到的人口指数增长。)您可以保留 1|year 随机效应项,这将允许人口规模的随机变化围绕长期增长趋势。

    无需将每年的数据模式拆分为单独的男性和女性模式。模型公式中的变量marks可以用来指定任何依赖性别的模型。

    我很确定 mppmuse.gam=TRUE 不能识别参数 correlation,这可能只是被忽略了。 (这取决于gam 内部发生了什么)。

    【讨论】:

    • 感谢巴德利教授的帮助。我已按照您的建议更新了上面的脚本。我将男性和女性分开,因为我无法让 marks 在公式中起作用。我尝试了 marks'marks' 但我继续收到以下错误:ExtractVars 中的模型公式无效。有什么建议吗?
    • 感谢您发现这一点。这一定是一个错误。你同意@adrian-baddeley 吗?我在mppm 代码中做了一个小的更正,希望能解决公式中的标记问题。您应该使用不带任何引号的marks。您可以通过安装名为“marked_mppm”的spatstat 临时分支(需要devtools 包)来测试这个新版本:devtools::install_github("spatstat/spatstat", ref = "marked_mppm")
    • 太棒了!非常感谢。我已经相应地更新了上面的脚本。
    • 当。是的,这是一个错误。 Ege的修复是正确的。 [错误修复将合并到spatstat开发版的主分支中。]
    猜你喜欢
    • 2019-10-30
    • 2012-11-29
    • 2020-02-05
    • 2021-09-02
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多