У меня проблемы с преобразованием матрицы и имен строк и столбцов.
Моя проблема в следующем:
В качестве входной матрицы у меня есть (симметричная) корреляционная матрица, подобная этой:
вектор корреляции задается значениями нижней треугольной матрицы:
Теперь я хочу вычислить матрицу ковариации дисперсии этих корреляций, которые приблизительно нормально распределены с помощью матрицы ковариации дисперсии:
Отклонения можно приблизительно рассчитать как
-> N - размер выборки (в этом примере N = 66)
Ковариации можно приблизительно определить как
Например, ковариация между r_02 и r_13 определяется как
Теперь я хочу определить функцию в R, которая получает на вход корреляционную матрицу и возвращает ковариационную матрицу. Однако у меня есть проблемы с выполнением вычисления ковариаций. Моя идея состоит в том, чтобы дать имена элементам correlation_vector, как показано выше (r_01, r_02 ...). Затем я хочу создать пустую матрицу дисперсии-кокариации, длина которой равна correlation_vector. Строки и столбцы должны иметь те же имена, что и correlation_vector, поэтому я могу назвать их, например, [01] [03]. Затем я хочу реализовать цикл for, который устанавливает значения i и j, а также k и l, как показано в формуле ковариации для столбцов и строк корреляций, которые мне нужны в качестве входных данных для формулы ковариации. Это всегда должно быть шесть разных значений (ij; ik; il; jk; jl; lk). Это моя идея, но сейчас я не знаю, как ее реализовать в R.
Это мой код (без расчета ковариаций):
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);
}
Есть ли у кого-нибудь идеи, как реализовать вычисление ковариаций по приведенной выше формуле?
Буду признателен за любую помощь по данной проблеме !!!
Korrelationsmatrix_Studie_i
? Не вижу, где это определяется. - person Mark Miller   schedule 31.08.2013