在R的KFAS软件包中使用Kalman平滑来估算丢失的数据

时间:2018-09-28 00:26:48

标签: r kalman-filter arima imputets

我有一个数据框(在底部是可重复的示例),其中包含一列表示降水量的值,一列测量日期值和一列分别代表纬度,经度和海拔坐标的数据。数据涵盖了10年的测量时间以及10个不同的纬度/经度/海拔高度(我将其称为“站点”的级别)。

降水量栏的MCAR缺少其值的3.4%。我的目标是在考虑时间相关性(NA在其站点时间序列中的位置)和空间相关性(NA与其他点的地理关系)的情况下,估算缺失值。

我认为基于ARIMA的典型技术(例如在Amelia或ImputeTS中发现的那些技术)不会令人满意,因为它们仅限于单变量数据。

我对使用KFAS软件包感兴趣,因为我相信它将使我可以将这些不同的“站”视为“状态空间”内的“状态”,并使我能够使用卡尔曼平滑法“预测”缺失的值基于时空变量的相关性。

我的麻烦是我很难克服KFAS的学习曲线并实现此模型。 documentation稀疏,几乎没有教程或针对初学者的材料。我感觉我什至不知道如何开始。

可以以这种方式使用KFAS吗?您将如何应对这一挑战? KFAS中的基本步骤是什么样的?

由于我几乎不知道如何提出这个问题,因此我努力制作了可重复的数据。此样本数据涵盖了1个月内的三个“站点”,我认为这足以进行演示。该值是实际的,但不准确。

#defining the precip variable
set.seed(76)
precip <- sample(0:7, 30, replace=TRUE)

#defining the categorical variables 
lon1 <- (-123.7500)
lon2 <- (-124.1197)
lon3 <- (-124.0961)
lat1 <- (43.9956)
lat2 <- (44.0069)
lat3 <- (44.0272)
elev1 <- 76.2
elev2 <- 115.8
elev3 <- 3.7
date1 <- seq(as.Date('2011-01-01'), as.Date('2011-01-10'),by=1)
date2 <- seq(as.Date('2011-01-11'), as.Date('2011-01-20'),by=1)
date3 <- seq(as.Date('2011-01-21'), as.Date('2011-01-30'),by=1) 

#creating the df
reprex.data <- NULL
reprex.data$precip <- precip

#inserting NA's randomly into the precip vector now to easily avoid doing it to the other variables 
reprex.data <- as.data.frame(lapply(reprex.data, function(cc) cc[sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE)]))

#creating the rest of the df 
reprex.data$lon[1:10] <- lon1
reprex.data$lon[11:20] <- lon2
reprex.data$lon[21:30] <- lon3
reprex.data$lat[1:10] <- lat1
reprex.data$lat[11:20] <- lat2
reprex.data$lat[21:30] <- lat3
reprex.data$elev[1:10] <- elev1
reprex.data$elev[11:20] <- elev2
reprex.data$elev[21:30] <- elev3
reprex.data$date[1:10] <- date1
reprex.data$date[11:20] <- date2
reprex.data$date[21:30] <- date3

#viola
head(reprex.data)

0 个答案:

没有答案