对于当前的一项工作,我正在尝试模拟英国林地中山毛榉树的树木死亡概率。我记录了树木在 3 个不同的人口普查期间是活还是死,以及它们的直径和生长速度的数据。每棵树都有一个 ID 号,因此可以在每个时间间隔识别它。然而,人口普查间隔各不相同,因此一次调查和另一次调查之间的时间是 4 年、12 年或 18 年。显然,普查期越长,一棵树在下一次调查时死亡的可能性就越大。我在制作一个现实的可重现示例时遇到了问题,因此您可以在此处找到数据。
数据集中的变量是:
- ID - 树的唯一 ID
- Block - 树所在的 20x20m 地块的 ID
- 死亡 - 树的状态,死亡 (1) 或活着 (0)
- GR - 上次调查的年增长率
- DBH - 树的胸高直径
- SL - 人口普查之间的时间间隔(以年为单位)
一旦一棵树被记录为死亡,它就会从随后的调查中消失。
理想情况下,我希望能够使用有关直径和增长率的信息来估计一棵树的年死亡率。经过一段时间的搜索,我发现逻辑暴露模型似乎能够通过使用二项式模型的 logit 链接的更改版本来解释人口普查期间的差异,正如 Ben Bolker在此处详述的那样。这最初是由 Shaffer 用来确定巢的年龄(因此暴露)不同的鸟巢存活的每日概率。我没有看到它在巢生存模型的背景之外使用,但似乎我应该能够使用它来模拟暴露不同的生存/死亡率。
require(MASS)
logexp <- function(exposure = 1)
{
linkfun <- function(mu) qlogis(mu^(1/exposure))
## FIXME: is there some trick we can play here to allow
## evaluation in the context of the 'data' argument?
linkinv <- function(eta) plogis(eta)^exposure
logit_mu_eta <- function(eta) {
ifelse(abs(eta)>30,.Machine$double.eps,
exp(eta)/(1+exp(eta))^2)
## OR .Call(stats:::C_logit_mu_eta, eta, PACKAGE = "stats")
}
mu.eta <- function(eta) {
exposure * plogis(eta)^(exposure-1) *
logit_mu_eta(eta)
}
valideta <- function(eta) TRUE
link <- paste("logexp(", deparse(substitute(exposure)), ")",
sep="")
structure(list(linkfun = linkfun, linkinv = linkinv,
mu.eta = mu.eta, valideta = valideta,
name = link),
class = "link-glm")
}
目前我的模型看起来像这样,但我会在进行过程中加入更多变量:
require(lme4)
Dead<-read.csv("Stack_dead.csv",)
M1<-glmer(Dead~DBH+(1|ID),data=Dead,family=binomial(logexp(Dead$SL)))
#I use (1|ID) here to account for the repeated measurements of the same individuals
summary(M1)
plot(Dead$DBH,plogis(predict(M1,re.form=NA)))
我主要想知道:
- 我用来控制人口普查之间时间差异的统计技术是否合理?如果不是,你能想出更好的方法来解决这个问题吗?
- 如果第一个问题的答案是肯定的,那么使用逆 logit (plogis) 是获得表示为概率的预测的正确方法吗?
提前感谢您的帮助!