การลดจำนวนตัวแปรในการถดถอยหลายครั้ง


9

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

ความคิด (อาจไร้เดียงสา) บางอย่างเกี่ยวกับวิธีการทำเช่นนี้:

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

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

มีวิธีการมาตรฐานในการจัดการกับปัญหานี้ในการลดจำนวนตัวแปรในการถดถอยหลายครั้งหรือไม่?

ดูเหมือนว่านี่จะเป็นปัญหาที่พบได้บ่อยพอที่จะมีวิธีการมาตรฐาน

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

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


1
ไมค์คุณอาจเรียกดูบทที่ 3 ของESLหากคุณไม่คุ้นเคย หน้าเว็บที่ลิงค์นั้นให้คะแนนเป็นข้อความ PDF ที่ถูกกฎหมายฟรี
พระคาร์ดินัล

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

3
การตอบกลับนี้ให้ตัวอย่างที่เป็นรูปธรรมของหนึ่งในปัญหา (มาก) กับวิธีที่ 1 ความคิดเห็นโดย @ cardinal ถึงการตอบกลับของ Frank Harrell จะได้รับการแก้ไขปัญหาด้วยวิธีที่ 2: ทุกสิ่งที่คุณทำกับตัวแปรอิสระเพียงอย่างเดียว ความสัมพันธ์กับตัวแปรตามความเสี่ยงที่ไม่เกี่ยวข้องหรือแย่กว่านั้น เท่าที่คำตอบมาตรฐานหรือ "บัญญัติ" ไปถามหนึ่งที่นี่เป็นบิตเช่นการขอคำปรึกษาของวิธีการทั้งหมดเพื่อค้นหาจุดที่มีเหตุผลเกี่ยวกับเส้นโค้งรูปไข่ด้วยข้อดีและข้อเสียของพวกเขา :-)
whuber

2
ตามที่บันทึกไว้โดยผู้อื่นที่นี่วิธีที่ 1 จะนำไปสู่ปัญหา สำหรับการรักษาที่เข้าใจได้ง่ายว่าทำไมมันถึงเป็นความจริง / คำอธิบายของปัญหาอื่นด้วยวิธีนี้คุณอาจต้องการอ่านสิ่งนี้: stats.stackexchange.com/questions/20836/…
gung - Reinstate Monica

1
ขอบคุณ whuber และ gung สำหรับคำอธิบายปัญหาด้วยแนวคิดแรก
Mike Spivey

คำตอบ:


1

ปัญหานี้มักจะเรียกว่าการเลือกย่อยและมีวิธีการที่แตกต่างกันค่อนข้างน้อย ดู Google Scholar สำหรับภาพรวมมากกว่าบทความที่เกี่ยวข้อง


ขอบคุณ. การรู้ชื่อของปัญหาค่อนข้างมีประโยชน์!
Mike Spivey

6

วิธีที่ 1 ไม่ทำงาน วิธีที่ 2 มีความหวังขึ้นอยู่กับว่าคุณทำมันอย่างไร เป็นการดีกว่าที่จะป้อนส่วนประกอบหลักตามลำดับความแปรปรวนจากมากไปน้อย วิธีที่ตีความได้มากกว่าคือการทำกลุ่มตัวแปรจากนั้นลดแต่ละคลัสเตอร์ให้เป็นคะแนนเดียว (ไม่ใช้ Y) จากนั้นปรับโมเดลให้เหมาะสมกับคะแนนคลัสเตอร์


+1 โดย "การจัดกลุ่มตัวแปร" คุณหมายถึงการวิเคราะห์ปัจจัยซึ่งเป็นกลยุทธ์ที่ฉันอาจใช้ (เช่นก่อนที่จะดู y) ฉันคิดว่าการวิเคราะห์กลุ่มเป็นข้อสังเกตการจัดกลุ่มมากกว่าตัวแปร แต่ฉันมีความรู้เพียงผิวเผินในการวิเคราะห์กลุ่ม
gung - Reinstate Monica

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

1
นอกจากนี้ดูเหมือนว่า OP จะไม่ได้อธิบายการถดถอยของส่วนประกอบหลักในวิธีที่ 2 ของเขา
cardinal

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

1
การจัดกลุ่มตัวแปรเกี่ยวข้องกับการวิเคราะห์ปัจจัย แต่ง่ายกว่า ตัวแปรจะถูกจัดกลุ่มตามความสัมพันธ์ซึ่งกันและกัน ดูvarclusฟังก์ชันในHmiscแพ็คเกจR หรือ PROC VARCLUS ใน SAS การลดข้อมูลสามารถช่วยในการตั้งค่าตัวแปรหากคุณใช้ความระมัดระวัง คุณสามารถลบทั้งคลัสเตอร์ได้P- ค่าคือ 0.3 ด้วยองค์ประกอบหลักมีเทคนิคต่าง ๆ เช่นการลดแบตเตอรี่ที่คุณประมาณพีซีด้วยชุดย่อยของตัวแปรส่วนประกอบ
Frank Harrell

3

ในบทที่ 5 ของ Data Mining with R ผู้เขียนได้แสดงวิธีเลือกตัวทำนายที่มีประโยชน์มากที่สุด (ในบริบทของชีวสารสนเทศศาสตร์ซึ่งตัวอย่างแต่ละแถวมี 12,000+ คอลัมน์!)

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

จากนั้นเขาจะแสดงวิธีใช้ฟอเรสต์แบบสุ่มเพื่อค้นหาสิ่งที่เป็นตัวทำนายที่มีประโยชน์ที่สุด นี่คือตัวอย่างนามธรรมที่มีอยู่ในตัวเอง คุณจะเห็นว่าฉันมีตัวทำนายที่ดี 5 คนและคนเลว 5 คน รหัสแสดงวิธีการรักษา 3 อย่างดีที่สุด

set.seed(99)

d=data.frame(
  y=c(1:20),
  x1=log(c(1:20)),
  x2=sample(1:100,20),
  x3=c(1:20)*c(11:30),
  x4=runif(20),
  x5=-c(1:20),
  x6=rnorm(20),
  x7=c(1:20),
  x8=rnorm(20,mean=100,sd=20),
  x9=jitter(c(1:20)),
  x10=jitter(rep(3.14,20))
  )

library(randomForest)
rf=randomForest(y~.,d,importance=T)
print(importance(rf))
#         %IncMSE IncNodePurity
# x1  12.19922383    130.094641
# x2  -1.90923082      6.455262
# ...

i=importance(rf)
best3=rownames(i)[order(i[,"%IncMSE"],decreasing=T)[1:3]]
print(best3)
#[1] "x1" "x5" "x9"

reduced_dataset=d[,c(best3,'y')]

วิธีการสุดท้ายของผู้เขียนใช้อัลกอริธึมการจัดกลุ่มแบบลำดับชั้นเพื่อจัดกลุ่มตัวทำนายที่คล้ายกันเป็น 30 กลุ่ม หากคุณต้องการผู้ทำนายที่หลากหลาย 30 คนจากนั้นเลือกหนึ่งกลุ่มจาก 30 กลุ่มดังกล่าวโดยการสุ่ม

นี่คือโค้ดบางส่วนที่ใช้ข้อมูลตัวอย่างเดียวกันกับข้างบนเพื่อเลือก 3 จาก 10 คอลัมน์:

library(Hmisc)
d_without_answer=d[,names(d)!='y']
vc=varclus(as.matrix(d_without_answer))
print(cutree(vc$hclust,3))
# x1  x2  x3  x4  x5  x6  x7  x8  x9 x10 
#  1   2   1   3   1   1   1   2   1   3 

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


2

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


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