如何基于PyMC3中的另一个值来测量一个值的贝叶斯不确定性 我想做什么问题

问题描述

我的数据如下所示:

Player | Avg_goals  | Minutes played

A      | 10         | 100
B      | 12.1       | 900
C      | 15         | 1600
D      | 8.3        | 3200
E      | 3          | 750
...
Z      | 2.4        | 420

我想做什么

是为不确定性源为avg_goals的任何玩家建模并获得 true Minutes

在这种情况下,我更确定 true 的比率更接近记录的Avg_goals,其中Minutes,而对于分钟的球员,他们的真实费率更接近Avg_goals列中的值时,方差更大,不确定性更大。因此,由于分钟数,我更确定播放器D的速率比播放器Z的速率更接近8.3(记录值= 2.4)。

问题

我不确定如何在PyMC3模型中描述Avg_goalsMinutes间的关系。 我决定在目标列之前使用Poisson,但之后不知道如何进行。到目前为止,我的代码(不完整)是

import pymc3 as pm
import numpy as np

minutes = np.array([100,900,1600,3200,750])
goals_ = np.array([10,12.1,15,8.3,3])

with pm.Model() as model:
    lambda = pm.normal('lambda',goals_.mean())
    goals_ = pm.Poisson('goals_',lambda) 
    
    ###NO IDEA WHAT COMES NEXT??!!



任何帮助将不胜感激。如果我可以在PyMC3中实现类似的示例,那就太好了。

解决方法

没有实际重复,不确定性如何随时间缩放将是任意的。但是,您是正确的,至少可以观察到不确定性的相对关系。只是不确定性的绝对单位将取决于先验中的选择。

为了简化模型,我建议使用minutes_playedtotal_goals,而不是OP中的变量。我们仍然可以指定有一个goal_rate输出,但这将是模型参数的确定性函数。应该注意的是,OP数据中给出的某些条目没有任何意义。例如,在1600分钟的比赛中,没有一个目标可以达到15个目标/ 90分钟的进球总数。因此,我更改了数据以使其有效。

二项式回归模型

首先,我将提出一个二项式回归模型,在该模型中,我们将玩家制作的total_goals建模为二项式随机变量,其中N对应于minutes_played且比率为每分钟特定于玩家的目标。回归部分是,我们将假设所有玩家的平均目标进球率都相同,并且我们将推断一个特定于玩家的系数,该系数定义了他们与均值的偏差。

这不是确切的模型。例如,假设所有玩家的得分率为每分钟0到1个目标(GPM)。尽管GPM超过1的逻辑上没有不可能,但实际上这是不可行的,因此我认为该模型并非不合理。

数据

minutes_played = np.array([10,90,750,900,1800,3600])
goals_per_game = np.array([18,10,3,12.1,15,8.3])
total_goals = goals_per_game * minutes_played / 90

n_players = len(total_goals)

型号

with pm.Model() as model:
    # regression model coefficients
    c_player = pm.Normal('c_player',tau=1,shape=n_players)
    c_mu = pm.Normal('c_mu',10)

    # goals per minute (by player)
    gpm = pm.math.invlogit(c_mu + c_player)

    # intuitive variables
    pm.Deterministic('avg_goal_rate',pm.math.invlogit(c_mu)*90)
    pm.Deterministic('goal_rate',gpm*90)

    # log-likelihood
    pm.Binomial('llik',n=minutes_played,p=gpm,observed=total_goals)

    trace = pm.sample()

结果

该示例似乎没有太多问题:

enter image description here

和“直觉”变量的后验分布通常反映了人们的期望,即,分钟数更少的球员的不确定性更高:

pm.plot_forest(trace,var_names=['avg_goal_rate','goal_rate'])

enter image description here

缩放不确定度

在此模型中,用于控制不确定度标度的参数是tau中的c_player = pm.Normal('c_player',shape=n_players)参数。在模型方面,这种精度调节着玩家真正偏离平均进球率的合理性。更高的精度意味着更低的可信度。我建议您尝试使用该值(例如0.1、10),看看它如何改变每个球员的进球率周围的不确定性。