2016-11-15 10 views

答えて

0

私の試みはmodelstring機能を使用することでした。文字列を取得し、それが円弧/辺がないことを知っているノードを削除する - これを手作業で行う - 新たに変更された文字列に保存し、コマンドをmodel2networkでネットワークに再度変換する。ここでは一連のコマンドは次のとおりです。

model.string <- modelstring(mymodel) 
model.string 
new.string <- "your string except the node you want to remove from the output above" 
new.model <- model2network(new.string) 

私はあなたが全部で多数のノードを持っていない(私は22を持っている)と、あなただけのリストからいくつかを削除したい場合はそれが働くだろうと思います。

希望に役立ちます!

0

ファビオラの回答が私にたくさんあります。

これは、モデル文字列を手作業で変更することなく同じことを行う方法です。

私が質問に答えるのはこれが初めてなので、フォーマットに関して私は簡単にしてください。

"net"は私のネットワークで、 "TARGET_NODE"は私が予測したいノードです(私はそれを削除しないことを二重にするためにリスト内に含めます)と "uniq"私のデータセットです。

model.string <- modelstring(net) 
final_nodes <- unique(c(unlist(list(net$arcs)), TARGET_NODE)) 
nodes_to_delete <- paste("\\[",setdiff(names(net$nodes), final_nodes),"]", sep = "") 
for (i in 1:length(nodes_to_delete)) {model.string <- gsub(nodes_to_delete[i], "", model.string)} 
net <- model2network(model.string) 

cols <- c(match(final_nodes, names(uniq))) 
uniq <- uniq[,cols] 
+0

素晴らしいMery!よくやった! –

+0

bnlearnに組み込まれているdrop.arc()を使用してください。私の答え[here](https://stackoverflow.com/a/48676996/4549682)を参照してください。 – wordsforthewise

1

bnlearn内蔵されていarc operations(ドキュメントもhere)このためだけに作られました。これらの関数は、ベイズネットワークが非周期的(非循環有向グラフ、またはDAG)である必要があるため、グラフのサイクルをチェックするメリットもあります。そうでなければ、無限ループが発生し、条件付き確率を計算できません。また、アークを追加するときにモデルの別の違反をチェックする引数(check.illegal)もあります(ドキュメントを参照)。

しかし、その例は素晴らしいとは言えず、ドキュメントもありません。操作によってモデルが返されるため、古いモデルを返されたモデルで上書きする必要があります。 set.arcセットがエッジを向けながら

data(learning.test) 
# model ends up the same every time here, but may want 
# to set random seed for reproducibility in other cases 
set.seed(42) 
model = tabu(learning.test) # tabu is a better algo than hc I think 
plot(model) 

model <- set.arc(model, "A", "F") 
plot(model) 
model <- drop.arc(model, "A", "F") 
plot(model) 

set.edgeセットは、エッジを無向。

関連する問題