2

我正在尝试在 R 中填充缺失的数据。这是一个简单的变量,带有日期。

我正在使用 ImputeTS,但是当我映射输出时,我可以告诉数据已经输出。在 Excel 中,当我使用直线计算时,它似乎更接近。我想避免这种情况,因为我过度依赖太少的数据点。

library("imputeTS")

org = read.csv(file.choose(),header=T)

m_default = na_kalman(org)
m_auto <- na_kalman(org, model = "auto.arima")
m_struct <- na_kalman(org, model ="StructTS", smooth = TRUE)
m_trends <- na_kalman(org, model ="StructTS", smooth = TRUE, type = "trend")
m_ip <- na_interpolation(org, option ="linear")

[图表结果][1] [1]:https://i.stack.imgur.com/ozHDD.jpg

在图像中,您可以看到 excel 估计值比 R 更接近线。

以下是我用作输入的数据。

谢谢

42131 14897320
42161 15309884
42185 na
42191 15736110
42221 16193078
42251 16660808
42277 na
42281 17169827
42311 17710224
42341 18293716
42369 na
42371 18891824
42401 19525236
42431 20202090
42460 na
42461 20913242
42491 21668513
42551 23271395
42575 23918755
42605 24700462
42635 25513112
42643 na
42665 26363177
42695 27247927
42725 28182277
42735 na
42755 29116689
42785 30102583
42809 30962403
42815 31156665
42823 31464561
42825 na
42853 32565105
42883 33710529
42913 34908319
42916 na
42943 36166021
42973 37466067
43003 38813763
43008 na
43033 40247438
43055 41326456
43056 41416270
43063 41741074
43085 42881998
43089 43121038
43100 na
43115 44419898
4

2 回答 2

0

第一个变量是日期吗?如果是这种情况,您的时间序列似乎是不规则间隔的(也称为不均匀间隔)。imputeTS 实际上假设输入是一个规则间隔的时间序列。这可能就是为什么结果不如预期的原因。一个解决方案可以是通过添加带有 NA 观察值的额外时间戳,然后使用 imputeTS 执行插补来使时间序列均匀分布。

于 2018-03-20T11:35:48.507 回答
0

如果我理解正确,您想填补空白,看看总体趋势是什么。如果是这种情况,我个人建议stats::approx()如下使用。

> a <- c(1,2,NA,5, NA, NA, 7) # this would be org[,2]
> stats::approx(a, method = 'linear', n = 7)
$x
[1] 1 2 3 4 5 6 7

$y
[1] 1.000000 2.000000 3.500000 5.000000 5.666667 6.333333 7.000000
于 2018-03-20T11:46:32.707 回答