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

我最初在stats.stackexchange.com上发布了这个问题,但由于问题集中在编程上而被关闭。希望在这里能得到一些帮助。

为了简化,我不会在这里放很多理论细节,但我的最终目标是使用R实现一个隐马尔可夫模型。

虽然我对理论模型的构建没有问题,但当我尝试实现它时,我意识到自己对计算统计学的一些基本知识并不了解。我的问题就是朝这个方向提出的。

$X$$Y$为随机变量,满足enter image description here$Y|X \sim \mathcal{N}(x, \sigma^2)$,其中$p \in [0, 1]$$\sigma^2 \in [0, +\infty)$。如果$\pi(\cdot)$表示分布,那么如何计算

enter image description here

使用R

我的意思是,这些分布(一个离散,一个连续)的乘法具体意味着什么?我如何使用R来实现这个?答案显然是$x$的函数,但在代码中如何表示呢?

如果$Y|X$也是离散的,会有什么变化吗?例如,enter image description here,其中$q \in [0, 1]$。这会如何影响实现的代码?

我知道我的问题不够具体,但我对如何开始感到非常迷茫。我提这个问题的目的是理解如何将我在纸上写的内容“翻译”到计算机上。


回答:

翻译

这些方程描述了如何计算给定观察值Y=y和参数psigma的值时X的概率分布。最终,你希望实现一个函数p_X_given_Y,它接受Y的一个值并返回X的概率分布。开始的一个好方法是实现表达式右侧使用的两个函数。比如,

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) {  # 分子:对于每个 x \in X  ps <- sapply(c("0"=0,"1"=1),                function (x) { p_X(x) * p_Y_given_X(y, x) })  # 除以分母  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,等等。这是实现它的一种方式,其想法是返回“X的分布”,在这种情况下,它只是一个命名数值向量,其中名称(”0″, “1”)对应于X的支持,值对应于概率质量。

一些替代实现方式可能是:

  • 一个p_X_given_Y(x,y),它也接受一个x的值并返回相应的概率质量
  • 一个p_X_given_Y(y),它返回另一个接受x参数并返回相应概率质量的函数(即,概率质量函数)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注