[英]linear interpolation in time series in R
我有一個數據集,其中每分鍾要采集8小時的體溫。 我刪除了異常數據,現在有了NA值,有時只有一個,有時連續超過10個。 我想使用線性插值替換丟失的數據。
我嘗試了不同的方法,但是我無法使'approx'起作用(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))
我願意接受任何形式的解決方案,我是初學者,所以詳細的答案將是非常好的! 謝謝
前夕
另一種方法是使用現有數據構建線性模型,然后使用該模型(模型預測)替換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替換值。
解決此問題的最簡單方法是使用一個具有丟失數據替換功能的程序包,例如imputeTS
或forecast
, zoo
用合理的估計替換缺失值的過程在統計中也稱為“輸入”。
為了插值時間序列,向量或數據幀,它很容易:
library("imputeTS")
na.interpolation(yourDataWithNAs)
請記住,除了線性插值以外,還有其他插補方法。 例如,移動平均插補,基於季節性的插補-根據問題,另一種方法將提供更好的結果。 (以下是一些進一步的解釋: 時間序列歸因 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.