如何解决如何使用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,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
自变量并返回相应概率质量的函数(即概率质量函数)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。