如何从R中已知的二元PDF生成随机变量?

如何从R中已知的二元PDF生成随机变量?,r,random,R,Random,在DX x DY矩形区域中有一个二元概率密度函数: 我使用的是R。如何在这个pdf分布之后的矩形内生成随机(x,y)点 我读过很多关于“逆变换采样”的答案,但我没有一个单变量pdf。我已经看过了,但是看起来很乏味,而且很难实现 提前谢谢你 这似乎更像是一个统计问题,而不是一个编程问题。无论如何,拒绝抽样应该在你的情况下起作用。你可以在网站上阅读详细信息。以下函数执行拒绝采样(n…样本数;pdf…概率密度函数;maxval…pdf可以产生的最大(或更大)值;xlim,ylim…边界框,其中密度函

在DX x DY矩形区域中有一个二元概率密度函数:

我使用的是R。如何在这个pdf分布之后的矩形内生成随机(x,y)点

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


提前谢谢你

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

p、 美国。
也可以使用逆变换采样。计算沿x轴的边缘分布。使用此分布进行逆变换采样以获得x值。对于该x值,使用条件概率分布(给定获得的x,y的概率)并再次使用逆变换采样,现在用于y值。

Hi,一个后续问题:假设我们使用上述方法从联合PDF中采样x和y。我们如何使用X和Y的采样值来计算E(X)和Var(X)?
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)
}
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