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快速做到这一点.)
零相关性并不能意味着独立,联合非高斯分布的随机变量!
让我详细说明:这里没有错误.缺陷在于你假设当多变量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)