两条不同线中的 GAM 残差 - R "mgcv"
GAM residuals in two distinct lines - R "mgcv"
我正在尝试 运行 GAMs 使用 r 上的二项式数据 (link=logit) 和 mgcv 包。这是为了尝试使用存在 (1) 和不存在 (0) 数据作为响应,并使用一套环境变量作为预测变量来描述宽吻海豚的栖息地使用情况。
我使用的代码似乎工作正常,但是,当我绘制残差时,我留下了两条不同的线。我的理解是,在绘制残差时,应该在线周围均匀散布 - 但事实并非如此 - 将不胜感激任何关于我应该寻找什么的指导
这是使用 2 个变量的示例的输出:
m1<-gam(Presence~s(Dist_Ent_k,k=8)+s(Dist_wall_m,k=5), data=mydata,
family = binomial(link = "logit"), weights=resp.weight)
summary(m1)
Family: binomial
Link function: logit
Formula:
Presence ~ s(Dist_Ent_k, k = 8) + s(Dist_wall_m, k = 5)
Parametric coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.30155 0.09839 -3.065 0.00218 **
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df Chi.sq p-value
s(Dist_Ent_k) 2.658 3.333 16.411 0.0015 **
s(Dist_wall_m) 1.389 1.680 0.273 0.7434
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.0359 Deviance explained = 3.42%
UBRE = -0.76828 Scale est. = 1 n = 2696
plot(m1,shade=T,scale = 0,residuals = TRUE)]
提前致谢!
您绘制的是部分残差,您看到两个不同的波段只是您的数据是二进制或伯努利观测值的结果。
如果绘制偏差残差与线性预测变量的关系图,您也会看到这一点,只是更加极端;尝试
layout(matrix(1:4, ncol = 2, byrow = TRUE))
gam.check(m1)
layout(1)
伯努利模型(单次试验的二项式)的模型诊断很困难,因为数据的极端性质——响应只是 0 或 1。您可以更轻松地进行诊断,例如,如果您聚合以某种方式获取数据,这样您就不再有 m=1
试验,而是 m=M
;假设你的数据是按空间排列的,你可以在该区域创建一个更大的网格,并聚合每个网格中的点的 0 和 1,保留关于每个网格中有多少点的信息(为每个网格提供 M
聚合二项式计数)。
否则我不认为为此类模型绘制部分或偏差残差有什么好处。来自 gam.check()
的集合中的 QQ-plot,特别是如果您添加 rep = 100
(或一些这样的数字)对于检查分布假设更有用,因为它允许创建具有良好属性的参考带像这样的模型;请参阅 ?qq.gam
了解仅创建 QQ 图所需的 function/info。
我正在尝试 运行 GAMs 使用 r 上的二项式数据 (link=logit) 和 mgcv 包。这是为了尝试使用存在 (1) 和不存在 (0) 数据作为响应,并使用一套环境变量作为预测变量来描述宽吻海豚的栖息地使用情况。
我使用的代码似乎工作正常,但是,当我绘制残差时,我留下了两条不同的线。我的理解是,在绘制残差时,应该在线周围均匀散布 - 但事实并非如此 - 将不胜感激任何关于我应该寻找什么的指导
这是使用 2 个变量的示例的输出:
m1<-gam(Presence~s(Dist_Ent_k,k=8)+s(Dist_wall_m,k=5), data=mydata,
family = binomial(link = "logit"), weights=resp.weight)
summary(m1)
Family: binomial
Link function: logit
Formula:
Presence ~ s(Dist_Ent_k, k = 8) + s(Dist_wall_m, k = 5)
Parametric coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.30155 0.09839 -3.065 0.00218 **
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df Chi.sq p-value
s(Dist_Ent_k) 2.658 3.333 16.411 0.0015 **
s(Dist_wall_m) 1.389 1.680 0.273 0.7434
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.0359 Deviance explained = 3.42%
UBRE = -0.76828 Scale est. = 1 n = 2696
plot(m1,shade=T,scale = 0,residuals = TRUE)]
提前致谢!
您绘制的是部分残差,您看到两个不同的波段只是您的数据是二进制或伯努利观测值的结果。
如果绘制偏差残差与线性预测变量的关系图,您也会看到这一点,只是更加极端;尝试
layout(matrix(1:4, ncol = 2, byrow = TRUE))
gam.check(m1)
layout(1)
伯努利模型(单次试验的二项式)的模型诊断很困难,因为数据的极端性质——响应只是 0 或 1。您可以更轻松地进行诊断,例如,如果您聚合以某种方式获取数据,这样您就不再有 m=1
试验,而是 m=M
;假设你的数据是按空间排列的,你可以在该区域创建一个更大的网格,并聚合每个网格中的点的 0 和 1,保留关于每个网格中有多少点的信息(为每个网格提供 M
聚合二项式计数)。
否则我不认为为此类模型绘制部分或偏差残差有什么好处。来自 gam.check()
的集合中的 QQ-plot,特别是如果您添加 rep = 100
(或一些这样的数字)对于检查分布假设更有用,因为它允许创建具有良好属性的参考带像这样的模型;请参阅 ?qq.gam
了解仅创建 QQ 图所需的 function/info。