簡體   English   中英

Hydenet r package:setnode() 模擬正態分布的錯誤標准差

[英]Hydenet r package: setnode() simulates wrong standard deviation for normal distribution

在 r package hydenet 中,我無法模擬我之前使用 setnode() 輸入的標准偏差。 hydenet 導出到 jags 進行模擬。

我在這里加載庫並制作一個簡單的圖表,顯示 node_a 影響 node_b

library(rjags)
library(HydeNet)

dag = HydeNetwork(~node_a
                  + node_b | node_a)

我給兩個節點一個標准差(節點 a 設置為 100,節點 b 設置為 0.25)

dag = setNode(dag, node_a, nodeType = "dnorm", mean = 10, sd = 100) #.1
dag = setNode(dag, node_b, nodeType = "dnorm", mean = "15 + 0.2*node_a", sd = 0.25)

我編譯成 Jags 並在下面模擬一個 100000 的數據框。

comp_dag = compileJagsModel(dag)
sim = HydeSim(comp_dag, variable.names = c("node_a", "node_b"), n.iter = 100000)

但是由於某種原因,當我檢查模擬數據上節點的標准偏差時,標准偏差是錯誤的。 由於某種原因,simulated_sd=sqrt(1/input_sd)。 我也不知道為什么它遵循這個等式。

sd(sim$node_a)
#0.1000575
sd(sim$node_b)
#1.992311

當 hydenet 被輸入模擬數據時,它估計接近標准偏差的原始輸入,奇怪的是這似乎有效。 這是不幸的,因為我需要使用這兩個方程。 因此,它阻止了我僅僅反轉我之前推導出的方程。

sim_dag = HydeNetwork(~node_a
                  + node_b | node_a, data = sim)
writeNetworkModel(sim_dag, pretty = T)
# model{
#    node_a ~ dnorm(9.99955, 100.00706)
#    node_b ~ dnorm(15.53815 + 0.1468 * node_a, 0.25169)
# }

我想通了,雖然我想我會把我的帖子留給其他困惑的人。 JAG 采用均值和精度,而不是均值和標准差。 精度為 1/方差,這也解釋了我在輸入和 output 標准偏差之間得到的等式。

如果您在 R 中模擬來自 JAGS 的事物,則基於我編寫的方程式 (simulated_sd = 1/sqrt(input_sd)) 的反向計算將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM