ruby - 计算当前概率相对于先验概率以获得均匀分布

标签 ruby statistics probability probability-theory

免责声明:不确定问题标题是否准确...

假设我需要在接下来的 100 分钟内洗碗。我知道我必须最迟在 100 分钟后执行此操作。我每 2 分钟问自己“我应该做还是不做?” (所以我一共问了自己50次)。每次我问自己是否应该做这件事时,我想计算我做这件事的概率,这将决定我现在是否做。概率应该是这样的,如果我重复这个实验一百万次,那么我在 2 分钟、4 分钟、6 分钟等之后做它的可能性几乎是均匀的——或者换句话说,均匀分布这样做的概率。

我做了一个实验,我将个体概率设置为 check_number/total_number_of_checks 但是这似乎没有给出正确的结果。有什么想法吗?

# gem install ascii_charts
require 'ascii_charts'

time_frame = 100
check_frequenzy = 2
number_of_checks = time_frame / check_frequenzy

checks = (1..number_of_checks)

result = {}
checks.each do |i|
  result[i] = 0
end

10_000.times do |t|
  checks.each do |check_number|
    probability = check_number/number_of_checks.to_f
    if rand() <= probability
      # Oh no! I need to do the dishes now :-(
      result[check_number] += 1
      break
    end
  end
end

puts AsciiCharts::Cartesian.new(result.to_a).draw

#=>

950|                                                                                                                                                      
900|                *  *  *                                                                                                                               
850|                         *                                                                                                                            
800|             *                                                                                                                                        
750|                            *                                                                                                                         
700|          *                                                                                                                                           
650|                               *                                                                                                                      
600|       *                          *                                                                                                                   
550|                                                                                                                                                      
500|                                     *                                                                                                                
450|                                                                                                                                                      
400|    *                                                                                                                                                 
350|                                        *                                                                                                             
300|                                           *                                                                                                          
250|                                                                                                                                                      
200| *                                            *                                                                                                       
150|                                                 *                                                                                                    
100|                                                    *                                                                                                 
 50|                                                       *  *  *                                                                                        
  0+----------------------------------------------------------------*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 

最佳答案

您可以使用 Bayes' Theorem 计算这些条件概率.

T是一个等于洗碗时间(以分钟为单位)的随机变量。

我假设概率是“线性的”(在 0 到 100 分钟之间),你的意思是,对于任何随机变量 t :

P[T <= t] = .01*t, 0 <= t <= 100

如果餐具没有及时洗好t0 ,在接下来的两分钟内洗碗的(条件)概率由下式给出:

P[T <= t+2| T > t] = P[T <= t+2 and T > t] / P[T > t]
                   = (P[T <= t+2] - P[T <= t]) / (1-P[T <= t])
                   = (.01*(t+2) - .01t) / (1-.01t)
                   = 2/(100-t)

P[T <= t+2| T > t]读作,“T 的概率(值)小于或等于 t+2,假设(值)T 大于 t”。

因此:

P[T <=   2 | T >  0] = 2/98
P[T <=   4 | T >  2] = 2/96
...
P[T <=  98 | T > 96] = 2/4
P[T <= 100 | T > 98] = 2/2

如果你放弃线性要求,对我来说,如果我们在谈论菜肴:

P[T <= 98] #=> 0

关于ruby - 计算当前概率相对于先验概率以获得均匀分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29153989/

相关文章:

ruby - 如何使用 RVM 让 Upstart 优雅地工作?

python - 循环向量列表以创建每个向量的直方图

r - 如何将我构建的模型拟合到另一个数据集并获得残差?

PHP、MySQL 统计

算法/概率练习

ruby-on-rails - 未初始化的常量错误

ruby - 在ruby中递归地将 block 传递给方法

ruby-on-rails - 带回形针的 ruby​​ 1.9.2 lambda

php - 如何在 PHP 中创建钟形曲线图

c++ - 带阶乘方程的概率计算器