有效评估多元正态分布
Efficiently evaluate Multivariate Normal
我想评估由多元正态密度产生的数据点。我必须根据不同的均值和协方差矩阵评估每个数据点。对于每个观察结果,我有两种方法来评估可能性。另外,我总体上有两个不同的方差协方差矩阵。目前,我只考虑二维正态分布。
基本上,我必须做很多多变量似然评估,我正在寻找一种更快地完成这项工作的方法。下面是一些示例代码(数据如下):
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 的平均值 A 和协方差矩阵 A 对其进行评估。使用观察值 1 的平均值 B 和协方差矩阵 B 对其进行评估。取第二个数据点数据点,根据属于观察值 2 / 协方差矩阵 A 的均值 A 对其进行评估。然后使用来自观察值 2 / 协方差矩阵 B 的均值 B 等对其进行评估。
我准备了10个数据点以及10*2个均值向量和2个方差协方差矩阵here。不需要保留列表结构,它只是在编码过程中自然产生的。
在单变量设置中,利用 dnorm() 向量化这一事实可以获得足够快的性能。因此,在这种情况下,不需要进行 N 次迭代。
谢谢!
找到解决方案:
mnormt::dmnorm
已矢量化。
我想评估由多元正态密度产生的数据点。我必须根据不同的均值和协方差矩阵评估每个数据点。对于每个观察结果,我有两种方法来评估可能性。另外,我总体上有两个不同的方差协方差矩阵。目前,我只考虑二维正态分布。
基本上,我必须做很多多变量似然评估,我正在寻找一种更快地完成这项工作的方法。下面是一些示例代码(数据如下):
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 的平均值 A 和协方差矩阵 A 对其进行评估。使用观察值 1 的平均值 B 和协方差矩阵 B 对其进行评估。取第二个数据点数据点,根据属于观察值 2 / 协方差矩阵 A 的均值 A 对其进行评估。然后使用来自观察值 2 / 协方差矩阵 B 的均值 B 等对其进行评估。
我准备了10个数据点以及10*2个均值向量和2个方差协方差矩阵here。不需要保留列表结构,它只是在编码过程中自然产生的。
在单变量设置中,利用 dnorm() 向量化这一事实可以获得足够快的性能。因此,在这种情况下,不需要进行 N 次迭代。
谢谢!
找到解决方案:
mnormt::dmnorm
已矢量化。