gpt4 book ai didi

r - 如何检查具有负二项分布的 GAM 中的过度分散?

转载 作者:行者123 更新时间:2023-12-04 10:53:34 25 4
gpt4 key购买 nike

我使用 gam 在负二项式族中拟合广义加性模型来自 mgcv包裹。我有一个包含因变量 y 的数据框, 自变量 x , 一个因素 fac和一个随机变量 ran .我适合以下模型

gam1 <- gam(y ~ fac + s(x) + s(ran, bs = 're'), data = dt, family = "nb"

我在 Negative Binomial Regression 一书中读到,模型仍然有可能过度分散。我在 glm 中找到了检查过度分散的代码但我没能找到 gam .我也遇到过只检查 QQ 图和标准化残差与预测残差的建议,但如果数据仍然过度分散,我无法从我的图中决定。因此,我正在寻找可以解决我的问题的方程式。

最佳答案

检查模型与观察到的数据的比较情况(并因此检查数据是否相对于模型隐含的条件分布过度分散)的好方法是通过根图。

我有一个 blog post展示了如何使用 countreg 包对 glm() 模型执行此操作,但这也适用于 GAM。

应用于模型的 GAM 版本的帖子的显着部分是:

library("coenocliner")
library('mgcv')

## parameters for simulating
set.seed(1)
locs <- runif(100, min = 1, max = 10) # environmental locations
A0 <- 90 # maximal abundance
mu <- 3 # position on gradient of optima
alpha <- 1.5 # parameter of beta response
gamma <- 4 # parameter of beta response
r <- 6 # range on gradient species is present
pars <- list(m = mu, r = r, alpha = alpha, gamma = gamma, A0 = A0)
nb.alpha <- 1.5 # overdispersion parameter 1/theta
zprobs <- 0.3 # prob(y == 0) in binomial model

## simulate some negative binomial data from this response model
nb <- coenocline(locs, responseModel = "beta", params = pars,
countModel = "negbin",
countParams = list(alpha = nb.alpha))
df <- setNames(cbind.data.frame(locs, nb), c("x", "yNegBin"))

好的,所以我们有一个从负二项式抽样分布中抽取的数据样本,我们现在将对这些数据拟合两个模型:

  1. 泊松 GAM
m_pois <- gam(yNegBin ~ s(x), data = df, family = poisson())
  1. 负二项式 GAM
m_nb   <- gam(yNegBin ~ s(x), data = df, family = nb())

countreg 包尚未在 CRAN 上,但可以从 R-Forge 安装:

install.packages("countreg", repos="http://R-Forge.R-project.org")

然后加载包并绘制根图:

library("countreg")
library("ggplot2")

root_pois <- rootogram(m_pois, style = "hanging", plot = FALSE)
root_nb <- rootogram(m_nb, style = "hanging", plot = FALSE)

现在绘制每个模型的根图:

autoplot(root_pois)
autoplot(root_nb)

这就是我们得到的(在使用 cowplot::plot_grid() 将两个根图排列在同一个图上绘制之后)

enter image description here

我们可以看到,对于这些数据,负二项式模型在这里的效果比泊松 GAM 要好一些——在整个观测计数范围内,条形图的底部更接近于零。

countreg 包详细介绍了如何在零线周围添加不​​确定带作为拟合优度检验的一种形式。

您还可以使用每个模型的 Pearson 残差计算色散参数的 Pearson 估计值:

r$>  sum(residuals(m_pois, type = "pearson")^2) / df.residual(m_pois)
[1] 28.61546
r$> sum(residuals(m_nb, type = "pearson")^2) / df.residual(m_nb)
[1] 0.5918471

在这两种情况下,这些都应该是 1;我们在泊松 GAM 中看到大量过度分散,在负二项式 GAM 中看到一些分散不足。

关于r - 如何检查具有负二项分布的 GAM 中的过度分散?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59342595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com