用R写贝叶斯的模型,预测你老婆是否怀孕了~
我老婆已经33天没来月经了。她怀孕了。这真是个好消息!
通常,月经周期约为一个月。如果您和您的妻子计划怀孕,月经推迟可能是个好消息。但到了第 33 天,仍然不确定这是不是月经错过了,也许只是来晚了,所以这真的是个好消息吗?
最后,我构建了一个简单的贝叶斯模型。基于此模型,您可以根据自上次月经以来的天数和月经周期的历史开始时间来计算当前月经周期的怀孕机会。在这篇文章中我解释了我使用的数据、先验思想、模型假设以及如何使用聚焦采样方法获取数据和R语言计算结果。最后,我解释了为什么模型的计算结果最终是无关紧要的。另外,我附上一个简单的脚本,读者可以自己计算。
数据
还好我老婆记录了2014年下半年的月经开始时间,不然我只能得到少量的数据。总共,我们有 8 个月经开始日期的数据,但我使用的数据不是日期,而是连续月经开始日期之间的天数。已经33天了。
![]()
因此,日期出现的比较有规律,周期为28天。我的最后一次月经是从 1 月 19 日开始的,所以那是 2 月 21 日,我最后一次月经的日期。
建立模型
我想建立一个涵盖月经周期的模型,包括受孕期和不孕期,这当然需要大量的简化。我做了一些一般性的假设如下:
- 其他因素不会影响一对夫妇是否怀孕。
- 该女子月经规律。
- 一对想要怀孕的夫妇正在积极尝试怀孕。换句话说,威尔科克斯等人。建议每周进行两到三次授精。 (2000)。
- 当您怀孕时,您不会来月经。
我做了以下假设:
- 假设两个相邻周期之间的天数(days_ Between_period)服从正态分布,其中均值(mean)和标准差(sd_period)未知。
- 假设生育能力夫妇怀孕(on_fertile 为 true)的周期中怀孕的概率为 0.19(有关为何选择此值的详细信息,请参阅参考资料)。不幸的是,并非所有夫妇都能生育,如果没有生育能力,怀孕的机会为零。如果生育率编码为0-1,那么生育率可以简单地写为0.19 * is_fertile。
- 某些不孕期(n_non_pregnant_periods)的怀孕失败率为(1 - 0.19 * is_fertile)^n_non_pregnant_periods
- 最后,如果您在这个周期(一个周期)没有怀孕。 );那么从上一次月经周期到下一次月经的天数(next_period)必然大于从上一次月经周期到当前日期的天数(days_since_last_period)。换句话说,next_period
这是一个基本假设。但为了使其更实用,您需要考虑使用似然函数,它给定给定参数和一些数据,计算给定参数下数据的概率。一般来说,它是一个与概率成正比的值——概率值。由于这个概率值可能非常小,因此我需要取其对数以避免引起数值问题。在R中设计概率函数时,整体模型如下:
- 该方程以数据和参数为选项。
- 预处理将概率值的初始值为1.0,对应的对数为0.0。 (log_like
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网