行列の変換と行と列の名前に問題があります。
私の問題は次のとおりです。
入力行列として、次のような(対称)相関行列があります。
相関ベクトルは、下三角行列の値によって与えられます。
ここで、これらの相関の分散共分散行列を計算したいと思います。これは、分散共分散行列でほぼ正規分布しています。
分散は次のように概算できます。
-> N はサンプルサイズです (この例では N = 66)
共分散は次のように近似できます。
たとえば、r_02 と r_13 の間の共分散は次のように与えられます。
ここで、相関行列を入力として取得し、分散共分散行列を返す R の関数を定義したいと思います。ただし、共分散の計算を実装するには問題があります。上記のように、correlation_vector の要素に名前を付けることを考えています (r_01、r_02...)。それから、correlation_vector の長さを持つ空の分散共カリアンス行列を作成したいと思います。行と列はcorrelation_vectorと同じ名前にする必要があるため、たとえば[01] [03]で呼び出すことができます。次に、共分散式の入力として必要な相関の列と行に対する共分散の式に示すように、i と j の値と k と l を設定する for ループを実装したいと思います。これらは常に 6 つの異なる値でなければなりません (ij; ik; il; jk; jl; lk)。これは私の考えですが、私はしません。
これは私のコードです(共分散の計算なし):
require(corpcor)
correlation_matrix_input <- matrix(data=c(1.00,0.561,0.393,0.561,0.561,1.00,0.286,0.549,0.393,0.286,1.00,0.286,0.561,0.549,0.286,1.00),ncol=4,byrow=T)
N <- 66 # Sample Size
vector_of_correlations <- sm2vec(correlation_matrix_input, diag=F) # lower triangular matrix of correlation_matrix_input
variance_covariance_matrix <- matrix(nrow = length(vector_of_correlations), ncol = length(vector_of_correlations)) # creates the empty variance-covariance matrix
# function to fill the matrix by calculating the variance and the covariances
variances_covariances <- function(vector_of_correlations_input, sample_size) {
for (i in (seq(along = vector_of_correlations_input))) {
for (j in (seq(along = vector_of_correlations_input))) {
# calculate the variances for the diagonale
if (i == j) {
variance_covariance_matrix[i,j] = ((1-vector_of_correlations_input[i]**2)**2)/sample_size
}
# calculate the covariances
if (i != j) {
variance_covariance_matrix[i,j] = ???
}
}
}
return(variance_covariance_matrix);
}
上記の式を使用して共分散の計算を実装する方法を知っている人はいますか?
この問題に関して何か助けていただければ幸いです!!!