This R-package moewishart provides maximum likelihood
estimation (MLE) and Bayesian estimation for the Wishart mixture
model and the Wishart mixture-of-experts
(MoE-Wishart) model. It implements four different
inference algorithms for the two model:
Install the latest development version from GitHub:
Data simulation from a MoE-Wishart model:
library(moewishart)
n <- 200 # number of subjects
p <- 2 # dimension of covariance matrix
set.seed(123) # fix coefficients of underlying MoE model
Xq <- 3
K <- 3
betas <- matrix(runif(Xq * K, -2, 2), nrow = Xq, ncol = K)
betas[, K] <- 0
# simulate data
dat <- simData(n, p,
Xq = 3, K = 3, betas = betas,
pis = c(0.35, 0.40, 0.25),
nus = c(8, 12, 3)
)
# fit Bayesian MoE-Wishart model
set.seed(123)
fit <- moewishart(
dat$S,
X = cbind(1, dat$X), K = 3,
mh_sigma = c(0.2, 0.1, 0.2), # RW-MH variances (length K)
mh_beta = c(0.3, 0.3), # RW-MH variances (length K-1)
niter = 3000, burnin = 1000
)Posterior means for degrees of freedom (DoF) of Wishart distributions:
## [1] 8.574911 14.397351 3.310689
True DoF:
## [1] 8 12 3
Posterior means for scale matrices of Wishart distributions:
## , , 1
##
## [,1] [,2]
## [1,] 0.5197160 0.2103881
## [2,] 0.2103881 0.7470847
##
## , , 2
##
## [,1] [,2]
## [1,] 1.7637949 0.5540576
## [2,] 0.5540576 1.3244947
##
## , , 3
##
## [,1] [,2]
## [1,] 4.1115070 -0.1267705
## [2,] -0.1267705 3.0385263
Posterior means for gating coefficients:
## [,1] [,2] [,3]
## [1,] -0.3656861 -0.08024419 0
## [2,] -0.9526224 2.24956385 0
## [3,] 1.7609922 2.40287152 0
## [4,] -0.4953755 -2.56072719 0
# fit Bayesian Wishart mixture model
set.seed(123)
fit2 <- mixturewishart(
dat$S,
K = 3,
mh_sigma = c(0.2, 0.1, 0.2), # RW-MH variances
niter = 3000, burnin = 1000
)
Posterior means for subpopulation probabilities:
## [1] 0.2690425 0.5088864 0.2220712
Posterior means for DoF of Wishart distributions:
## [1] 7.986113 12.153338 3.284252
# fit MoE-Wishart model via EM alg.
set.seed(123)
fit3 <- moewishart(
dat$S,
X = cbind(1, dat$X), K = 3,
method = "em",
niter = 3000
)## Iter 1 loglik = -2079.322610
## Iter 2 loglik = -1998.694495
## Iter 3 loglik = -1985.659443
## Iter 4 loglik = -1947.223842
## Iter 5 loglik = -1899.666938
## Iter 6 loglik = -1878.233062
## Iter 7 loglik = -1861.702657
## Iter 8 loglik = -1851.548347
## Iter 9 loglik = -1847.342510
## Iter 10 loglik = -1845.497390
## Iter 11 loglik = -1844.693281
## Iter 12 loglik = -1844.360139
## Iter 13 loglik = -1844.220804
## Iter 14 loglik = -1844.160033
## Iter 15 loglik = -1844.132434
## Iter 16 loglik = -1844.119493
## Iter 17 loglik = -1844.113254
## Iter 18 loglik = -1844.110247
## Iter 19 loglik = -1844.108705
## Iter 20 loglik = -1844.107915
## Iter 21 loglik = -1844.107527
## Iter 22 loglik = -1844.107312
## Iter 23 loglik = -1844.107207
## Iter 24 loglik = -1844.107148
## Iter 25 loglik = -1844.107116
## Iter 26 loglik = -1844.107098
## Iter 27 loglik = -1844.107088
## Iter 28 loglik = -1844.107082
## Iter 29 loglik = -1844.107080
## Iter 30 loglik = -1844.107079
## Iter 31 loglik = -1844.107077
## Iter 32 loglik = -1844.107077
## Converged by loglik tolerance.
EM estimates for DoF of Wishart distributions:
## [1] 7.515417 13.987158 3.274665
EM estimates for Wishart scale matrices:
## [[1]]
## [,1] [,2]
## [1,] 0.5591113 0.2324429
## [2,] 0.2324429 0.8148737
##
## [[2]]
## [,1] [,2]
## [1,] 1.7665723 0.5567668
## [2,] 0.5567668 1.3336367
##
## [[3]]
## [,1] [,2]
## [1,] 4.3139885 -0.1886288
## [2,] -0.1886288 3.0983710
EM estimates for gating coefficients:
## comp1 comp2 comp3
## [1,] -0.006270492 0.1302039 0
## [2,] -0.798302303 2.0340525 0
## [3,] 1.598530103 2.2399293 0
## [4,] -0.510585695 -2.3465248 0
# fit Wishart mixture model via EM alg.
set.seed(123)
fit4 <- mixturewishart(
dat$S,
K = 3,
method = "em",
niter = 3000
)## Running 3 initialization restarts...
## -> Restart 1: Loglik = -2011.91
## -> Restart 2: Loglik = -1989.16
## -> Restart 3: Loglik = -1989.16
## Iter 10 | Loglik: -1953.0326 | Nu: 5, 7.26, 5
## Iter 20 | Loglik: -1952.7924 | Nu: 5.15, 7.05, 5.21
## Iter 30 | Loglik: -1930.6036 | Nu: 4.21, 7.13, 8.27
## Iter 40 | Loglik: -1902.9306 | Nu: 3.08, 7.78, 10.79
## Iter 50 | Loglik: -1902.6288 | Nu: 3, 7.76, 11.11
## Iter 60 | Loglik: -1902.6133 | Nu: 2.99, 7.71, 11.21
## Iter 70 | Loglik: -1902.6102 | Nu: 2.99, 7.69, 11.26
## Iter 80 | Loglik: -1902.6095 | Nu: 2.99, 7.68, 11.28
## Iter 90 | Loglik: -1902.6093 | Nu: 3, 7.68, 11.3
## Iter 100 | Loglik: -1902.6092 | Nu: 3, 7.68, 11.3
## Iter 110 | Loglik: -1902.6092 | Nu: 3, 7.68, 11.31
## Converged at iteration 116
EM estimates for DoF of Wishart distributions:
## [1] 2.995383 7.682819 11.309040
EM estimate for Wishart scale matrices:
## [[1]]
## [,1] [,2]
## [1,] 4.048859 -1.10103
## [2,] -1.101030 2.79641
##
## [[2]]
## [,1] [,2]
## [1,] 0.5582012 0.2515063
## [2,] 0.2515063 0.8151752
##
## [[3]]
## [,1] [,2]
## [1,] 2.0930529 0.6273737
## [2,] 0.6273737 1.5706730