Я хочу оценить точки данных, которые возникают из многомерных нормальных плотностей. Я должен оценить каждый элемент данных относительно различных средних и ковариационных матриц. У меня есть два средства для каждого наблюдения, чтобы оценить вероятность. Кроме того, у меня есть две разные ковариационные матрицы дисперсии в целом. Пока я рассматриваю только двумерные нормальные распределения.
По сути, мне нужно сделать многофакторную оценку вероятности, и я ищу способ сделать это быстрее. Вот пример кода (данные ниже):
N <- 10 #number of observations
G <- 2 #number of means per observation / variance - covariance matrices
ll <- array(NA, c(N,G)) #shell for the log likelihoods
for(ii in 1:N){ #loop over data-points
for(gg in 1:G){ #loop over groups of means / var-cov matrices
ll[ii,gg] <- mixtools::logdmvnorm(data[ii,], #evaluate data by observation
mu = means[[gg]][ii,], #mean by group by obs.
sigma = Sigma[[gg]]) #var-cov matrix by group
}
}
Я хочу сделать следующее: взять первую точку данных, оценить ее, используя среднее А из наблюдения 1 и ковариационную матрицу А. Оценить его с помощью среднего В из наблюдения 1 и ковариационной матрицы В. Возьмите вторую Оцените его по отношению к среднему значению A, относящемуся к наблюдению 2 / ковариационной матрице A. Затем оцените его по среднему значению B из наблюдения 2 / ковариационной матрицы B и так далее.
Я подготовил 10 точек данных, а также 10 * 2 средних вектора и 2 ковариационные матрицы дисперсии здесь . Сохранять структуру списка не нужно, она возникла естественным образом в процессе кодирования.
В одномерной настройке можно добиться достаточно высокой производительности, используя факт векторизации dnorm (). Следовательно, в этом случае итераций не требуется.
Спасибо!