2017-06-04 118 views
-1

我理解统计中变量的定义。假设我想生成的混合物的二元数据如下:这会产生一个双变量数据(两个变量)吗?

0.3正常(1,3)+ 0.7正常(2,5)

使用以下代码:

N <- 100000     

#Sample N random uniforms U 
U <- runif(N) 

#Variable to store the samples from the mixture distribution            
rand.samples <- rep(NA,N) 

#Sampling from the mixture 
for(i in 1:N) { 
    if(U[i]<.3) { 
     rand.samples[i] <- rnorm(1,1,3) 
    } else { 
     rand.samples[i] <- rnorm(1,2,5) 
    } 
} 

威尔这是否会生成一个双变量(两个变量)数据?如果不是,那么我怎样才能生成一个二元或多元混合数据?

+0

不,这是不一样的问题。这个问题是如何在2个变量之间产生混合依赖关系的多数据数据。在这里,我尝试了解我的代码是否会生成两个变量,或者它只是一个变量。他们是不同的。谢谢你的评论。 – Alice

回答

2

@Alice的代码生成两个单变量高斯混合的量化代码。这不是一个二元混合分布。 可以从这个link下载高斯混合物的介绍性参考。
这里是用于生成混合系数为0.3和0.7的两个二元正态分布(分别具有参数(mu1,Sigma1)和(mu2,Sigma2))的混合的R代码。
希望它能帮助你。

rm(list=ls()) 
library(MASS) 
set.seed(1) 
N <- 10000 
p1 <- 0.3 
mu1 <- c(1,-1) 
Sigma1 <- matrix(c(1,0.6,0.6,2),nrow=2) 
mu2 <- c(-2,2) 
Sigma2 <- matrix(c(0.5,0.2,0.2,1),nrow=2) 

set.seed(1) 
U <- runif(N) 
X <- sapply(U, function(u) if (u<p1) mvrnorm(1,mu1,Sigma1) else mvrnorm(1,mu2,Sigma2)) 

这里是二维分布的核密度估计:

bi.dens <- kde2d(X[1,], X[2,]) 
contour(bi.dens, levels = seq(0.001,0.05,length.out=10)) 

enter image description here

2

似乎是这样。可以通过

hist(rand.samples, prob = TRUE) 
curve(0.3 * dnorm(x, 1, 3) + 0.7 * dnorm(x, 2, 5), add = TRUE) 

代替检查for

U <- runif(N) 
rand.samples <- rnorm(N, ifelse(U < 0.3, 1, 2), ifelse(U < 0.3, 3, 5))