[英]How can I “translate” a statistical model defined on paper to the computer using R?
我最初在
stats.stackexchange.com
上發布了這個問題,但由於專注於編程而被關閉。 希望我能在這里得到任何幫助。
為了簡單起見,我不會在這里放很多理論細節,但我的最終目標是使用R
實現一個隱馬爾可夫模型。
雖然我對理論模型構建很好,但當我嘗試實現它時,我意識到我不了解計算統計的基本知識。 我的問題是朝着這個方向發展的。
讓 和
是隨機變量,使得
和
, 和
和
. 如果
表示分布,我如何計算
使用R
?
我的意思是,這些分布(一種離散和一種連續)乘法的確切含義是什么? 我怎樣才能使用R
做到這一點? 答案顯然是一個函數 ,但它是如何在我的代碼中表示的?
如果有什么變化 也是離散的? 例如,
, 和
. 它將如何影響已實現的代碼?
我知道我的問題不是很具體,但我對如何開始感到非常迷茫。 我對這個問題的目標是了解如何將我寫在紙上的內容“翻譯”到計算機上。
這些方程描述了如何計算X
的概率分布,給定Y=y
的觀測值以及參數p
和sigma
值。 最終,您希望實現一個函數p_X_given_Y
,該函數采用Y
值並返回X
的概率分布。 一個好的開始是實現表達式的 RHS 中使用的兩個函數。 就像是,
p_X <- function (x, p=0.5) { switch(as.character(x), "0"=p, "1"=1-p, 0) }
p_Y_given_X <- function (y, x, sigma=1) { dnorm(y, x, sd=sigma) }
請注意,這里p
和sigma
是任意選取的。 然后可以使用這些函數來定義p_X_given_Y
函數:
p_X_given_Y <- function (y) {
# numerators: for each x \in X
ps <- sapply(c("0"=0,"1"=1),
function (x) { p_X(x) * p_Y_given_X(y, x) })
# divide out denominator
ps / sum(ps)
}
可以像這樣使用:
> p_X_given_Y(y=0)
# 0 1
# 0.6224593 0.3775407
> p_X_given_Y(y=0.5)
# 0 1
# 0.5 0.5
> p_X_given_Y(y=2)
# 0 1
# 0.1824255 0.8175745
這些數字應該具有直觀意義(假設p=0.5
): Y=0
更有可能來自X=0
, Y=0.5
同樣可能來自X=0
或X=1
等。這只是一種方式實現它,其中的想法是返回“X 的分布”,在這種情況下,它只是一個命名的數字向量,其中名稱(“0”、“1”)對應於 X 的支持,以及值對應於概率質量。
一些替代實現可能是:
p_X_given_Y(x,y)
也為x
取值並返回相應的概率質量p_X_given_Y(y)
返回另一個函數,該函數接受一個x
參數並返回相應的概率質量(即概率質量函數)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.