小编Rob*_*nox的帖子

空间 bam (gam) 中的时间自相关

我正在根据声学标签检测对河流中的鱼类深度进行建模(这意味着数据并不完全是完美间隔的连续时间序列)。我预测,深度会根据河流的空间位置而有所不同,因为不同的区域有不同的可用深度,一天中的不同时间,因为深度对光有反应,一年中的一天也有相同的原因,并且个体之间也有所不同。那么基本模型就是

深度 ~ s(lon, lat) + s(小时) + s(yday) + s(ID, bs="re")

有几百万次检测,所以模型很糟糕,所以

bam(深度 ~ s(经度、纬度) + s(小时) + s(yday) + s(ID, bs="re")

每个人的深度应该与之前的记录自相关(当然这取决于它最后一次注册的时间,但我不太知道如何解释时间上的离散间隔)。

我知道 rho 参数在 bam 中用作一种 corAR1 函数,我想这可以解释自相关。我还考虑将 lag(深度,by=ID) 作为预测变量,它的表现相当好,但我不确定这种方法的有效性。

我跟踪了几个面包屑发现 rho 可以从没有相关结构的模型中估计 rho<-acf(resid(m1),plot=FALSE)$acf 2 -

对于每个人,我添加了一个 ARSTART 变量来调用 AR.start = df$ARSTART 来考虑个体之间不同的时间序列 - 所以我的模型是

m2<-bam(depth~s(lon, lat)+s(yday)+s(hour, bs="cc")+s(fID, bs="re"), AR.start=df$ARSTART, discrete=T, rho=rho, data=df) 
Run Code Online (Sandbox Code Playgroud)

一切都进展顺利,根据 AIC,具有自相关结构的模型拟合得更好(更好),但效果的后验估计非常不准确(或缩放比例很差)。与没有结构的模型相比,根据 lon、lat 平滑器的空间效应变得极端(且均匀),其中空间平滑器似乎非常有效地捕获空间方差,表明它们被预测在较深的区域中更深且在较浅的区域较浅。

图 1. 深度的后验空间估计用于没有自相关结构的模型,但显然没有考虑深度和滞后深度将相关的现实(按 ID 嵌套)。注意 z 值在原始值范围内调整后验估计是有意义的(大多数探测深度为 0-4 m)

图 2. 当模型包含 rho 参数来解释时间自相关时,深度使用的后验空间估计。注意 z 的巨大尺度,它远远超出了我们测量的范围,并且根本无法解释

如果需要,我可以提供示例代码,但问题本质上是,与模型相比,自相关结构会如此显着地改变后验估计的值是否有意义,并且时间自相关结构是否吸收了所有方差是否与空间效应相关(在具有自相关结构的模型中似乎被否定)?

一些想法-我不知道什么是最好的:

  1. 盲目遵循 AIC,而没有真正理解为什么后验估计如此奇怪(巨大),或者为什么空间效应消失,尽管基于系统的生物学知识显然很重要
  2. 报告我们将自相关结构拟合到数据中,它拟合得很好,但没有改变关系的形状,因此我们呈现没有该结构的模型结果
  3. 没有自相关结构但使用 s(lagDepth) 变量作为固定效应的模型
  4. 模型的变化是深度而不是深度,这似乎消除了一些自相关。

非常感谢所有帮助-非常感谢

spatial smoothing gam mgcv autocorrelation

6
推荐指数
0
解决办法
723
查看次数

在R包rms中纳入随机拦截以进行混合效应逻辑回归

弗兰克·哈雷尔(Frank Harrell)的R包rms是实现多重逻辑回归的绝佳工具。但是,我想知道如何/是否有可能将随机效应纳入通过均方根的模型中。我知道rms可以通过nlme运行,但是只能通过广义最小二乘函数(Gls)运行,而不能通过lme函数运行,因此可以纳入随机效应。混合效应模型对于分析/解释可能会出现问题,但有时是必需的,以便考虑模型中的嵌套效应。

我不确定在这种情况下是否有用,但是我已经从rms帮助文件中复制了一些代码,这些文件运行了简单的逻辑回归模型,并添加了一行代码,表明通过MASS软件包的glmmPQL运行的混合效应逻辑回归模型。

n <- 1000    # define sample size
require(rms)
set.seed(17) # so can reproduce the results
age            <- rnorm(n, 50, 10)
blood.pressure <- rnorm(n, 120, 15)
cholesterol    <- rnorm(n, 200, 25)
sex            <- factor(sample(c('female','male'), n,TRUE))
label(age)            <- 'Age'      # label is in Hmisc
label(cholesterol)    <- 'Total Cholesterol'
label(blood.pressure) <- 'Systolic Blood Pressure'
label(sex)            <- 'Sex'
units(cholesterol)    <- 'mg/dl'   # uses units.default in Hmisc
units(blood.pressure) <- 'mmHg'
ch <- cut2(cholesterol, g=40, levels.mean=TRUE) # use mean values in intervals
table(ch) …
Run Code Online (Sandbox Code Playgroud)

r mixed-models logistic-regression

5
推荐指数
0
解决办法
625
查看次数