在 R 中生成 iid 变量

Generating iid variates in R

我正在研究一个问题,上面写着:

使用示例中给出的特定定义生成 X=(x1, x2) 的 1000 个 iid 变量。定义是 x1 是标准正态分布所以 N(0,1)。但是,当 -1 <= x1 <=1 时,x2 大约为 x1,否则为 x1。

我之前在 R 中使用以下代码生成双变量随机变量,但我不知道如何获取 X=(x1, x2) 然后绘制。

library(gplots)
n<-10^6
sigma<- matrix(c(4,2,2,3), ncol=2)
x<- rmvnorm(n, mean = c(1,2), sigma = sigma)
h2d<- hist2d(x, show = FALSE, same.scale = TRUE, nbins = c(40,40))
persp(h2d$x, h2d$y, h2d$counts/n, ticktype="detailed", theta=30, phi=30, expand=0.5, shade=0.5, col="cyan", ltheta=-30,main="Bivariate Normal Distribution", zlab="f(x1,x2)",xlab="x1",ylab="x2")

所以我知道以上是不正确的,但我不确定我是否可以做类似的事情,或者我正在做这一切都是错误的。

您可以使用rnorm 基函数生成正态分布。并且,使用简单的 ifelse 函数我们可以得到 x2,如下所示:

x1 <- rnorm(10, mean = 0, sd = 1)
x2 <- ifelse( ((x1 <= 1) & (x1 >= -1)), -x1, x1)
plot(x1, x2, type='p')

比你想象的要简单:

set.seed(1) # Setting a seed
X1 <- rnorm(1000) # Simulating X1
X2 <- ifelse(abs(X1) <= 1, -X1, X1) # If abs(X1) <= 1, then set X2=-X1 and X2=X1 otherwise.

由于问题是关于正态边缘而不是正态双变量分布,我们可以看一下双变量密度估计:

library(MASS)
image(kde2d(X1,X2)) 

很明显形状不是椭圆体,所以即使两个边缘都是正常的,双变量分布也不正常。

解析也可以看出。令 Z=X1+X2。如果 (X1,X2) 是双变量正态分布,则 Z 也将是正态分布。但是 P(Z = 0) >= P(|X1| <= 1) ~= 0.68,即它在零处具有正质量,连续分布不可能是这种情况。