【发布时间】:2022-01-19 02:21:40
【问题描述】:
我正在用 2 个高斯模型做高斯混合模型。为此,我使用“mvrnorm”,但出现以下错误:
Error in mvrnorm(r.mixture.gaussian1) : argument "mu" is missing, with no default
如何将函数的参数传递给 mvrnorm?
特别是我在此行调用函数时遇到的错误:X1_distribution=mvrnorm(r.mixture.gaussian1) 以及X2_distribution 函数。
#Define constants
rho = 0.5
n=100
mu11=c(-1,4)
mu12=c(1,6)
mu21=c(6,1)
mu22=c(8,3)
#2 functions used in X1_distribution and X2_distribution are defined
r.mixture.gaussian1= function(n, mu, Sigma){
X = cbind(rep(0, n), rep(0, n))
for(i in 1:n){
u = runif(1, min = 0, max = 1)
if(u < rho){
X[i,] = mvrnorm(1, mu = mu11, Sigma = Sigma)
}else{
X[i,] = mvrnorm(1, mu = mu12, Sigma = Sigma)
}
}
}
r.mixture.gaussian2= function(n, mu, Sigma){
X = cbind(rep(0, n), rep(0, n))
for(i in 1:n){
u = runif(1, min = 0, max = 1)
if(u < rho){
X[i,] = mvrnorm(1, mu = mu21, Sigma = Sigma)
}else{
X[i,] = mvrnorm(1, mu = mu22, Sigma = Sigma)
}
}
}
Sigma= matrix(c(1,0.5,0.5,1),ncol=2)
Sigma <- make.positive.definite(Sigma, tol=1e-3)
set.seed(1234)
X1_distribution=mvrnorm(r.mixture.gaussian1)
mu1=rho*mu11+(1-rho)*mu12
Sigma= matrix(c(1,0.5,0.5,1),ncol=2)
Sigma <- make.positive.definite(Sigma, tol=1e-3)
set.seed(120)
X2_distribution=mvrnorm(r.mixture.gaussian2)
mu2=rho*mu21+(1-rho)*mu22
X=rbind(X1_distribution,X2_distribution)
plot(density(X))
【问题讨论】:
-
1) 您使用参数
mu定义混合函数,但该参数未在函数主体中使用,您有mu11等。2) 这没有意义完全没有:mvrnorm(r.mixture.gaussian1)。电话应该是r.mixture.gaussian1(n, mu, Sigma)。