使用clm函数实现加权调查数据单变量有序logistic回归报错求助
加权调查数据有序logistic回归代码报错原因及解决
问题背景
我尝试通过有序logistic回归获取加权调查数据的单变量回归结果表,由于polr函数不支持调查设计,改用clm函数实现,但运行以下代码时出现错误:
table <- svydesign(ids = ~1,data = df,weights = ~pweight) |> tbl_uvregression( method = clm, y = outcome, method.args = list(link=logit), include = c(RRACE, RHISPANIC,age, agecat, REGION, Metro, INCOME, Educ), exponentiate = TRUE)
报错核心原因
tbl_uvregression处理svydesign对象时,仅兼容survey包原生的回归函数(如svyglm、svyolr),而clm是ordinal包的函数,无法识别survey设计对象的加权逻辑,导致参数调用不匹配。- 直接将
svydesign对象传给指定method=clm的tbl_uvregression,相当于让不支持调查抽样设计的clm去处理survey对象,必然触发参数错误。
两种解决方法
方法1:使用survey包原生的svyolr(推荐,适配复杂调查设计)
svyolr是专门为加权调查数据设计的有序logistic回归函数,完美兼容svydesign对象和tbl_uvregression:
table <- svydesign(ids = ~1, data = df, weights = ~pweight) |> tbl_uvregression( method = svyolr, y = outcome, method.args = list(link = "logit"), include = c(RRACE, RHISPANIC, age, agecat, REGION, Metro, INCOME, Educ), exponentiate = TRUE)
方法2:直接给clm传入权重(仅适用于简单加权)
如果必须使用clm,可以跳过svydesign对象,直接在clm参数中指定权重。注意:这种方式仅支持简单抽样权重,无法处理分层、集群等复杂调查设计:
table <- df |> tbl_uvregression( method = clm, y = outcome, method.args = list(link = logit, weights = ~pweight), include = c(RRACE, RHISPANIC, age, agecat, REGION, Metro, INCOME, Educ), exponentiate = TRUE)
内容的提问来源于stack exchange,提问作者ATP89
相关产品推荐
相关产品推荐

