2014-10-12 125 views
1

如果我有以下联合分布,其中最上面一行是Y的值,左边第一列是X的值,那么最有效/最干净的方式是什么?去计算X和Y之间的协方差和相关性?我正在考虑加载每一行到一个新的变量,只是做了必要的计算,然后运行cov()和cor()函数,但我知道必须有更好的方法吗?对R中联合分布进行计算的有效方法

谢谢!


| | 14 | 22 | 30 | 40 | 65 | 
|---|-----|-----|-----|-----|-----| 
| 1 | .02 | .05 | .10 | .03 | .01 | 
| 5 | .17 | .15 | .05 | .02 | .01 | 
| 8 | .02 | .03 | .15 | .10 | .09 | 

+0

看看图书馆(mvtnorm)和图书馆(sos) – KFB 2014-10-12 02:50:36

回答

1

你最应该使用的矩阵乘法得到的结果。以下可能不是大多数有效的方式,但它以直接方式使用公式。

# input data 
yvec <- c(14, 22, 30, 40, 65) 
xvec <- c(1, 5, 8) 
jp <- matrix(c(.02, .05, .10, .03, .01, 
       .17, .15, .05, .02, .01, 
       .02, .03, .15, .10, .09), 
       nrow=length(xvec), ncol=length(yvec), TRUE) 

Ex <- rowSums(jp) %*% xvec ## E(X) 
Ex2 <- rowSums(jp) %*% xvec^2 ## E(X^2) 
Vx <- Ex2 - (Ex)^2   ## Var(X) 
Ey <- colSums(jp) %*% yvec ## E(Y) 
Ey2 <- colSums(jp) %*% yvec^2 ## E(Y^2) 
Vy <- Ey2 - (Ey)^2   ## Var(Y) 
Exy <- xvec %*% jp %*% yvec ## E(XY) 

(Cxy <- Exy - Ex*Ey)   ## covariance 
(Rxy <- Cxy /sqrt(Vx * Vy)) ## correlation 
相关问题