[英]Drawing from truncated normal distribution delivers wrong standard deviation in R
[英]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.