You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:49:58