【发布时间】:2019-04-23 23:11:09
【问题描述】:
我已按照 thisStMoMo 软件包文档中的说明将 Lee Carter 与加拿大的死亡率数据相匹配。
我项目的下一步是测量 Lee Carter 模型在拟合加拿大数据时的预测准确性。
为此,我尝试使用 accuracy() 但遇到了错误,因为我的 Lee Carter 拟合属于“fitStMoMo”类而不是“预测”类或时间序列。
我是否可以在“fitStMoMo”对象上使用替代的预测精度函数来计算平均误差、均方根误差、平均绝对误差、平均百分比误差、平均绝对百分比误差和平均绝对比例误差?
代表
使用 StMoMo 文档中使用的 EWMaleData 创建的 Reprex 专门标记错误:
library("StMoMo")
library("demography")
library("forecast")
constLC <- function(ax, bx, kt, b0x, gc, wxt, ages){
c1 <- mean(kt[1, ], na.rm = TRUE)
c2 <- sum(bx[, 1], na.rm = TRUE)
list(ax = ax + c1 * bx, bx = bx / c2, kt = c2 * (kt - c1))
}
LC <- StMoMo(link = "logit", staticAgeFun = TRUE, periodAgeFun = "NP",
constFun = constLC)
LC <- lc(link = "logit")
LC$gnmFormula
#> [1] "D/E ~ -1 + offset(o) + factor(x) + Mult(factor(x), factor(t), inst = 1)"
EWMaleData
#> Mortality data for England and Wales
#> Series: male
#> Years: 1961 - 2011
#> Ages: 0 - 100
#> Exposure: central
EWMaleIniData <- central2initial(EWMaleData)
ages.fit <- 55:89
wxt <- genWeightMat(ages = ages.fit, years = EWMaleIniData$years,
clip = 3)
LCfit <- fit(LC, data = EWMaleIniData, ages.fit = ages.fit, wxt = wxt)
#> StMoMo: The following cohorts have been zero weigthed:
#> 1872 1873 1874 1954 1955 1956
#> StMoMo: Start fitting with gnm
#> Initialising
#> Running start-up iterations..
#> Running main iterations.....
#> Done
#> StMoMo: Finish fitting with gnm
LCfor <- forecast(LCfit, h = 50)
class(LCfit)
#> [1] "fitStMoMo"
class(LCfor)
#> [1] "forStMoMo"
accuracy(LCfit)
#> Error in accuracy.default(LCfit): First argument should be a forecast object
#> or a time series.
accuracy(LCfor)
#> Error in accuracy.default(LCfor): First argument should be a forecast object
#> or a time series.
【问题讨论】:
-
这个问题太宽泛了,可能会被关闭。不要一个问题问这么多问题。为了提出更好的问题,请阅读How to ask a good question和Minimal, Complete, and Verifiable Example和How to make a great R reproducible example。
-
@RuiBarradas 好的,我会编辑它,只问一个问题。
-
除非您提供一些可重现的代码,否则此答案被回答的机会非常低。假设加拿大数据对您的问题并不重要,我建议您将示例代码改为基于
StMoMo包提供的数据集。 -
@AkselA 我现在正在研究我的可重现示例!
-
@RuiBarradas 我现在添加了一个reprex
标签: r