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

R语言用StMoMo包拟合Lee-Carter模型时遇demogdata年份匹配错误

解决demogdata创建时的"年份数量不匹配"错误

核心排查方向

demogdata函数对输入的data和pop格式有严格要求:行对应不同年龄,列对应不同年份,且列数必须和years参数的长度一致,行数必须和ages参数的长度一致。你遇到的错误大概率是数据读入后结构不符合要求,或者维度不匹配。

具体解决步骤

  1. 检查数据维度匹配性
    先运行以下代码,确认数据维度和你指定的年龄、年份范围是否一致:

    dim(men)
    dim(pop)
    length(0:120)  # 预期结果:121(0到120共121个年龄)
    length(1977:2019)  # 预期结果:43(2019-1977+1=43个年份)
    

    如果men或pop的列数≠43、行数≠121,说明数据结构不符合要求。

  2. 确认数据读入后的结构
    用head(men)查看前几行数据,确认是否每行对应一个年龄,每列对应一个年份。如果你的原始数据是行代表年份、列代表年龄的格式,需要转置数据:

    men <- t(men)
    pop <- t(pop)
    

    转置后再重新检查维度是否符合要求。

  3. 修正demogdata创建代码
    确保data和pop的行列结构正确后,重新创建demogdata对象。注意data参数需传入死亡率/死亡数数据,pop传入对应年份年龄的人口数。

  4. 修正Lee-Carter拟合代码
    拟合模型时,data参数要传入创建好的mena(StMoMoData对象),而非原始的men数据:

    LCfit <- fit(object = lc(),
                 data = mena,
                 ages.fit = 0:120,
                 years.fit = 1977 : 2019)
    

额外注意事项

  • 若数据存在NA值,先做简单处理再创建对象:
    men[is.na(men)] <- 0  # 或根据业务逻辑用均值、插值填充
    pop[is.na(pop)] <- 0
    
  • 若原始数据文件有注释行或空行,读入时用skip参数跳过:
    men <- read.table("males.txt", header = TRUE, na.strings = ",", skip = 1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:32:32