我正在使用调查glm来估计系数,然后将其用于使用人群水平的数据预测样本外样本。
download.file("https://meps.ahrq.gov/data_files/pufs/h192ssp.zip", temp <- tempfile())
unzipped_file = unzip(temp)
data = read.xport(unzipped_file)
unlink(temp)
mepsdsgn <- svydesign(id = ~VARPSU,strata = ~VARSTR,weights = ~PERWT16F,data = data,nest = TRUE)
回归中使用的数据将年龄和收入作为连续变量进行报告,但人口数据将其分组显示(即收入为1万至1.5万)。
为此,我创建了两个与人口数据匹配的因素变量,收入水平和年龄水平。我使用嵌套的if语句以一种可怕的方式(我知道)来执行此操作。我只是不知道一种更好的方法。
incomelevels <-ifelse(h169$FAMINC16<10000,0,ifelse(h169$FAMINC16>=10000&h169$FAMINC16<15000,1,ifelse((h169$FAMINC16>=15000)&h169$FAMINC16<100000),2,ifelse(h169$FAMINC16>=100000,3,"NA"))))
在使用surveyglm()时,我发现只有一些虚拟的年龄和收入变量具有预测性。我一直在尝试使用factor()函数中的Exclude选项清除那些不是的变量,但这会完全排除数据,而不是将其排除在特定于该级别的虚拟变量之外。
dental_levels <- svyglm(DVGEXP16 ~factor(income_levels)+factor(SEX),design=mepsdsgn)
我知道必须有一种更好的方法来处理虚拟变量,但是我似乎找不到它。我发现的所有StackOverflow帖子似乎都说“ R为您处理了虚拟变量”,但是它们没有显示如何删除特定的虚拟变量或设置基线水平。
很抱歉,对于非模块化代码,我对此很陌生,并且在这个项目上全神贯注。