为什么我的数字不匹配,R mvtnorm中的多元t分布

Jos*_*sef 6 r distribution correlation

我试图为Genz和Bretz之后的多变量t分布编程cdf的算法,R中的参考包是mvtnorm.

当我测试我的功能时,我发现我的数字不匹配.在以下示例中,从mvtnorm帮助调整,多变量t随机变量具有独立的组件.所以积分应该只是3个独立概率的乘积

> lower <- -1
> upper <- 3
> df <- 4
> corr <- diag(3)
> delta <- rep(0, 3)
> pmvt(lower=lower, upper=upper, delta=delta, df=df, corr=corr)
[1] 0.5300413
attr(,"error")
[1] 4.321136e-05
attr(,"msg")
[1] "Normal Completion"
Run Code Online (Sandbox Code Playgroud)

报告的误差是4e-5,该误差与独立概率的乘积相比较

> (pt(upper, df) - pt(lower, df))**3
[1] 0.4988254
Run Code Online (Sandbox Code Playgroud)

0.5300413 - 0.4988254 = 0.0312159

与R mvtnorm相比,我在自己的代码中得到的差异在于大约相同范围内的各种示例.

我大部分都是R的初学者.那么,我做错了什么或出了什么问题?

(我没有在R-help邮件列表上注册,所以我在这里试试.)

更新:正如pchalasani解释的那样,我的统计数据是错误的,我自己的代码中的错误是在一些辅助函数中,而不是在t分发代码中.看到不相关的好方法并不意味着独立,正在考虑条件分布.以下是四分位数的独立双变量随机变量(10000个样本)的列频率%*100(以列变量为条件的分布).

双变量不相关的正常变量

([[26, 25, 24, 23],
  [24, 23, 24, 25],
  [24, 27, 24, 24],
  [24, 23, 26, 25]])
Run Code Online (Sandbox Code Playgroud)

双变量不相关的变量

([[29, 20, 22, 29],
  [20, 31, 28, 21],
  [20, 29, 29, 20],
  [29, 18, 18, 29]])
Run Code Online (Sandbox Code Playgroud)

第一列和最后一列中的分布与中间列非常不同.(对不起,没有R代码,因为我不知道怎么用R快速做到这一点.)

Pra*_*ani 7

零相关性并不能意味着独立,联合非高斯分布的随机变量!

让我详细说明:这里没有错误.缺陷在于你假设当多变量Student-t随机变量不相关时,它们也是独立的,绝对不是这样的:唯一一类没有相关性意味着独立的多变量分布是MV高斯分布.

要看到共同遵循MV Student-T分布的两个不相关的随机变量不是独立的,请考虑以下情况n=2:

require(mvtnorm)
x <- rmvt(100000, sigma = diag(2), df=4, delta = rep(0,2) )
Run Code Online (Sandbox Code Playgroud)

现在每列x代表两个随机变量的实现.我们首先检查它们的相关性是否相当小:

> cor(x[,1], x[,2])
[1] -0.003378811
Run Code Online (Sandbox Code Playgroud)

然而,的相关性平方x[,1]x[,2]更是高达30.4%,也就是说,绝对不是零,证明x[,1]x[,2]在统计上并不独立:

> cor(x[,1]^2, x[,2]^2)
[1] 0.3042684
Run Code Online (Sandbox Code Playgroud)