Po dopasowaniu modelu, dlaczego nie zastosować przewidywanych defektów jako zmiennej do porównania z innymi przy użyciu wszelkich standardowych technik, które są dla nich znaczące? Ma tę zaletę, że jest zmienną ciągłą, dzięki czemu można zobaczyć nawet niewielkie różnice. Na przykład ludzie zrozumieją różnicę między oczekiwaną liczbą defektów wynoszącą 1,4 a 0,6, mimo że obie zaokrąglają do jednej.
Na przykład, w jaki sposób przewidywana wartość zależy od dwóch zmiennych, można wykonać wykres konturowy czasu v. Złożoność jako dwie osie oraz kolor i kontury, aby pokazać przewidywane defekty; i nałóż na siebie rzeczywiste punkty danych.
Poniższa fabuła wymaga dopracowania i legendy, ale może być punktem wyjścia.
Alternatywą jest dodany wykres zmiennej lub wykres częściowej regresji, bardziej znany z tradycyjnej regresji odpowiedzi Gaussa. Są one zaimplementowane w bibliotece samochodów. Skutecznie pokazują związek między tym, co pozostało z odpowiedzi a tym, co pozostało z jednej ze zmiennych objaśniających, po tym, jak reszta zmiennych objaśniających przyczyniła się zarówno do odpowiedzi, jak i zmiennych objaśniających. Z mojego doświadczenia wynika, że większość odbiorców niestatystycznych ma trudności z ich docenieniem (oczywiście przy złym wyjaśnieniu).
#--------------------------------------------------------------------
# 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))