首页 > 解决方案 > 如何在 GAM (mgcv) 中对调查数据使用样本权重进行 Logit 回归?

问题描述

我很感兴趣对来自全国范围的调查数据进行 GAM 回归,该调查提供样本权重。我饶有兴趣地阅读了这篇 文章。我选择了我感兴趣的变量来生成一个 DF:

nhanesAnalysis <- nhanesDemo %>%
                    select(fpl,
                           age,
                           gender,
                           persWeight,
                           psu,
                           strata)

比,据我了解,我使用以下代码生成了一个加权 DF:

library(survey)    
nhanesDesign <- svydesign(    id      = ~psu,
                              strata  = ~strata,
                              weights = ~persWeight,
                              nest    = TRUE,
                              data    = nhanesAnalysis)

假设我只选择以下主题age≥30

ageDesign <- subset(nhanesDesign, age >= 30)

现在,我将拟合 GAM 模型 ( fpl ~ s(age) + gender) 与mgcv package. 是否可以使用weights参数或使用svydesignobject这样做ageDesign

编辑

我想知道从svyglm对象推断计算的权重并将其用于weightsGAM 中的参数是否正确。

标签: rsamplesurveygammgcv

解决方案


这比看起来更困难。有两个问题

  1. 您想要获得适量的平滑
  2. 您需要有效的标准错误。

只给采样权重mgcv::gam()不会做以下任何一个:gam()将权重视为频率权重,因此会认为它拥有比实际更多的数据。由于权重,您会得到不平滑和低估的标准误差,并且由于整群抽样,您也可能会得到低估的标准误差。

简单的解决方法是改用回归样条(splines包)。这些不如 使用的惩罚样条曲线好mgcv,但差异通常不是什么大问题,并且它们可以直接与svyglm. 您确实需要选择分配多少自由度。

library(splines)
svglm(fpl ~ ns(age,4) + gender, design = nhanesDesign)

推荐阅读