在R中生成iid变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中生成iid变量相关的知识,希望对你有一定的参考价值。
我正在研究一个问题,它的内容如下:
使用示例中给出的特定定义生成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")
所以我知道上面的内容并不正确,但我不确定我是否可以做类似的事情,或者我认为这一切都是错的。
答案
这比你想象的要简单:
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,即它具有零的正质量,这不能是连续分布的情况。
另一答案
您可以使用rnorm
基函数来生成正态分布。并且,使用简单的ifelse
函数我们可以获得x2,如下所示:
x1 <- rnorm(10, mean = 0, sd = 1)
x2 <- ifelse( ((x1 <= 1) & (x1 >= -1)), -x1, x1)
plot(x1, x2, type='p')
以上是关于在R中生成iid变量的主要内容,如果未能解决你的问题,请参考以下文章