这是我在 R 代码中的建议。我不知道您正在使用什么软件,但至少您可以免费下载 R 并轻松运行脚本,看看我在说什么,然后创建您自己的版本。如果你在 R 中,很多循环可以用“zoo”包中的“rollapply”函数替换。但是这样代码是自包含的。
我所做的是创建了三个时间序列: 1. 简单信号,点 (i+1) 处的下一个值与前一个值 (i) 相关。2. 基于第一个的信号,因此它们应该高度相关但幅度不同 3. 由高斯噪声制成的随机信号
这确实遗漏了相移,也就是说,如果一个人 a 开始移动,然后人 b 在之后开始移动,但随着时间的推移,这种方法将低估相关性。这可以通过包括多个时间偏移来纠正。或者,可能通过增加滚动平均的时间长度(就像低通滤波器一样)。
当然,还有其他可能更合适的方法,但这些方法基于振荡信号,例如,您可以使用小波进行时频分解,然后计算跨多个频率的人际锁相。然后创建相位和相干图。如果您认为这可能是您所追求的,我也有相应的脚本,但您可能想查看 matlab 或 R 中的专用包。
在申请之前,您可能需要从视频中随机抽取几个样本,或者甚至是“培训”视频,看看哪些参数可以为您提供所需的信息。然后将其应用于您的实际样本。例如,改变滚动平均值的长度,玩相移,调整加权参数。如果你愿意,你甚至可以得到增强的 CI。
这是R脚本:
#highly correlated series
rl<-20 #rolling average length
x<-5 #Just a starting value
xvec<-3000
#1st time series, made so that the next value correlates with preceding value
for(i in 1:(xvec-1)) { x[i+1] <- x[i] +rnorm(1, 0, 0.2) }
y<-x+rnorm(xvec, 0, 0.3) #Second series based on 1st series for high correlation
xy<-(x*y)/max(x*y) #For weighting
#Calculating rolling correlation with 20 values either side
cxy<-sapply((rl+1):(xvec-rl+1), function(i) cor(x[(i-rl):(i+rl)], y[(i-rl):(i+rl)]))
#Smoothed rolling correlation by rolling average
cxym<-sapply((rl+1):(xvec-3*rl+1), function(i) mean(cxy[(i-rl):(i+rl)]))
#Smoothed weighting
xym<-sapply((2*rl+2):(xvec-2*rl+2), function(i) mean(xy[(i-rl):(i+rl)]))
par(mfcol = c(2,2)) #Create plot so that there are 4 figures per plot space
plot(1:xvec, x, type="l"); lines(1:xvec, y, col=2) #plot 1st and 2nd time series
#Plot correlations
plot((rl+1):(xvec-rl+1), cxy, type="l", xlim=c(0, xvec), ylim=c(-1,1))
lines((2*rl+2):(xvec-2*rl+2), cxym, col=2) #Smoothed rolling correlation
lines((2*rl+2):(xvec-2*rl+2), cxym*xym, col=3) #Smoothed weighted correlation
#No correlation between series and plot
y<-rnorm(xvec, 5, 1)
xy<-(x*y)/max(x*y)
cxy<-sapply((rl+1):(xvec-rl+1), function(i) cor(x[(i-rl):(i+rl)], y[(i-rl):(i+rl)]))
cxym<-sapply((rl+1):(xvec-3*rl+1), function(i) mean(cxy[(i-rl):(i+rl)]))
xym<-sapply((2*rl+2):(xvec-2*rl+2), function(i) mean(xy[(i-rl):(i+rl)]))
plot(1:xvec, x, type="l"); lines(1:xvec, y, col=2)
plot((rl+1):(xvec-rl+1), cxy, type="l", xlim=c(0, xvec), ylim=c(-1,1))
lines((2*rl+2):(xvec-2*rl+2), cxym, col=2)
lines((2*rl+2):(xvec-2*rl+2), cxym*xym, col=3)