在尝试了我正在尝试制作的功能的几种编码变体之后,我仍然没有成功。这是下面的等式,我希望在 R 中对其进行函数处理,
编辑:s这里当然小于T。
此外,这两个矩阵显示了 wij、zj(t) 和 zi(t+s) 的来源。
因此,wij = w12 等于 wmatrix 中的 w1,2。类似地,zj(t) = z2(1) 等于 datamat 中的 a2,1。同样,i=j。因此,如果 i=1,t=1 和 s = 1,那么我们有 zi(t+s) = z1(1+1) = z1(2),它等于数据矩阵中的 a1,2。
现在,这是我最终得到的代码,
st.acf <- function(datamat, wmatrix,ss){
a = dim(datamat)[1]
b = dim(datamat)[2]
sumn <- 0
for(i in 1:a){
for(j in 1:a){
for(t in 1:b-ss){
sumn <- sumn + wmatrix[i,j]*datamat[j,t]*datamat[i,t+ss]
}
}
}
print(sumn/sqrt(sum((wmatrix%*%datamat)^2)*sum(datamat^2)))
}
我使用了一个手动计算的示例,这是它的数据,
DataMatrix <- rbind(c(54, 55, 51), c(52, 51, 57))
WeightsMatrix <- rbind(c(0, 1), c(1, 0))
这个答案应该是 0.66389。但是,当我使用我的函数时,它的输出显示numeric(0)
.
st.acf(DataMatrix, WeightsMatrix, 1)
numeric(0)
我无法理解这一点,我函数中的所有代码都是正确的,当我运行循环和 sqrt(sum((wmatrix%*%datamat)^2)*sum(datamat^2)) 时,我得到了正确答案。但是,当我尝试合并它们并创建一个函数时,我总是得到numeric(0)
. 任何人都可以在这方面帮助我。
我会非常感激的!