我有一个第一个差分记录系列,需要转换回原始级别单位。如何在R中执行此操作?
下面是我的数据系列和尝试的代码:
原始系列:
1.1, 2.6, 3.6, 4.8, 5.1, 6.0, 7.3, 8.8, 9.4, 10.5
尝试输入的代码:
o <- c(1.1, 2.6, 3.6, 4.8, 5.1, 6.0, 7.3, 8.8, 9.4, 10.5)
l <- log(o)
dl <- diff(l)
exp(diffinv(dl, differences = 1)) # Attempt to recover o
当前输出:
[1] 1.000000 2.363636 3.272727 4.363636 4.636364 5.454545 6.636364 8.000000
[9] 8.545455 9.545455
所需的输出:
[1] 1.1 2.6 3.6 4.8 5.1 6.0 7.3 8.8
[9] 9.4 10.5
答案 0 :(得分:1)
在不知道其第一个元素的情况下不可能完全恢复原始系列:
exp(diffinv(dl) + log(1.1))
# [1] 1.1 2.6 3.6 4.8 5.1 6.0 7.3 8.8 9.4 10.5
或
exp(cumsum(c(log(1.1), dl)))
# [1] 1.1 2.6 3.6 4.8 5.1 6.0 7.3 8.8 9.4 10.5
让X 1 ,X 2 ,X 3 ,X 4 成为原始系列。最终,您有了
Z 1 = ln(X 2 )-ln(X 1 ),
Z 2 = ln(X 3 )-ln(X 2 )
Z 3 = ln(X 4 )-ln(X 3 )
给出Z 1 ,Z 2 ,Z 3 ,您希望恢复X 1 ,X < sub> 2 ,X 3 ,X 4 。然后注意
Z 1 = ln(X 2 )-ln(X 1 ),
Z 2 + Z 1 = ln(X 3 )-ln(X 1 ),< / p>
Z 3 + Z 2 + Z 1 = ln(X 4 )-ln(X < sub> 1 ),
这样
Z 1 + ln(X 1 )= ln(X 2 ),
Z 2 + Z 1 + ln(X 1 )= ln(X 3 ),< / p>
Z 3 + Z 2 + Z 1 + ln(X 1 )= ln(X < sub> 4 ),
和
exp(Z 1 + ln(X 1 ))= X 2 ,
exp(Z 2 + Z 1 + ln(X 1 ))= X 3 ,< / p>
exp(Z 3 + Z 2 + Z 1 + ln(X 1 ))= X 4 ,
这就是事实(比第一个解决方案更透明)
exp(cumsum(c(log(1.1), dl)))
确实。结果,
exp(diffinv(dl))
仅当原始系列开始于 1 = exp(0)时,才有效。
因此,您现在必须将系列的初始水平从任何差异中恢复,这是完全自然的。想象一下,我们只知道您每天将赚多少钱。在任何时候都无法说出您总共有多少钱,却不知道初始金额。