我正在尝试使用 uniform(0,1) 生成 N(0,1) 进行模拟,但无法运行代码。
首先,我的 x 是通过使 X 成为法线 CDF 的主题,然后得出直方图来找到的。然后施加一条正态曲线以查看它是否适合。下面是我的代码。
sigma=1; mu=0
u<-runif(n)
x<-mu + sqrt(2*sigma(log(u*sigma*sqrt(2*pi))))
hist(x, Freq=F)
xpt<-seq(-5,5,0.1)
ypt<-dnorm(xpt,0,1)
lines(xpt,ypt,col=2)
最佳答案
您似乎反转了 PDF(概率密度函数)而不是 CDF(累积密度函数)。
实际上,正态随机变量不是用逆 CDF 生成的,因为它的 CDF 不是封闭形式。
查看Box-Muller 变换。您模拟两组独立的均匀随机变量:
u <- runif(1000)
v <- runif(1000)
x <- sqrt(-2 * log(u)) * cos(2 * pi * v)
# y <- sqrt(-2 * log(u)) * sin(2 * pi * v)
那么x
来自N(0, 1)
,(x, y)
是二元正态分布,均值为零且恒等协方差。
关于r - 在 R 中使用 uniform(0,1) 生成 N(0,1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43618421/