วิธีการตรวจสอบการถดถอยสามารถจัดการข้อมูลเช่นนี้ พวกเขาถือว่าส่วนที่เหลือมีพฤติกรรมเหมือนกับการถดถอยเชิงเส้นปกติ แต่ได้รับการแก้ไขเพื่อให้
(การเซ็นเซอร์ด้านซ้าย): ค่าทั้งหมดเล็กกว่าขีด จำกัด ต่ำซึ่งไม่ขึ้นอยู่กับข้อมูล (แต่อาจแตกต่างจากกรณีหนึ่งไปอีกกรณีหนึ่ง) ยังไม่ได้รับการนับจำนวน และ / หรือ
(การเซ็นเซอร์ที่ถูกต้อง): ค่าทั้งหมดที่มีขนาดใหญ่กว่าขีด จำกัด สูงซึ่งเป็นอิสระจากข้อมูล (แต่อาจแตกต่างกันไปในแต่ละกรณี) ไม่ได้รับการวัดปริมาณ
"ไม่ใช่ปริมาณ" หมายความว่าเรารู้ว่าค่าต่ำกว่า (หรือสูงกว่า) เกณฑ์ของมันหรือไม่แต่นั่นคือทั้งหมด
วิธีการที่เหมาะสมมักจะใช้โอกาสสูงสุด เมื่อแบบจำลองสำหรับการตอบสนองสอดคล้องกับเวกเตอร์Xอยู่ในรูปแบบYX
Y∼Xβ+ε
กับ iid มีการแจกแจงทั่วไปF σด้วย PDF f σεFσfσ (ซึ่งไม่เป็นที่รู้จัก "พารามิเตอร์สร้างความรำคาญ") จากนั้น - ในกรณีที่ไม่มีการเซ็นเซอร์ - บันทึกความน่าจะเป็นของการสังเกต( x i , y i )คือσ(xi,yi)
Λ=∑i=1nlogfσ(yi−xiβ).
ด้วยการเซ็นเซอร์ในปัจจุบันเราอาจแบ่งกรณีออกเป็นสามคลาส (อาจว่างเปล่า): สำหรับดัชนีถึงn 1 , y iมีค่าเกณฑ์ที่ต่ำกว่าและเป็นตัวแทนของข้อมูลเซ็นเซอร์ด้านซ้าย ; สำหรับดัชนีฉัน= n 1 + 1เพื่อn 2ที่Y ฉันจะวัด; และสำหรับดัชนีที่เหลืออยู่y iมีค่าขีด จำกัด บนและแสดงการเซ็นเซอร์ที่ถูกต้องi=1n1yii=n1+1n2yiyiข้อมูล. โอกาสในการบันทึกจะได้รับในลักษณะเดียวกับก่อนหน้านี้: มันเป็นบันทึกของผลิตภัณฑ์ของความน่าจะเป็น
Λ=∑i=1n1logFσ(yi−xiβ)+∑i=n1+1n2logfσ(yi−xiβ)+∑i=n2+1nlog(1−Fσ(yi−xiβ)).
นี้เป็น maximized ตัวเลขเป็นหน้าที่ของ )(β,σ)
จากประสบการณ์ของฉันวิธีการดังกล่าวสามารถทำงานได้ดีเมื่อมีการเซ็นเซอร์ข้อมูลน้อยกว่าครึ่ง มิฉะนั้นผลลัพธ์อาจไม่เสถียร
นี่คือR
ตัวอย่างง่ายๆที่ใช้censReg
แพคเกจเพื่อแสดงให้เห็นว่า OLS และผลลัพธ์การเซ็นเซอร์สามารถแตกต่างกัน (มาก) แม้มีข้อมูลมากมาย มันทำซ้ำข้อมูลคุณภาพในคำถาม
library("censReg")
set.seed(17)
n.data <- 2960
coeff <- c(-0.001, 0.005)
sigma <- 0.005
x <- rnorm(n.data, 0.5)
y <- as.vector(coeff %*% rbind(rep(1, n.data), x) + rnorm(n.data, 0, sigma))
y.cen <- y
y.cen[y < 0] <- 0
y.cen[y > 0.01] <- 0.01
data = data.frame(list(x, y.cen))
สิ่งที่สำคัญในการแจ้งให้ทราบล่วงหน้าเป็นพารามิเตอร์ที่: ความจริงความลาดชันเป็นที่จริงตัดเป็น- 0.001และจริง SD ข้อผิดพลาดคือ0.0050.005−0.0010.005
ลองใช้ทั้งสองlm
และcensReg
เพื่อให้พอดีกับบรรทัด:
fit <- censReg(y.cen ~ x, data=data, left=0.0, right=0.01)
summary(fit)
ผลของการถดถอยเซ็นเซอร์นี้ได้รับจากการprint(fit)
เป็น
(Intercept) x sigma
-0.001028 0.004935 0.004856
สิ่งเหล่านี้ใกล้เคียงกับค่าที่ถูกต้องของ−0.0010.0050.005
fit.OLS <- lm(y.cen ~ x, data=data)
summary(fit.OLS)
พอดีกับ OLS ที่กำหนดโดยprint(fit.OLS)
เป็น
(Intercept) x
0.001996 0.002345
summary
0.002864
สำหรับการเปรียบเทียบขอ จำกัด การถดถอยให้กับข้อมูลเชิงปริมาณ:
fit.part <- lm(y[0 <= y & y <= 0.01] ~ x[0 <= y & y <= 0.01])
summary(fit.part)
(Intercept) x[0 <= y & y <= 0.01]
0.003240 0.001461
ยิ่งเลวร้ายลง!
ภาพไม่กี่ภาพสรุปสถานการณ์
lineplot <- function() {
abline(coef(fit)[1:2], col="Red", lwd=2)
abline(coef(fit.OLS), col="Blue", lty=2, lwd=2)
abline(coef(fit.part), col=rgb(.2, .6, .2), lty=3, lwd=2)
}
par(mfrow=c(1,4))
plot(x,y, pch=19, cex=0.5, col="Gray", main="Hypothetical Data")
lineplot()
plot(x,y.cen, pch=19, cex=0.5, col="Gray", main="Censored Data")
lineplot()
hist(y.cen, breaks=50, main="Censored Data")
hist(y[0 <= y & y <= 0.01], breaks=50, main="Quantified Data")
00.01
Y0.00320.0037