我试图递归拟合一些时间序列数据:我有2个方程式,我需要找到同时最佳拟合,由两个方程中的最小化LSE的缺失变量的值估计(第三个方程式) )。
2个递归方程:
mt = (P/k)-((P/k - m0)^(-k*t))
nt = ((n0^(-k*a*t))/((P/k)-((P/k - m0)^(-k*t))))*mt
两个方程右侧唯一未知的是P. P是我需要找到的值。 P是生产率(因此,每个时间序列都会有一个P值,因为这两个方程是要优化的两个时间序列回归线。)
使用一系列可能的P,我必须为每个可能的P值求解两个方程 然后,我将为mt和nt分别设置5个值(因为有5个时间点),这些值对应于P的每个值。
然后使用m和n的测量值以及mt和nt的计算值,我将确定每组mt和nt(以及因此P)值的LSE估计值。这是LSE等式:
lse = ((((abs(ap-ape))/sdo_ap)*nap) + (((abs(m-mt))/sdo_m)*nm))
其中测量ap
猿是预期的ap计算公式:ape <- ((n/m)+0.0105)
sdo_ap是观察到的ap的标准偏差,而nap是ap的归一化因子
sdo_m是观察到的m的标准偏差,nm是m
我的数据结构为5时间点时间序列,其中我测量了m,n和计算的k。 t和a是常数,m0和n0是m和n的初始值。这是一个孵化罐的数据:
jar t ap m n 1 24 0.06231194 799.861428 41.44237198 1 336 0.061692275 788.732524 40.37701224 1 480 0.061725434 608.9734849 31.19493108 1 720 0.06251773 326.2516254 16.97086885 1 960 0.064471243 36.48344534 1.969056907
常量:
k <- 0.003120002
alpha <- 0.98
sdo_ap <- sd(ap)
sdo_m <- sd(m)
sd_prec_ap <- 0.000356894591861632
sd_prec_m <- 28
nap <- sdo_ap/sd_prec_ap
nm <- sdo_m/sd_prec_m
mi <- m[1]
ni <- n[1]
我在编码中感到困惑的部分是每个时间序列得到单个P估计值,因此得到单个LSE估计值。因此,通过递归,我们可以最小化时间序列中观察值和期望值之间的总误差(LSE)。我需要将时间序列合并到递归计算中,并且输出要么全面(我可以对最小的LSE估计进行排序,从而找到我的'最佳'P值),或者我需要它吐出来对应于最低LSE的P的单个“最佳”值。
这是我正在使用的代码,但它无法正常工作。 LSE似乎是加性的,mt为所有时间点返回相同的数字,nt随时间变小,而P总是3,这是不现实的。
out <- data.frame(jar=jar, t=t)
#need starting values outside the range of possibility
out$lse_min <- 1000000000
out$p <- 1000000000
for (i in -10000:10000){
out$mt <- (i/k)-(((i/k)-mi)^(-k*t))
out$nt = ((ni^(-k*alpha*t))/((i/k)-((i/k)-mi)^(-k*t)))*out$mt
out$lse <- ((((abs(ap-ape))/sdo_ap)*nap)+(((abs(m-out$mt))/sdo_m)*nm))
out$lse <- ifelse(is.na(out$lse), 1000000000, out$lse)
out$lse_min <- ifelse(out$lse < out$lse_min, out$lse, out$lse_min)
out$p <- ifelse(out$lse == out$lse_min, i, out$p)
}
所以我不确定我是否恰当地将时间序列数据不正确地合并到递归函数中,这就是使输出有问题(不切实际)的原因。任何帮助和见解将非常感激。提前致谢。