【问题标题】:Filling in NAs with weighed linear interpolation用加权线性插值填充 NA
【发布时间】:2019-11-02 13:09:31
【问题描述】:

我有一个时间序列(波高数据),我需要通过插值来填补空白。我在zoo 包中找到了na.approx 函数来执行此操作,但是我还没有找到一种方法可以在缺失的观察值更接近另一个观察值时将其考虑在内。

例子:

library(zoo)
test = data.frame(Wave_Height = c(1.2, NA, 0.5), Data = 
    as.POSIXct(c("2019-01-01 00:00", "2019-01-01 05:00", "2019-01-01 06:00"), 
      format = "%Y-%m-%d %H:%M"))
> test
  Wave_Height                Data
1         1.2 2019-01-01 00:00:00
2          NA 2019-01-01 05:00:00
3         0.5 2019-01-01 06:00:00

test$Wave_Height = na.approx(test$Wave_Height)
> test
  Wave_Height                Data
1        1.20 2019-01-01 00:00:00
2        0.85 2019-01-01 05:00:00
3        0.50 2019-01-01 06:00:00

我觉得某处应该有一个权重参数,但是通过扫描文档我无法找到它。我正在寻找这样的结果:

> test
  Wave_Height                Data
1        1.20 2019-01-01 00:00:00
2        0.62 2019-01-01 05:00:00
3        0.50 2019-01-01 06:00:00

【问题讨论】:

  • 据我所知动物园也能够对不规则的时间序列进行插值。我认为您必须首先创建一个动物园时间序列(动物园正确识别时间戳),然后执行 na.approx。所以从你的 data.frame 中创建一个动物园系列,然后再试一次。

标签: r time-series interpolation zoo


【解决方案1】:

也许你能做一个简单的线性回归?

mod <- lm(Wave_Height ~ Data, test[complete.cases(test), ])
test$Wave_Height[is.na(test$Wave_Height)] <- predict(mod, newdata = test[!complete.cases(test), ])

这是一个使用广义加法模型的解决方案,因此不假设关系的线性:

library(mgcv)
mod <- gam(Wave_Height ~ s(Data), data=test[complete.cases(test), ])
test$Wave_Height[is.na(test$Wave_Height)] <- predict(mod, newdata = test[!complete.cases(test), ])

但您需要稍微更改数据格式(请参阅here)并且可能需要调整模型规范...

【讨论】:

  • 谢谢,但我想我正在寻找一种解决方案来插入两个值以填充我的 NA,而不是对变量之间的关系进行建模。
  • 这正是模型所做的,它通过假设缺失值之间的线性关系来内插缺失值。如果您检查一下,您会发现这为缺少的Wave_Height 提供了 0.62,完全符合您的要求。所以实际上你已经假设了线性关系......
  • 我理解,是的,对于 N = 2,解决方案有效。问题是,我的数据比这大得多,而且它也是周期性的(每天)。为方便起见,我在示例中仅添加了 2 个观察结果。
  • 无论如何,如果有一种“正确”的方式来插入缺失值,那么您必须假设变量之间存在某种关系(因为您认为 0.85 是错误的,而 0.62 是正确的)。因此,如果关系不是线性的,您可以改用广义加法模型,但如果您想按照“规则”(这将是您假设的变量之间的关系)进行插值,则使用模型是唯一的解决方案。
  • 您还可以使用此线性模型解决方案逐日迭代您的数据。也许你应该试一试;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2020-02-09
相关资源
最近更新 更多