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

使用synthpop包生成DP合成数据时出现'margins not found'错误求助

排查‘'margins' not found’错误的方案

可能原因

这个错误通常是synthpop包版本更新后,IPF合成方法的参数逻辑发生变化,或是自动生成双向边际的代码出现问题,导致程序找不到内部生成的margins对象。

解决步骤

  • 手动指定双向边际
    替代ipf.gmargins = "twoway"的自动生成方式,手动列出所有变量对的双向边际,确保程序能明确获取边际数据:

    library(synthpop)
    
    sd2011_subset <- SD2011[, c("sex", "agegr", "placesize", "edu")]
    
    # 手动定义所有双向边际组合
    two_way_margins <- list(
      c("sex", "agegr"),
      c("sex", "placesize"),
      c("sex", "edu"),
      c("agegr", "placesize"),
      c("agegr", "edu"),
      c("placesize", "edu")
    )
    
    syn_data_dp <- syn(
      sd2011_subset,
      method = "ipf",
      ipf.priorn = 0,
      ipf.gmargins = two_way_margins,
      ipf.othmargins = NULL,
      ipf.epsilon = 1
    )
    
  • 回退到之前正常运行的包版本
    如果是新版本引入的bug,可降级到之前能正常运行的synthpop版本(替换"1.6-0"为你之前使用的版本号):

    # 需要先安装devtools包
    install.packages("devtools")
    devtools::install_version("synthpop", version = "1.6-0")
    
  • 检查参数兼容性
    确认ipf.priorn=0与其他参数的兼容性:该参数表示使用观测数据的边际作为先验,若数据集变量存在极端分布(比如某类别样本量为0),可能导致边际计算失败,可尝试调整为ipf.priorn=1(加入拉普拉斯平滑)测试。

内容的提问来源于stack exchange,提问作者danielherdsman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:33:08