gpt4 book ai didi

r - 如何从 R 中的双变量已知 PDF 生成随机变量?

转载 作者:行者123 更新时间:2023-12-01 10:49:36 25 4
gpt4 key购买 nike

我在 DX x DY 矩形区域中有这个双变量概率密度函数:

Link to my pdf

我正在使用 R。如何在遵循此 pdf 分布的矩形内生成随机 (x,y) 点?

我已经阅读了很多关于“逆变换采样”的答案,但我没有单变量 pdf。我看过this method ,但看起来乏味且极难实现。

提前致谢!

最佳答案

这似乎更像是一个统计问题,而不是一个编程问题。无论如何,拒绝抽样应该适用于您的情况。您可以在 wikipedia 阅读详细信息.以下函数执行拒绝采样(n...样本数;pdf...概率密度函数;maxval...您的 pdf 可以产生的最大(或更大)值;xlim、ylim...其中密度函数产生的边界框值大于零):

reject.sample.2d <- function(n,pdf,maxval,xlim,ylim)
{
smpl <- data.frame(x=numeric(n),y=numeric(n))
i <- 0
while (i<n)
{
xval <- runif(1,xlim[1],xlim[2])
yval <- runif(1,ylim[1],ylim[2])
if (runif(1)<pdf(xval,yval)/maxval)
{
i <- i+1
smpl[i,] <- c(xval,yval)
}
}
return(smpl)
}

例如,它可以用于二维正态分布

mydens <- function(x,y)
{
dnorm(x)*dnorm(y)
}

这样(这里定义的2d正态分布的最大值在x=0,y=0处略小于0.16):

res <- reject.sample.2d(5000,mydens,0.16,c(-5,5),c(-5,5))

一些检查:

> sd(res[["x"]])
[1] 1.015413
> sd(res[["y"]])
[1] 0.9981738

> shapiro.test(res[["x"]])

Shapiro-Wilk normality test

data: res[["x"]]
W = 0.9995, p-value = 0.1603

> shapiro.test(res[["y"]])

Shapiro-Wilk normality test

data: res[["y"]]
W = 0.9997, p-value = 0.8304

附注您还可以使用逆变换采样。计算沿 x 轴的边际分布。使用此分布进行逆变换采样以获得 x 值。对于此 x 值,使用条件概率分布(给定获得的 x 的 y 的概率)并再次使用逆变换采样,现在用于 y 值。

关于r - 如何从 R 中的双变量已知 PDF 生成随机变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com