私が作成しようとしている関数からコーディングのいくつかのバリエーションを試した後でも、私は成功していません。これが私がRでそれの関数を作りたいと思う以下の方程式です、
編集:ここでのsはもちろんT未満です。
また、wij、zj(t)、およびzi(t + s)がどこから取得されるかを示す2つの行列があります。
したがって、wij = w12は、wmatrixのw1,2に等しくなります。同様に、zj(t)= z2(1)は、データマットのa2,1と同じです。繰り返しますが、i=jです。したがって、i = 1、t = 1、およびs = 1の場合、データマットマトリックスのa1,2に等しいzi(t + s)= z1(1 + 1)= z1(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)
ます。誰でもこれについて私を助けることができます。
よろしくお願いします!