如何可视化逻辑回归的贝叶斯拟合优度

机器算法验证 贝叶斯 数据可视化 分类 拟合优度 二进制数据
2022-03-21 20:22:16

对于贝叶斯逻辑回归问题,我创建了一个后验预测分布。我从预测分布中采样,并为我拥有的每个观察结果接收数千个 (0,1) 样本。可视化拟合优度并不有趣,例如:

在此处输入图像描述

该图显示了 10 000 个样本 + 观察到的基准点(左侧可以画出一条红线:是的,这就是观察结果)。问题是这个图几乎没有提供信息,我将有 23 个,每个数据点一个。

有没有更好的方法来可视化 23 个数据点以及后验样本。


另一种尝试:

在此处输入图像描述


基于论文here的另一种尝试

在此处输入图像描述

3个回答

我有一种感觉,您并没有完全放弃所有商品来适应您的情况,但是鉴于我们面前的情况,让我们考虑使用简单的点图来显示信息的实用性。

点图

唯一不在这里的(可能不是默认行为)是:

  • 我利用冗余编码、形状和颜色来区分观察到的无缺陷值和缺陷值。有了这样简单的信息,就不需要在图表上放置一个点。当该点接近中间值时,您也会遇到问题,需要更多查找才能查看观察值是零还是一。
  • 我根据观察到的比例对图形进行了排序。

排序是像这样的点图的真正推动者。此处按比例值排序有助于轻松发现高残差观察值。拥有一个系统,您可以轻松地按包含在情节中或案例的外部特征中的值进行排序,这是获得收益的最佳方式。

该建议也适用于连续观察。您可以根据残差是负数还是正数对点进行着色/整形,然后根据绝对(或平方)残差调整点的大小。尽管由于观察值的简单性,这在 IMO 中是不必要的。

可视化贝叶斯逻辑回归模型与一个预测变量的拟合的常用方法是将预测分布与相应的比例一起绘制。(如果我理解你的问题,请告诉我)

使用流行的 Bliss 数据集的示例。

在此处输入图像描述

R中的以下代码:

library(mcmc)

# Beetle data

ni = c(59, 60, 62, 56, 63, 59, 62, 60) # Number of individuals
no = c(6, 13, 18, 28, 52, 53, 61, 60) # Observed successes
dose = c(1.6907, 1.7242, 1.7552, 1.7842, 1.8113, 1.8369, 1.8610, 1.8839) # dose

dat = cbind(dose,ni,no)

ns = length(dat[,1])

# Log-posterior using a uniform prior on the parameters

logpost = function(par){
var = dat[,3]*log(plogis(par[1]+par[2]*dat[,1])) + (dat[,2]-dat[,3])*log(1-plogis(par[1]+par[2]*dat[,1]))

if( par[1]>-100000 ) return( sum(var) )
else return(-Inf)
}

# Metropolis-Hastings
N = 60000

samp <- metrop(logpost, scale = .35, initial = c(-60,33), nbatch = N)

samp$accept

burnin = 10000
thinning = 50

ind = seq(burnin,N,thinning)

mu1p =   samp$batch[ , 1][ind]

mu2p =   samp$batch[ , 2][ind]


# Visual tool

points = no/ni
# Predictive dose-response curve
DRL <- function(d) return(mean(plogis(mu1p+mu2p*d)))
DRLV = Vectorize(DRL)

v <- seq(1.55,2,length.out=55)
FL = DRLV(v)

plot(v,FL,type="l",xlab="dose",ylab="response")
points(dose,points,lwd=2)

我正在响应对显示模拟故障事件与观察到的故障事件匹配程度的替代图形技术的请求。问题出现在此处的“黑客的概率编程和贝叶斯方法”中这是我的图形方法:

模拟与观察到的 O 形圈故障

代码在这里找到。