Matlab:使用E(X)和E(X ^ 2)的组合矩阵的协方差矩阵

时间:2016-11-14 22:38:38

标签: matlab matrix combinations covariance expectations

我有一组独立的二进制随机变量(比如A,B,C),它们以一定的概率取正值,否则为零,为此我生成了这些变量的所有可能组合的0和1的矩阵至少1即

A B C
1 0 0
0 1 0
0 0 1
1 1 0 

我知道A,B,C的值和概率,所以我可以计算每个的E​​(X)和E(X ^ 2)。我想将上述矩阵中的每个组合视为一个新的随机变量,等于该组合中存在的随机变量的乘积(在矩阵中显示1)。例如,随机变量Row4 = A * B.

我创建了一个与上面相同大小的矩阵,它显示了相关的E(X)而不是1,而1s而不是0。这使我可以轻松地计算新随机变量的预期值的向量(每个组合一个)作为每行的乘积。我还生成了一个类似的矩阵,它显示了E(X ^ 2)而不是E(X),另一个显示了prob(X> 0)而不是E(X)。

我正在寻找一个Matlab脚本来计算这些新变量的协方差矩阵,即将每一行作为随机变量。我认为它必须使用公式:

Cov(X,Y)=E(XY)-E(X)E(Y) 

例如,对于行(1 1 0)和(1 0 1):

Cov(X,Y)=E[(AB)(AC)]-E(X)E(Y)
        =E[(A^2)BC]-E(X)E(Y)
        =E(A^2)E(B)E(C)-E(X)E(Y)

我已经从上面提到的矩阵中获得了这些值。对于每个协方差,我只是不确定如何知道哪两个变量出现在两行中,因为对于那些我将不得不选择E(X ^ 2)而不是E(X)。

或者,上述内容可以写成:

Cov(X,Y)=E(X)E(Y)*[1/prob(A>0)-1]

但问题仍然存在,因为分母中的概率只会是两个组合之间共享的变量。

关于如何在Matlab中自动计算协方差矩阵的任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我很确定这不是最有效的方法,但这是一个开始:

假设r1 ... n随机变量的组合, R 是矩阵:

library(RSelenium)
# Assume a Selenium server is accessible
# $ docker run -d -p 4444:4444 selenium/standalone-firefox:2.53.0
remDr <- remoteDriver()
remDr$open()
appURL <- "http://www.dotabuff.com/matches/2502387920"
remDr$navigate(appURL)
jsSTR <-    'var mychart = $("[data-highcharts-chart=\'0\']").highcharts();
    var xData = mychart.series[0].xData;
    var yData = mychart.series[0].yData;
    return {xdata:xData, ydata:yData};'
remDr$executeScript(jsSTR)
$xdata
[1]   60  120  180  240  300  360  420  480  540  600  660  720  780  840  900  960 1020
[18] 1080 1140 1200 1260 1320 1380 1440 1500 1560 1620 1680 1740 1800 1860

$ydata
[1]   126   203  -499   343   179   958   559  2858   496   686   483  -139  -722 -2627
[15] -2914 -2472 -1427  -940 -1973 -1494 -1418 -1281 -1286  3176  4229  8278  9257 14010
[29] 14490 14232 15150

如果你的载体 E1 E2 ER 为:

    A  B  C
r1  1  0  0
r2  0  1  0
r3  0  0  1 
r4  1  1  0

如果你想计算E(r1,r2),你可以:

1)从 R

中提取R1和R2列
E1 = [E(A)  E(B)  E(C)  ...]
E2 = [E(A²) E(B²) E(C²) ...]
ER = [E(r1) E(r2) E(r3) ...]

2)在 vs

中对两个向量求和
v1 = R(1,:)
v2 = R(2,:)

3)循环 vs ,如果你看到2意味着必须使用 R2 中的值,如果你看到1则是< strong> R1 ,如果为0则不使用该值。

4)使用循环,根据需要计算你的E(r1,r2)。