我认为标题是相当不言自明的。我想计算两个时间序列之间的互相关,控制其他滞后的值。我无法找到任何现有的R代码来执行此操作,而且我对统计数据(或R)的自信心不足以尝试自己编写内容。它类似于部分自相关函数,仅用于互相关而不是自相关。
如果它有所帮助,我的更大目标是寻找物理系统的不同测量值之间的滞后相关性(首先是来自爆炸物的伽马射线测量的通量和光子指数),目标是建立一般的线性试图预测燃烧事件的模型。
答案 0 :(得分:0)
查看我的answer 我自己的问题(与您发布的问题相同)。
您可以使用R中的pacf
函数,将其扩展为包含2个或更多时间序列的矩阵。我检查了多变量acf
和ccf
函数之间的结果,它们会产生相同的结果,因此可以得出关于多变量pacf
和不存在的pccf
的相同结论
答案 1 :(得分:0)
我相信这项工作
pccf <- function(x,y,nlags=7,partial=TRUE){
# x (numeric): variable that leads y
# y (numeric): variable of interest
# nlags (integer): number of lags (uncluding zero)
# partial (boolean): partial or absolute correlation
# trim y
y <- y[-(1:(nlags-1))]
# lagged matrix of x
x_lagged <- embed(x,nlags)
# process for each lag
rho <- lag <- NULL
for(i in 1:(nlags)){
if(partial){
# residuals of x at lag of interest regressed on all other lags of x
ex <- lm(x_lagged[,i] ~ x_lagged[,-i])$residuals
# residuals of y regressed on all lags of x but the one of interest
ey <- lm(y ~ x_lagged[,-i])$residuals
}else{
ex <- x_lagged[,i]
ey <- y
}
# calculate correlation
rho[i] = cor(ex,ey, use="pairwise.complete.obs")
lag[i] = i-1
}
return(
tibble(lag=lag, rho=rho) %>%
arrange(lag)
)
}
# test
n <- 200 # count
nlag <- 6 # number of lags
x <- as.numeric(arima.sim(n=n,list(ar=c(phi=0.9)),sd=1)) # simulate times series x
y <- lag(x,nlag) + rnorm(n,0,0.5) # simulate y to lag x
y <- y[(nlag+1):n] # remove NAs from lag
x <- x[(nlag+1):n] # align with y
pccf(x,y,nlags=10,partial=FALSE) %>%
mutate(type='Cross correlation') %>%
bind_rows(
pccf(x,y,nlags=10,partial=TRUE) %>%
mutate(type='Partial cross correlation')
) %>%
ggplot() +
geom_col(aes(-lag,rho),width=0.1) +
facet_wrap(~type,scales='free_y', ncol=1) +
scale_x_continuous(breaks=-10:0) +
theme_bw(base_size=20)