R中时间序列的线性插值

时间:2018-02-01 13:03:02

标签: r time-series linear-interpolation

我有一个数据集,每分钟体温持续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))

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

2 个答案:

答案 0 :(得分:2)

另一种方法是使用您拥有的现有数据构建线性模型,然后使用该模型(模型预测)来替换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")

enter image description here

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

答案 1 :(得分:0)

解决此问题的最简单方法是使用具有丢失数据替换功能的软件包,例如 .env imputeTSforecast

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

要插值时间序列,向量或data.frame,就这么简单:

zoo

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