我有一个M
的{{1}},我需要计算条件概率。我已经对我的数据进行了分离,然后我的代码目前仅适用于500x5
个变量,而不是3
,但现在这样做很好。
以下代码已经计算出5
,A=1
和B=1
的次数,我们得到的次数C=1
,A=2
,B=1
等。
C=1
所以我需要代码总结以获得我们获得data = M;
npatients=size(data,1)
asum=zeros(4,2,2)
prob=zeros(4,2,2)
for patient=1:npatients,
h=data(patient,1)
i=data(patient,2)
j=data(patient,3)
asum(h,i,j)=asum(h,i,j)+1
end
for h=1:4,
for i=1:2,
for j=1:2,
prob(h,i,j)=asum(h,i,j)/npatients
end
end
end
和A=1
(添加所有C)的时间来查找:
B=1
这是第一条规则的规则优势。我需要了解如何循环Prob(C=1 given A=1 and B=1) = P(A=1,B=1, C=1)/P( A=1, B=1).
,A
和B
以获得其余内容,以及如何在Matlab中实现此功能。我不知道它是否有用,但我有代码将每一列放入自己的东西。:
C
所以说dest = M(:,1); gen = M(:,2); age = M(:,3); year = M(:,4); dur = M(:,5);
是结果,而dest
和gen
是我如何做到这一点的前提。
下面是第一批age
患者的数据作为例子:
10
任何帮助都是值得赞赏的。
答案 0 :(得分:2)
正确的代码无法通过copy&粘贴,我改变了一点,
如果定义一个计算给定数据概率的函数,那就更好了,
function p = prob(data)
n = size(data,1);
uniquedata = unique(data);
p = zeros(length(uniquedata),2);
p(:,2) = uniquedata;
for i = 1 : size(uniquedata,1)
p(i,1) = sum(data == uniquedata(i)) / n;
end
end
现在在另一个脚本中,
data =[3 2 91;
3 2 86;
3 2 90;
3 2 85;
3 2 86;
3 1 77;
4 2 88;
3 2 90;
4 2 79;
4 2 77;
4 1 65;
3 1 60];
pdest = prob(data(:,1));
pgend = prob(data(:,2));
page = prob(data(:,3));
这将给出,
page =
0.0833 60.0000
0.0833 65.0000
0.1667 77.0000
0.0833 79.0000
0.0833 85.0000
0.1667 86.0000
0.0833 88.0000
0.1667 90.0000
0.0833 91.0000
pgend =
0.2500 1.0000
0.7500 2.0000
pdest =
0.6667 3.0000
0.3333 4.0000
这将给出你已经计算过的概率,
请注意,prob
的第二列是valuse,第一列是概率。
当您想要计算des = 3 & gend = 2
的概率时,您应创建一个新数据集并调用prob
,以便新数据集使用,
mapd2g3 = data(:,1) == 3 & data(:,2) == 2;
datad2g3 = data(mapd2g3,:)
3 2 91
3 2 86
3 2 90
3 2 85
3 2 86
3 2 90
paged2g3 = prob(datad2g3(:,3))
0.1667 85.0000
0.3333 86.0000
0.3333 90.0000
0.1667 91.0000
这是prob(age|dest = 3 & gend = 2)
。
您甚至可以编写一个函数来创建数据集。