มีสถานการณ์ใดบ้างที่ควรใช้การถดถอยแบบขั้นตอน?


13

การถดถอยแบบขั้นตอนได้รับการใช้มากเกินไปในเอกสารชีวการแพทย์จำนวนมากในอดีต แต่สิ่งนี้ดูเหมือนว่าจะดีขึ้นด้วยการศึกษาที่ดีขึ้นของปัญหามากมาย ผู้ตรวจสอบรุ่นเก่าหลายคนยังคงขอมัน สถานการณ์ใดที่การถดถอยแบบขั้นตอนมีบทบาทและควรใช้ถ้ามี


6
ฉันมักจะใช้มันเมื่อสอนชั้นเรียนเพื่อแสดงความคิดเห็นที่ไม่ควรใช้
gung - Reinstate Monica

1
(+1) ขอบคุณ @gung ฉันไม่ใช่นักสถิติและพบว่ามันยากที่จะปกป้องสิ่งนี้แม้ว่าฉันจะรู้ว่ามันถูกต้อง ฉันพบว่ามันยากเป็นพิเศษเพราะ 1) โพสต์ที่ดีมากและโพสต์ที่ยกมาบ่อยครั้งนี้ไม่ได้ลงรายละเอียดที่น่าเชื่อถือมากนักและ .... (ctd)
bobmcpop

2
(ctd) และ 2) นักวิจารณ์ของ stepwise มักจะทำเช่นนั้นเพื่อเลือกจากตัวแปรจำนวนมากหรือ data-mining ในโลกชีวการแพทย์การคำนวณขนาดตัวอย่างมักคำนึงถึงจำนวนโควาเรียต์ที่คาดหวังดังนั้นแบบจำลองเต็มรูปแบบจึงไม่เคยมีขนาดใหญ่พอที่จะเริ่มต้นและแต่ละวาร์มีเหตุผลทางชีววิทยาก่อนหน้านี้บ้างแล้ว คุณรู้สึกว่าไม่ควรใช้แบบขั้นตอนอย่างเท่าเทียมกันในสถานการณ์เหล่านี้?
bobmcpop

3
ฉันให้คำปรึกษาทางสถิติสำหรับการวิจัยทางชีวการแพทย์ ฉันไม่ได้ใช้ขั้นตอน ฉันไม่ได้มีหลายคนถาม (พวกเขาอาจคิดว่าฉันจะใช้มันถ้ามันจะช่วยโครงการของพวกเขา) แต่เมื่อมีคนถามฉันบอกพวกเขาว่ามันไม่ถูกต้อง & พูดถึงสาเหตุ
gung - Reinstate Monica

คำตอบ:


11

ฉันไม่ได้ตระหนักถึงสถานการณ์ซึ่งการถดถอยแบบขั้นตอนจะเป็นวิธีที่ต้องการ มันอาจจะไม่เป็นไร (โดยเฉพาะอย่างยิ่งในรุ่นขั้นตอนลงมันเริ่มต้นจากรุ่นเต็ม) กับ bootstrapping ของกระบวนการขั้นตอนทั้งหมดในชุดข้อมูลขนาดใหญ่มากกับพี ที่นี่คือจำนวนการสังเกตในผลอย่างต่อเนื่อง (หรือจำนวนของบันทึกที่มีเหตุการณ์ในการวิเคราะห์การอยู่รอด)คือจำนวนของตัวทำนายผู้สมัครรวมทั้งการพิจารณาการโต้ตอบทั้งหมด - เช่นเมื่อเอฟเฟกต์แม้แต่น้อยกลายเป็นชัดเจนมาก คุณสร้างแบบจำลองของคุณมากแค่ไหน (นั่นหมายความว่าจะมีขนาดใหญ่กว่ามากกว่ามากโดยมากกว่าปัจจัยที่ยกมาในบางครั้งที่ 20)n P n Pn>>pnpnp

แน่นอนว่าเหตุผลที่คนส่วนใหญ่ถูกล่อลวงให้ทำบางสิ่งเช่นการถดถอยแบบขั้นตอนคือ

  1. เพราะมันไม่ได้คำนวณอย่างเข้มข้น (ถ้าคุณไม่ได้ทำ bootstrapping ที่เหมาะสม แต่ผลลัพธ์ของคุณนั้นไม่น่าเชื่อถือ)
  2. เพราะมันแสดงให้เห็นชัดเจน "อยู่ในรูปแบบ" กับ "ไม่ได้อยู่ในแบบจำลอง" (ซึ่งไม่น่าเชื่อถือมากในการถดถอยแบบขั้นตอนมาตรฐาน; สิ่งที่เหมาะสม bootstrapping มักจะทำให้ชัดเจนเพื่อที่ว่างบเหล่านี้มักจะไม่ชัดเจน) และ
  3. เพราะบ่อยครั้งที่มีขนาดเล็กลงใกล้หรือใหญ่กว่าเล็กน้อยหน้าnp

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


3
(+1) นอกจากนี้วิธีการแบบขั้นตอนและที่เกี่ยวข้องอาจเหมาะสมสำหรับแบบจำลองการทำนายในสถานการณ์แบบเข็มในกองหญ้าแห้งเมื่อค่าสัมประสิทธิ์จำนวนมากน้อยมากและมีค่าน้อยมากเมื่อเทียบกับความแปรปรวนของข้อผิดพลาด ดูตัวอย่างที่ 3 จากTibshirani (1996), การย่อและการเลือกการถดถอยผ่าน Lasso , JRSS B , 58 , 1 - แม้ว่าที่นี่จะไม่ใช่ garotte ที่ไม่ชนะก็ตาม
Scortchi - Reinstate Monica

3
ฉันไม่เข้าใจย่อหน้าที่ผ่านมาค่อนข้างมาก บางทีมันอาจจะใช้ถ้อยคำใหม่? นอกจากนี้ประมาณ 3: ฉันไม่เห็นการโต้เถียงโดยตรงบางทีอาจมีบางสิ่งบางอย่างที่จะอนุมานได้ง่าย
Richard Hardy

1
เพื่อชี้แจงย่อหน้าสุดท้ายและ (3): ผู้คนใช้แบบขั้นตอนเนื่องจาก (3) (เช่นเพื่อหลีกเลี่ยงสถานการณ์ที่การติดตั้งแบบเต็มรูปแบบยากหรือนำไปสู่ ) แต่นั่นเป็นวิธีที่แย่มาก . พวกเขาใช้มันเพราะมันไม่ได้คำนวณอย่างเข้มข้น แต่เพื่อให้ได้สิ่งที่มีประโยชน์ออกมาคุณต้องทำ bootstrapping อย่างกว้างขวาง (ดังนั้นมันจึงไม่ได้เปรียบเหมือนกัน) และพวกเขาใช้มันเพราะมันดูเหมือนจะให้การตีความที่ชัดเจน แต่ถ้าทำอย่างถูกต้องที่ไม่ชัดเจนและคุณเห็นว่ามีความไม่แน่นอนของแบบจำลองมากแค่ไหน (การตีความที่ชัดเจน = ภาพลวงตา) pn
Björn

11

สองกรณีที่ฉันจะไม่คัดค้านการเห็นการถดถอยขั้นตอนคือ

  1. การวิเคราะห์ข้อมูลเชิงสำรวจ
  2. แบบจำลองการทำนาย

ในทั้งสองกรณีการใช้งานที่สำคัญมากคุณไม่กังวลเกี่ยวกับการอนุมานเชิงสถิติแบบดั้งเดิมดังนั้นข้อเท็จจริงที่ว่าค่า p และอื่น ๆ ไม่ถูกต้องอีกต่อไปมีความกังวลเล็กน้อย

ตัวอย่างเช่นหากรายงานการวิจัยกล่าวว่า "ในการศึกษานำร่องของเราเราใช้การถดถอยแบบขั้นตอนเพื่อค้นหา 3 ตัวแปรที่น่าสนใจจาก 1,000 ในการศึกษาติดตามด้วยข้อมูลใหม่เราพบว่าตัวแปรที่น่าสนใจทั้งสามนี้มีความสัมพันธ์อย่างมากกับ ผลลัพธ์ที่น่าสนใจ "ฉันจะไม่มีปัญหากับการใช้การถดถอยแบบชาญฉลาด ในทำนองเดียวกัน "เราใช้การถดถอยแบบชาญฉลาดเพื่อสร้างแบบจำลองการทำนายโมเดล X ทางเลือกที่ไม่อยู่ในรูปแบบ X ในชุดข้อมูลที่เราจัดไว้สำหรับ MSE นั้นดีมากเช่นกัน

เพื่อความชัดเจนฉันไม่ได้บอกว่าการถดถอยแบบชาญฉลาดเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหาเหล่านี้ แต่มันง่ายและอาจให้ทางออกที่น่าพอใจแก่คุณ

แก้ไข:

ในความคิดเห็นมีคำถามว่า AIC แบบขั้นตอนสามารถเป็นประโยชน์สำหรับการทำนายได้จริงหรือไม่ นี่คือการจำลองที่แสดงว่ามันทำได้ดีกว่าการถดถอยเชิงเส้นกับ covariates ทั้งหมดและเกือบรวมถึงอวนยืดหยุนด้วยการลงโทษที่เลือกโดยการตรวจสอบข้าม

ฉันจะไม่จำลองสถานการณ์นี้ในตอนท้ายของการอภิปราย มันไม่ยากเกินไปที่จะคิดสถานการณ์ที่ AIC แบบขั้นตอนจะแย่กว่านั้น แต่มันไม่ใช่สถานการณ์ที่ไร้เหตุผลจริงๆและประเภทของสถานการณ์ที่มุ้งยืดหยุ่นได้รับการออกแบบมาสำหรับ (ความสัมพันธ์ของ covariates ที่มีเอฟเฟกต์ใหญ่น้อยมาก)!

library(leaps)
library(glmnet)
nRows <- 1000
nCols <- 500

# Seed set For reproducibility. 
# Try changing for investigation of reliability of results
set.seed(1)

# Creating heavily correlated covariates
x_firstHalf  <- matrix(rnorm(nRows * nCols / 2), nrow = nRows)
x_secondHalf <- x_firstHalf + 0.5 * 
                matrix(rnorm(nRows * nCols / 2), nrow = nRows) 
x_mat        <- cbind(x_firstHalf, x_secondHalf) + rnorm(nRows)

# Creating beta's. Most will be of very small magnitude
p_large = 0.01
betas <- rnorm(nCols, sd = 0.01) + 
         rnorm(nCols, sd = 4) * rbinom(nCols, size = 1, prob = p_large)
y     <- x_mat %*% betas + rnorm(nRows, sd = 4)

all_data           <- data.frame(y, x_mat)
colnames(all_data) <- c('y', paste('x', 1:nCols, sep = '_'))

# Holding out 25% of data for validation
holdout_index <- 1:(nRows * .25) 
train_data    <- all_data[-holdout_index, ]
validate_data <- all_data[holdout_index, ]

mean_fit <- lm(y ~ 0, data = train_data)
full_fit <- lm(y ~ ., data = train_data)
step_fit <- step(mean_fit, 
                 scope = list(lower = mean_fit, upper = full_fit), 
                 direction = "forward", steps = 20, trace = 0)

glmnet_cvRes <- cv.glmnet(x = as.matrix(train_data[,-1]), 
                          y = as.numeric(train_data$y)   )

full_pred   <- predict(full_fit, validate_data)
step_pred   <- predict(step_fit, validate_data)
glmnet_pred <- predict(glmnet_cvRes, as.matrix(validate_data[,-1]), s='lambda.min')

sd(full_pred - validate_data$y)    # [1] 6.426117
sd(step_pred - validate_data$y)    # [1] 4.233672
sd(glmnet_pred - validate_data$y)  # [1] 4.127171
# Note that stepwise AIC does considerably better than using all covariates 
# in linear regression, and not that much worse than penalized methods
# with cross validation!!

หมายเหตุด้านข้าง:

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


2
สถานการณ์อื่น ๆ ที่ใช้กันทั่วไปใน (ในวรรณกรรมชีวการแพทย์) ยกเว้นสิ่งบ่งชี้ทั้งสองคืออะไร ผมเคยเจอเพียงการใช้งานสำหรับรูปแบบการพยากรณ์ แต่ก็ไม่ทราบเช่น
bobmcpop

5
@bmmcpop: ปัญหาใหญ่คือการใช้ค่า p, ช่วงความเชื่อมั่นหลังจากการถดถอยแบบขั้นตอนตามที่ระบุไว้ในกระดาษที่คุณอ้างถึง แบบจำลองที่ใช้เพื่อการคาดการณ์เท่านั้น (ไม่ใช่แค่ตัวแบบที่มีตัวทำนาย) โดยทั่วไปจะไม่สนใจเกี่ยวกับค่า p แต่จะลดความผิดพลาดนอกตัวอย่างมากเพียงใด
หน้าผา AB

1
@ Björn: อย่างที่ฉันพูดในตอนท้ายฉันไม่คิดว่ามันเป็นวิธีที่ดีที่สุดในการทำเช่นนั้นโดยคนอื่น ๆ แต่มันไม่ถูกต้องและคุณอาจได้ผลลัพธ์ที่สมเหตุสมผล ดังนั้นความแข็งแรงจึงเป็นวิธีที่ง่ายต่อการใช้งาน: หากคุณมีแบบจำลองที่ใช้ covariates และส่งกลับความเป็นไปได้คุณสามารถทำ AIC ขั้นตอนได้ คุณสามารถทำได้ดีกว่ากับ LASSO ... แต่คุณอาจไม่ได้ถ้าเป็นรุ่นใหม่แฟนซีหรือคุณใช้ Excel
หน้าผา AB

4
(+1) ฉันต้องบอกว่า glmnet ได้รับการออกแบบมาเพื่อใช้ในสถานการณ์เช่นนี้ท่ามกลางความก้าวหน้าของมัน (ซึ่งดูเหมือนจะเป็น) ในขณะที่วิธีการเลือกตัวทำนายโดยไม่หดตัวนั้นปรับให้เหมาะสมโดยเฉพาะ อาจจะน่าสนใจที่จะเปรียบเทียบวิธีการเมื่อมี "เอฟเฟ็กต์เรียว" แทนที่จะเป็นของเล็ก ๆ น้อย ๆ ที่มีขนาดใหญ่และเล็กมาก
Scortchi - Reinstate Monica

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