如何使用 R 将纸上定义的统计模型“翻译”到计算机上?

How can I “translate” a statistical model defined on paper to the computer using R?

I have initially posted this question on stats.stackexchange.com, but it was closed due to being focused on programming. Hopefully, I can get any help here.

为了简单起见,我不会在这里放太多理论细节,但我的最终目标是使用 R.

实现隐马尔可夫模型

虽然我对理论模型构建没问题,但是当我尝试实现它时,我意识到我对计算统计的基本知识一窍不通。我的问题就是这个方向。

and be random variables such that and , with and . If 表示分布我如何计算

使用 R?

我的意思是,这些分布(一个离散和一个连续)相乘的确切含义是什么?我如何使用 R 执行此操作?答案显然是 的函数,但它在我的代码中是如何表示的?

如果 is also discrete? For instance, , with 有什么变化吗?它将如何影响实现的代码?

我知道我的问题不是很具体,但我不知道如何开始。我的这个问题的目标是了解如何将我在纸上写的内容“翻译”到计算机上。

翻译

这些方程式描述了如何在给定 Y=y 的观察值以及参数 psigma 的值的情况下计算 X 的概率分布。最终,您想要实现一个函数 p_X_given_Y,它的值为 Y,return 是 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) }

请注意,psigma 是任意选择的。然后可以使用这些函数来定义 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=0Y=0.5 同样可能来自 X=0X=1 等。这只是实现它的一种方式,其想法是 return “X 的分布”,在本例中它只是一个命名的数字向量,其中名称(“0”、“1”)对应于 X 的支持,值对应于概率质量。

一些替代实现可能是:

  • a p_X_given_Y(x,y) 也取值 x 和 returns 相应的概率质量
  • a p_X_given_Y(y) returns 另一个函数接受 x 参数和 returns 相应的概率质量(即概率质量函数)