2016-09-21 40 views
2

在估計了貝葉斯網絡中的條件概率後,我問了一個節點的概率(「Inlet_gas_total_pressure」)如下;節點Inlet_gas_total_pressure(多項分佈)貝葉斯網絡中一個節點的條件概率修改(R代碼)

條件概率表的

bn.mle.before$"Inlet_gas_total_pressure" 

參數:

 no  yes 
0.843127 0.156873 

bn.mle.before$"Inlet_gas_total_pressure"$prob 

     no  yes 
0.843127 0.156873 

我想改變的 「是」 從0.156873到0.4的概率值。
我該怎麼做? 以下是我的試用版,但失敗。

bn.mle.before$"Inlet_gas_total_pressure" <- list(prob=c("no"=0.6, "yes"=0.4)) 

錯誤check.fit.dnode.spec(值,節點=名): 節點Inlet_gas_total_pressure的條件概率分佈必須是一個表,矩陣或多維數組。

請幫幫我。

+0

錯誤表明,它不應該是一個列表中的節點。看看'str(bn.mle.before $「Inlet_gas_total_pressure」)',看看它是什麼類型的對象,或者甚至是'輸入(bn.mle.before $「Inlet_gas_total_pressure」)',然後構造新的表同樣的方式 – user20650

回答

1

我遇到了同樣的問題。 這裏有一些玩具的例子,將告訴你如何保存一天。

library(bnlearn) 
Learning.set4=cbind(c("Yes","Yes","Yes","No","No","No"),c("Blue","Green","Blue","Green","Green","Green"),c(9,10,8,3,2,1)) 
Learning.set4=as.data.frame(Learning.set4) 
Learning.set4[,c(3)]=as.numeric(as.character(Learning.set4[,c(3)])) 
colnames(Learning.set4)=c("Cause1","Cause2","Cons") 
b.network=empty.graph(colnames(Learning.set4)) 
struct.mat=matrix(0,3,3) 
colnames(struct.mat)=colnames(Learning.set4) 
rownames(struct.mat)=colnames(struct.mat) 
struct.mat[2,3]=1 
struct.mat[1,3]=1 
bnlearn::amat(b.network)=struct.mat 
haha=bn.fit(b.network,Learning.set4) 

print(haha$Cause1$prob) 

T=haha$Cause1$prob 
T[[1]]=0.8 
T[[2]]=0.2 

haha$Cause1=T 
print(haha$Cause1$prob) 

我改變成功的概率爲原因1

乾杯

+0

非常感謝您的親切幫助。我會嘗試。祝你有美好的一天! –

+0

沒問題。 即使它有效,我的方法也有點笨拙。如果有人有更好的解決方案,我會很樂意使用它。 乾杯 –