基于数据集的Matlab条件概率
我有一个矩阵基于数据集的Matlab条件概率,matlab,dataset,probability,Matlab,Dataset,Probability,我有一个矩阵M的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=
M
的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
和B=1
(将所有C相加)的时间数,从而找到:
这是第一条规则的规则强度。我需要了解如何循环A
、B
和C
以获得其余部分,以及如何在Matlab中实际实现这一点。我不知道它是否有用,但我有代码将每一列放入它自己的东西中
dest = M(:,1); gen = M(:,2); age = M(:,3); year = M(:,4); dur = M(:,5);
所以说,dest
是结果,gen
和age
是前因,我该怎么做呢
以下是第一批10
患者的数据示例:
destination gender age
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 1 1
3 2 2
2 2 2
3 2 1
3 2 1
非常感谢您的帮助。由于您的代码无法通过复制和粘贴工作,我对其进行了一点修改 最好定义一个函数来计算给定数据的概率
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
的第二列是值,第一列是概率
当您想要计算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
这是问题(年龄|目标=3&gend=2)
您甚至可以编写一个函数来创建数据集。对于
asum(h,i,j)=asum(h,i,j)+1
,j
是91
,感谢您的回复。请你详细说明一下好吗?我已经在代码中有了asum(h,I,j)=asum(h,I,j)+1(在j=data(patient,3)之后),但不是作为for循环,我应该做什么?它不能通过复制和粘贴工作的原因是因为它不是完整的代码,对此表示抱歉。我还忘了说程序将年龄离散化为1或2,1=80@adammcbrinn,看看概率是否正确。谢谢,这真的很有用,但是我不知道如何使用函数。我是否创建了一个名为prob的文件,并将第一位放入其中,然后调用它,如果是,我如何调用它?@adammcbrinn,是的,将第一个脚本复制到一个新的m文件中,并用名称prob
保存它。在您的主脚本中调用它,就像pdest=prob(data(:,1))代码>如我所知。您必须提供正确的数据列作为prob
的输入。它的作用类似于matlab自己的函数之一。我注意到你昨天也发了同样的问题,但是问题很乱!现在好多了。是的,它起作用了:D我看着它,觉得它看起来不对,然后记得数据是离散的哈哈。非常感谢你的帮助。
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