我有兴趣对来自全国范围调查的数据执行 GAM 回归,该调查显示样本权重。我饶有兴趣地阅读了这篇post。 我选择了我感兴趣的生成 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)
现在,我将使用
fpl ~ s(age) + gender
拟合 GAM 模型 (mgcv package
)。是否可以使用 weights
参数或使用 svydesign
对象 ageDesign
来做到这一点?
编辑
我想知道从
svyglm
对象推断计算的权重并将其用于 GAM 中的 weights
参数是否正确。
这比看起来更难。有两个问题
仅将采样权重赋予
mgcv::gam()
不会执行以下任一操作:gam()
将权重视为频率权重,因此会认为它拥有比实际更多的数据。由于权重,您会得到平滑度不足和低估的标准误差,并且由于整群抽样,您也可能会得到低估的标准误差。
简单的解决方法是改用回归样条(
splines
包)。这些不如 mgcv
使用的惩罚样条好,但差异通常不是什么大问题,它们可以直接与 svyglm
一起使用。您确实需要选择分配多少个自由度。
library(splines)
svglm(fpl ~ ns(age,4) + gender, design = nhanesDesign)
你处理过这个问题吗?这些天我也对此感到困惑。如果在执行 GAM 回归时或使用原始数据时必须对其进行加权?