การสร้างภาพข้อมูลที่ดีสำหรับการถดถอยของปัวซองคืออะไร


11

ฉันต้องการเชื่อมโยงข้อบกพร่องของรหัสเข้ากับการวัดความซับซ้อนของรหัสเช่นความใกล้ชิด แบบจำลองทั่วไปอย่างหนึ่งคือการดูสิ่งนี้เป็นกระบวนการปัวซองซึ่งระยะเวลาคือเวลาที่ใช้ในการเข้ารหัสและความหนาแน่นเป็นฟังก์ชันของความซับซ้อนของรหัส ฉันสามารถทำการถดถอยและรับค่านัยสำคัญเป็นต้น

อย่างไรก็ตามมันยากสำหรับฉันที่จะเห็นภาพผลลัพธ์ (และยิ่งยากขึ้นสำหรับเพื่อนร่วมงานที่มีความโน้มเอียงทางคณิตศาสตร์ของฉัน) มีวิธีที่ดีในการดูสิ่งนี้เพื่อดูสิ่งต่าง ๆ เช่นค่าผิดปกติหรือไม่หากเป็นแนวโน้มเชิงเส้นเป็นต้น (ลิงก์ไปยังแพ็คเกจ R ได้รับการชื่นชม)

ตัวอย่างเช่นฉันสามารถพล็อตได้Defects / Time ~ Complexityแต่มันค่อนข้างมีเสียงรบกวนและเนื่องจากDefectsมีการแบ่งแยกและมีขนาดเล็กมากจึงยากที่จะดูแนวโน้ม สิ่งหนึ่งที่ฉันคิดคือการที่ฉันสามารถแบ่งข้อมูลออกเป็นควอนไทล์แล้วทำการถดถอยต่อควอไทล์และวางแผนความหนาแน่นที่เกิดขึ้น - ฉันไม่แน่ใจว่ามันถูกต้องแค่ไหนโดยเฉพาะอย่างยิ่งเนื่องจากข้อมูลของฉันไม่ได้กระจายตามปกติ ผู้คนเข้าใจผิดเกี่ยวกับสิ่งที่เป็น quantile

คำตอบ:


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

ดังนั้นคุณจึงเรียกใช้ปัวซงถดถอยบนตัวแปรข้อมูลการนับ "ข้อบกพร่อง" และต้องการเห็นความแตกต่างที่สำคัญ คุณจะทำอย่างไรเมื่อคุณประเมินว่าการถดถอยนั้นเป็นการประมาณค่าเฉลี่ยตามเงื่อนไขโดยที่เป็นข้อบกพร่องและE[yi|xi]yixi are your regressors, like code complexity.

The easiest way to visualize it is to just take two different values for xi, e.g., high complexity and low complexity, and then plot the predicted frequency of yi=0,yi=1 etc. for both complexity levels. The resulting histogram would look like this on slide 3. If the differences are strong, the histrograms of those frequencies will look very different (e.g., many zeros for low complexity and many high defects for high complexity). It might look nice of you overlay these two histograms, or you plot the difference in predicted defects.

If you feel reducing your xi to 2 categories is oversimplification, you can do the same for any discrete set of xi, but it doesn't make for a good visual presentation if you throw more than, say, 4 graphs at your audience at once.

Alternatively, if your xi is continuous, you could plot one predicted count (e.g., defects=0) depending on that xi. Maybe this results in a nice monotone fuction that is in line with your results.

Btw: have your also run a negative binomial regression on your data? Are the results very different? If so, your Poisson assumption (conditional mean equal to conditional variance) might be too restrictive (see "overdispersion"). That could be the case, for example, if your variable "defect" has many zeros.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.