【问题标题】:linear interpolation in time series in RR中时间序列的线性插值
【发布时间】:2018-07-11 19:38:51
【问题描述】:

我有一个数据集,其中每分钟测量一次体温,持续 8 小时。我删除了异常数据,现在有了 NA 值,有时只有一个,有时连续超过 10 个。 我想用线性插值替换缺失的数据。

我尝试了不同的方法,但我无法使“近似”工作(NA 值保持 NA...),甚至无法找到一种方法来指定 R 使用之前的值(同一列,减 1 行)或之后的值(同一列,+ 1 行)。 在这个例子中,我尝试只替换一个 NA,[+1] 和 [-1] 只是读为 [1],所以它不起作用

df$var1_lini <- ifelse (!is.na(df$var1),df$var1,
                ifelse (!is.na(df$var[+1]),df$var[-1]+(df$var1[-1]+df$var1[+1])/2,NA))

我愿意接受任何形式的解决方案 我是初学者,所以详细的答案会很棒! 谢谢

夏娃

【问题讨论】:

  • library(zoo); help("na.approx")

标签: r time-series linear-interpolation


【解决方案1】:

另一种方法是使用现有数据构建线性模型,然后使用该模型(模型预测)替换 NA。

一个帮助你理解的简单例子是这样的:

library(ggplot2)

# create example dataset
df = data.frame(value = mtcars$qsec,
                time = 1:nrow(mtcars))

# replace some values with NA (you can experiment with different values)
df$value[c(5,12,17,18,30)] = NA

# build linear model based on existing data (model ignores rows with NAs)
m = lm(value ~ time, data = df)

# add predictions as a column
df$pred_value = predict(m, newdata = df)

# replace (only) NAs with predictions
df$interp_value = ifelse(is.na(df$value), df$pred_value, df$value)

# plot existing and interpolated data
ggplot()+
  geom_point(data=df, aes(time, value), size=5)+
  geom_point(data=df, aes(time, interp_value), col="red")

其中黑点代表现有值,红点代表现有 + NA 替换。

【讨论】:

    【解决方案2】:

    解决此问题的最简单方法是使用具有缺失数据替换功能的包,例如 imputeTSforecastzoo

    用合理的估计值替换缺失值的过程在统计学中也称为“插补”。

    对于时间序列、向量或 data.frame 进行插值,就这么简单:

    library("imputeTS")
    na.interpolation(yourDataWithNAs)
    

    请记住,除了线性插值之外,还有其他插补方法。 例如。移动平均插补,基于季节性的插补 - 根据问题,另一种方法将提供更好的结果。 (这里有一些进一步的解释:Time Series Imputation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2018-05-14
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 2013-11-29
      相关资源
      最近更新 更多