我有一组独立的二进制随机变量(比如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中自动计算协方差矩阵的任何建议都将受到高度赞赏。
答案 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)。