R语言用StMoMo包拟合Lee-Carter模型时遇demogdata年份匹配错误
解决demogdata创建时的"年份数量不匹配"错误
核心排查方向
demogdata函数对输入的data和pop格式有严格要求:行对应不同年龄,列对应不同年份,且列数必须和years参数的长度一致,行数必须和ages参数的长度一致。你遇到的错误大概率是数据读入后结构不符合要求,或者维度不匹配。
具体解决步骤
检查数据维度匹配性
先运行以下代码,确认数据维度和你指定的年龄、年份范围是否一致:dim(men) dim(pop) length(0:120) # 预期结果:121(0到120共121个年龄) length(1977:2019) # 预期结果:43(2019-1977+1=43个年份)如果
men或pop的列数≠43、行数≠121,说明数据结构不符合要求。确认数据读入后的结构
用head(men)查看前几行数据,确认是否每行对应一个年龄,每列对应一个年份。如果你的原始数据是行代表年份、列代表年龄的格式,需要转置数据:men <- t(men) pop <- t(pop)转置后再重新检查维度是否符合要求。
修正demogdata创建代码
确保data和pop的行列结构正确后,重新创建demogdata对象。注意data参数需传入死亡率/死亡数数据,pop传入对应年份年龄的人口数。修正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
相关产品推荐
相关产品推荐

