Что такое хорошая визуализация для пуассоновских регрессий?

11

Я хочу связать дефекты кода с такими показателями сложности кода, как близость. Одна из распространенных моделей состоит в том, чтобы рассматривать это как процесс Пуассона, где продолжительность - это то, сколько времени затрачивается на кодирование, а плотность - это функция сложности кода. Я могу сделать регрессию и получить значения значимости и т. Д.

Однако мне сложно визуализировать результаты (и еще труднее для моих менее склонных к математике коллег). Есть ли хороший способ посмотреть на это, чтобы посмотреть на такие вещи, как выбросы, если это линейный тренд и т. Д.? (Ссылки на пакеты R приветствуются.)

Например, я мог бы просто построить график, Defects / Time ~ Complexityно это довольно шумно, и, поскольку Defectsон дискретен и очень мал, трудно увидеть тренд. Одна вещь, о которой я думал, это то, что я мог бы разделить данные на квантили, а затем выполнить регрессию для каждого квантиля и построить результирующую плотность - хотя я не уверен, насколько это правильно, тем более, что мои данные обычно не распределяются, поэтому это может вводить людей в заблуждение о том, что такое квантиль.

Xodarap
источник

Ответы:

6

После того, как вы подогнали модель, почему бы не использовать прогнозируемые дефекты в качестве переменной для сравнения с другими, используя те стандартные методы, которые им важны? Он имеет преимущество в том, что является непрерывной переменной, поэтому вы можете видеть даже небольшие различия. Например, люди поймут разницу между ожидаемым количеством дефектов 1,4 и 0,6, даже если они оба округлены до одного.

В качестве примера того, как прогнозируемое значение зависит от двух переменных, вы можете сделать контурную диаграмму времени v. Сложности в виде двух осей, цвета и контуров, чтобы показать прогнозируемые дефекты; и наложить фактические данные точек сверху.

Сюжет ниже нуждается в некоторой полировке и легенде, но может быть отправной точкой.

введите описание изображения здесь

Альтернативой является добавленный график переменной или график частичной регрессии, более знакомый по традиционной гауссовой регрессии ответа. Они реализованы в автомобильной библиотеке. Эффективно показать связь между тем, что осталось от ответа, и тем, что осталось от одной из объясняющих переменных, после того, как остальные поясняющие переменные внесли свой вклад как в ответ, так и в объяснительные переменные. По моему опыту, большинство нестатистических аудиторий находят их немного сложными для оценки (конечно, моими плохими объяснениями).

введите описание изображения здесь

#--------------------------------------------------------------------
# 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))
Питер Эллис
источник
2

Е[Yя|Икся]YяИкся

ИксяYязнак равно0,Yязнак равно1

ИксяИкся

ИксяИкся

Кстати: вы также провели отрицательную биномиальную регрессию на ваших данных? Результаты очень разные? Если это так, ваше предположение Пуассона (условное среднее, равное условной дисперсии) может быть слишком ограничительным (см. «Избыточная дисперсия»). Это может иметь место, например, если ваша переменная «дефект» имеет много нулей.

безымянный
источник