如何对调查数据使用GAM(mgcv)中的样本权重进行Logit回归?

Bor*_*ino 7 r survey sample gam mgcv

我对根据全国抽样调查数据进行的GAM回归很有趣。我对此文章感兴趣 。我选择了感兴趣的变量生成DF:

nhanesAnalysis <- nhanesDemo %>%
                    select(fpl,
                           age,
                           gender,
                           persWeight,
                           psu,
                           strata)
Run Code Online (Sandbox Code Playgroud)

然后,据我所知,我使用以下代码生成了加权DF:

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

假设我只选择具有age?30

ageDesign <- subset(nhanesDesign, age >= 30)
Run Code Online (Sandbox Code Playgroud)

现在,我将使用拟合GAM模型(fpl ~ s(age) + gendermgcv package。是否可以通过weights参数或使用svydesignobject来实现ageDesign

编辑

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

小智 6

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

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

仅给予采样权重mgcv::gam()不会执行以下任一操作:gam()将权重视为频率权重,因此会认为它拥有比实际多得多的数据。由于权重,您将得到平滑不足和低估的标准误差,并且由于聚类抽样,您也可能会得到低估的标准误差。

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

library(splines)
svglm(fpl ~ ns(age,4) + gender, design = nhanesDesign)
Run Code Online (Sandbox Code Playgroud)