【问题标题】:How to do a two dimensional margin distribution?如何进行二维边距分布?
【发布时间】:2020-07-24 02:55:18
【问题描述】:

我被要求抽样,然后做一个边际分布 $f(x_1,x_5)$ 并绘制它。我有以下代码,但 dnorm 用于一维,所以我想知道是否需要将其更改为 dmvnorm。

如果是这样,我更改 mu=mu.marginal,sigma=sigma.marginal,添加了一个 y 样本,但 dmvnorm 说由于非数组输入而出错。感谢任何帮助。

多元正态模型:

mu = c(1,2,6,2,-4)
sigma = c(1,2,1,0.5,2)
rho = diag(rep(1,5))
rho[1,2] = rho[2,1] = 0.4
rho[1,3] = rho[3,1] = -0.3
rho[1,4] = rho[4,1] = -0.7
rho[3,5] = rho[5,3] = 0.2
rho[4,5] = rho[5,4] = 0.5
Sigma = rho * (sigma %o% sigma)

我的代码:

p = c(1,5)
(mu.marginal = mu[p])
(Sigma.marginal = Sigma[p,p])
# p is one-dimensional: use dnorm() to compute marginal pdf
x = seq(-1,6,by=0.01)

fx = dnorm(x,mean=mu.marginal,sd=sqrt(Sigma.marginal))
ggplot(data=data.frame(x=x,y=fx),mapping=aes(x=x,y=y)) + geom_line(col="blue")

【问题讨论】:

  • 您的代码注释说“p 是一维的”,但 (x_1, x_5) 是二维的...为了确保我正确理解您的任务,您将从 @ 的边际分布中抽样987654324@ 并绘制样本?
  • 是的,抱歉它的意思是 p 是二维的

标签: r distribution sample normal-distribution multivariate-testing


【解决方案1】:

在我看来,您使用 mvtnorm 走在正确的轨道上,并且接近解决方案...我不确定您是如何遇到非数组输入错误的,但这是我使用 @ 得到的结果987654324@:

set.seed(123)
dat <- mvtnorm::rmvnorm(1e4, mean = mu.marginal, sigma = Sigma.marginal)
dat <- as.data.frame(dat)

ggplot(dat, aes(x = V1, y = V2)) +
    geom_bin2d()

您可以看到它是相当球形的,这是您所期望的,因为 Sigma.marginal 的非对角元素为 0(这意味着 x_1x_5 略微独立正态分布...)

【讨论】:

  • 谢谢,在这种情况下通常会导致数组错误的原因是什么?如果可以的话,我会尝试复制产生我错误的代码
  • 我使用了 dmvnorm 而不是 mvtnorm::rmvnorm 发生这种情况是有原因的吗?
  • @Isabelle 是的,也许;这取决于你调用它的具体程度(即你给出的参数。没有看到你用来调用dmvnorm() 的代码,我最好的猜测是你传递了一些不是矩阵的东西作为sigma
猜你喜欢
  • 2020-09-23
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
相关资源
最近更新 更多