泊松回归的良好可视化是什么?

机器算法验证 回归 数据可视化 泊松分布
2022-03-20 00:51:56

我想将代码缺陷与代​​码复杂度指标(如接近度)联系起来。一种常见的模型是将其视为泊松过程,其中持续时间是编码所花费的时间,而密度是代码复杂度的函数。我能够进行回归并获得显着性值等。

但是,我很难将结果可视化(对于我不太擅长数学的同事来说更难)。有没有一种很好的方法来查看异常值,如果它是线性趋势等?(感谢 R 包的链接。)

例如,我可以只绘制Defects / Time ~ Complexity,但这相当嘈杂,并且由于Defects离散且非常小,因此很难查看趋势。我在想的一件事是我可以将数据分成分位数,然后对每个分位数进行回归并绘制结果密度 - 不过我不确定这有多有效,特别是因为我的数据不是正态分布的所以它可能误导人们关于分位数是什么。

2个回答

拟合模型后,为什么不使用预测缺陷作为变量,使用对他们有意义的任何标准技术与其他缺陷进行比较?它具有作为连续变量的优点,因此您可以看到甚至很小的差异。例如,人们会理解 1.4 和 0.6 的预期缺陷数之间的差异,即使它们都舍入为 1。

有关预测值如何取决于两个变量的示例,您可以绘制时间与复杂度的等高线图,作为两个轴以及颜色和等高线来显示预测的缺陷;并将实际数据点叠加在顶部。

下面的图需要一些修饰和一个图例,但可能是一个起点。

在此处输入图像描述

另一种方法是添加变量图或部分回归图,这在传统的高斯响应回归中更为熟悉。这些在汽车库中实现。在其余解释变量对响应和解释变量的贡献都被删除之后,有效地显示了响应的剩余部分和解释变量之一的剩余部分之间的关​​系。以我的经验,大多数非统计受众发现这些有点难以理解(当然,这可能是我糟糕的解释)。

在此处输入图像描述

#--------------------------------------------------------------------
# Simulate some data
n<-200
time <- rexp(n,.01)
complexity <- sample(1:5, n, prob=c(.1,.25,.35,.2,.1), replace=TRUE)
trueMod <- exp(-1 + time*.005 + complexity*.1 + complexity^2*.05)
defects <- rpois(n, trueMod)
cbind(trueMod, defects)


#----------------------------------------------------------------------
# Fit model
model <- glm(defects~time + poly(complexity,2), family=poisson)
# all sorts of diagnostic checks should be done here - not shown


#---------------------------------------------------------------------
# Two variables at once in a contour plot

# create grid
gridded <- data.frame(
    time=seq(from=0, to=max(time)*1.1, length.out=100),
    complexity=seq(from=0, to=max(complexity)*1.1, length.out=100))

# create predicted values (on the original scale)
yhat <- predict(model, newdata=expand.grid(gridded), type="response")

# draw plot
image(gridded$time, gridded$complexity, matrix(yhat,nrow=100, byrow=FALSE),
    xlab="Time", ylab="Complexity", main="Predicted average number of defects shown as colour and contours\n(actual data shown as circles)")
contour(gridded$time, gridded$complexity, matrix(yhat,nrow=100, byrow=FALSE), add=TRUE, levels=c(1,2,4,8,15,20,30,40,50,60,70,80,100))

# Add the original data
symbols(time, complexity, circles=sqrt(defects), add=T, inches=.5)

#--------------------------------------------------------------------
# added variable plots

library(car)
avPlots(model, layout=c(1,3))

因此,您对计数数据变量“缺陷”运行泊松回归,并希望可视化显着差异。当您估计回归是估计条件均值,其中是缺陷,是您的回归量,例如代码复杂性。E[yi|xi]yixi

可视化它的最简单方法是只为取两个不同的值,例如,高复杂度和低复杂度,然后绘制两个复杂度级别生成的直方图在幻灯片 3 上看起来像这样。如果差异很大,则这些频率的直方图看起来会非常不同(例如,低复杂度的许多零和高复杂度的许多高缺陷)。叠加这两个直方图可能看起来不错,或者绘制预测缺陷的差异。xiyi=0,yi=1

如果您觉得将减少到 2 个类别过于简单,您可以对任何离散的集执行相同的操作,但如果您一次向观众投放超过 4 个图表,则无法提供良好的视觉呈现.xixi

或者,如果您的绘制一个预测计数(例如,缺陷 = 0)也许这会产生一个与您的结果一致的漂亮单调函数。xixi

顺便说一句:您是否也对您的数据进行了负二项式回归?结果有很大不同吗?如果是这样,您的泊松假设(条件均值等于条件方差)可能过于严格(请参阅“过度离散”)。例如,如果您的变量“缺陷”有许多零,则可能就是这种情况。