Эффективно оценить многовариантный нормальный - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу оценить точки данных, которые возникают из многомерных нормальных плотностей. Я должен оценить каждый элемент данных относительно различных средних и ковариационных матриц. У меня есть два средства для каждого наблюдения, чтобы оценить вероятность. Кроме того, у меня есть две разные ковариационные матрицы дисперсии в целом. Пока я рассматриваю только двумерные нормальные распределения.

По сути, мне нужно сделать многофакторную оценку вероятности, и я ищу способ сделать это быстрее. Вот пример кода (данные ниже):

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 (). Следовательно, в этом случае итераций не требуется.

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Нашли решение:

mnormt::dmnorm векторизовано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...