如何将我的函数的参数传递给 mvrnorm?
Posted
技术标签:
【中文标题】如何将我的函数的参数传递给 mvrnorm?【英文标题】:How to pass arguments of my functions to mvrnorm? 【发布时间】: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)
。
【参考方案1】:
我没有使用我创建的函数,而是直接使用了函数内部的内容,并且效果很好。例如X1_distribution
,如下:
mu11=c(-6,4)
mu12=c(-2,6)
Sigma= matrix(c(1,0.5,0.5,1),ncol=2)
Sigma <- make.positive.definite(Sigma, tol=1e-3)
set.seed(1234+j)
for(k in 1:n)
u = runif(1, min = 0, max = 1)
if(u < rho)
X1_distribution[k,] = mvrnorm(1, mu = mu11, Sigma = Sigma)
else
X1_distribution[k,] = mvrnorm(1, mu = mu12, Sigma = Sigma)
X2_distribution
也是如此。更改 mu11
和 mu12
并在上面写着 X1_distribution
的地方输入 X2_distribution
【讨论】:
以上是关于如何将我的函数的参数传递给 mvrnorm?的主要内容,如果未能解决你的问题,请参考以下文章