NOSTFS ให้การใช้งานการเลือกไปข้างหน้าตามการถดถอยเชิงเส้นและโลจิสติกซึ่งใช้การตรวจสอบข้ามเป็นองค์ประกอบหลักของขั้นตอนการเลือก
การเลือกไปข้างหน้าเป็นวิธีที่ช้าโดยเนื้อแท้สำหรับแต่ละตัวแปรจะต้องติดตั้งโมเดล ในการดำเนินการของเราปัญหานี้จะทำให้รุนแรงขึ้นโดยความจริงที่ว่าการตรวจสอบข้ามภายในเกิดขึ้นในการทำซ้ำแต่ละครั้งโดยมีจุดประสงค์เพื่อชี้แนะการเลือกไปสู่ตัวแปรที่มีคุณสมบัติทั่วไปที่ดีกว่า
รหัสจะถูกขนานกับรอยพับด้านในด้วยแพ็คเกจ ขนาน เวลาของผู้ใช้จึงขึ้นอยู่กับจำนวนคอร์ที่มีอยู่ แต่ไม่มีข้อได้เปรียบในการใช้คอร์มากกว่าการพับภายใน จำนวนคอร์ที่กำหนดให้กับการคำนวณจะต้องลงทะเบียนก่อนเริ่มต้นด้วยการตั้งค่าตัวเลือก "MCORES"
ข้อได้เปรียบหลักของการเลือกไปข้างหน้าคือมันให้แบบจำลองที่ตีความได้ทันทีและแผงของตัวแปรที่ได้รับในบางแง่มุมที่ซ้ำซ้อนน้อยที่สุดโดยเฉพาะอย่างยิ่งหากจำนวนตัวแปรที่จะเลือกนั้นไม่ใหญ่เกินไป ประมาณ 30-40 ตัวแปร)
อย่างไรก็ตามเมื่อจำนวนตัวแปรมีขนาดใหญ่กว่านั้นการเลือกไปข้างหน้านอกเหนือจากการช้าอย่างไม่อาจทนได้
แพ็คเกจคอมไพล์ precompiled มีอยู่ใน CRAN
โหลดแพ็คเกจแรกและลงทะเบียนจำนวนแกนที่จะใช้โดยการตั้งค่าตัวเลือก mc.cores
หากคุณโชคดีพอที่จะทำงานบนเครื่องหลายตัวขนาดใหญ่ประสิทธิภาพที่ดีที่สุดทำได้โดยการลงทะเบียนแกนมากเท่าที่ใช้ในการพับภายใน (ค่าเริ่มต้นคือ 30)
library( nestfs )
options( mc.cores = 10 )
ในการเรียกใช้การเลือกไปข้างหน้าจากโมเดลพื้นฐานที่มีอายุและเพศเท่านั้นต่อไปนี้ก็เพียงพอแล้ว:
data( diabetes )
fs.res <- fs( Y ~ age + sex , diabetes , family = gaussian())
summary( fs.res )
# # vars fdr llks diffs iter
# # 1 age NA NA NA NA
# # 2 sex NA -2136.854 NA NA
# # 3 ltg 7.008928e-10 -2058.831 78.022766 1
# # 4 bmi 1.850715e-05 -2009.568 49.263387 2
# # 5 map 2.020038e-03 -1999.253 10.314799 3
# # 6 age.sex 1.508210e-02 -1992.544 6.709064 4
# # 7 hdl 4.039276e-02 -1985.208 7.336623 5
# # 8 bmi.map 7.474167e-02 -1980.913 4.294736 6
โดยค่าเริ่มต้นการเลือกจะเกิดขึ้นกับตัวแปรทั้งหมดที่มีอยู่ใน data.frame ที่ไม่ได้เป็นส่วนหนึ่งของโมเดลเริ่มต้น สิ่งนี้สามารถควบคุมได้ผ่านตัวเลือก choose.from
ซึ่งยอมรับชื่อหรือดัชนีตัวแปร
เป็นไปได้ที่จะส่งเสริมการเลือก sparser โดยการขอการปรับปรุงที่มากขึ้นในการบันทึกความน่าจะเป็น (ตัวเลือก min.llk.diff
): แนะนำโดยเฉพาะอย่างยิ่งเมื่อจำนวนตัวแปรให้เลือกเกิน 10-15 เนื่องจากเป็นประสบการณ์ของเราที่แม้แต่ค่าเริ่มต้น การตั้งค่า 2 (เข้มงวดกว่าสิ่งที่นำมาใช้โดยแพ็คเกจอื่น ๆ ) อาจนำไปสู่การ overfitting ไม่ว่าในกรณีใดก็เป็นไปได้ที่จะตั้งค่าขนาดสูงสุดของแผงที่เลือกโดยการลดจำนวนการวนซ้ำ (ตัวเลือก max.iters
โดยเริ่มต้นตั้งค่าเป็น 10)
การเลือกไปข้างหน้าแบบซ้อนกันมีประโยชน์ในการประเมินความเสถียรของกระบวนการคัดเลือกโดยการดำเนินการในการฝึกอบรมแต่ละครั้งของการตรวจสอบข้ามการตรวจสอบความถูกต้อง:
folds <- create.folds( 10 , nrow( diabetes ), seed = 1 )
nest.res <- nested.fs( Y ~ age + sex , diabetes , family = gaussian(), folds = folds )
summary( nest.res )
# # vars percent coef coefIQR rank rankIQR diffLogLik diffLogLikIQR
# # 1 bmi 100 24.547 (23.61, 25.48) 2 (1.00, 2.00) 61.021 (44.49, 76.85)
# # 2 ltg 100 23.729 (22.39, 24.41) 2 (1.00, 2.00) 52.868 (36.09, 69.36)
# # 3 map 100 15.147 (14.45, 15.88) 3 (3.00, 3.75) 8.366 (8.04, 9.61)
# # 4 hdl 100 -13.297 (-13.65, -12.55) 4 (4.00, 4.00) 6.728 (6.35, 7.83)
# # 5 age.sex 80 8.825 (8.72, 9.24) 5 (5.00, 6.00) 4.625 (4.45, 5.37)
# # 6 bmi.map 70 8.165 (7.55, 8.27) 6 (5.50, 7.00) 3.604 (2.66, 4.15)
# # 7 bmi.glu 20 4.460 (4.07, 4.85) 5 (5.00, 5.00) 3.535 (3.09, 3.98)
# # 8 glu.2 20 6.477 (6.47, 6.49) 6 (6.25, 6.75) 2.984 (2.56, 3.41)
# # 9 sex.map 20 6.862 (6.71, 7.01) 6 (5.25, 5.75) 2.936 (2.89, 2.98)
# # 10 age.glu 10 7.469 (7.47, 7.47) 3 (3.00, 3.00) 4.826 (4.83, 4.83)
# # 11 age.map 10 7.365 (7.36, 7.36) 6 (6.00, 6.00) 2.679 (2.68, 2.68)
# # 12 bmi.2 10 7.987 (7.99, 7.99) 6 (6.00, 6.00) 2.466 (2.47, 2.47)
ผลลัพธ์ด้านบนแสดงให้เห็นว่า bmi
, ltg
, map
และ hdl
ถูกเลือกในทุกเท่าและการปรับปรุงส่วนใหญ่ในตัวแปรสองตัวแรกซึ่งเห็นด้วยกับสิ่งที่พบเมื่อเรียกใช้การเลือกไปข้างหน้าข้อมูลทั้งหมด
สิ่งสำคัญที่สุดคือการเลือกไปข้างหน้าแบบซ้อนกันทำให้เกิดการวัดประสิทธิภาพของกระบวนการคัดเลือกซึ่งเป็นการประมาณการที่ไม่เอนเอียงของประสิทธิภาพการทำนายของแผงที่เลือกไว้ในข้อมูลที่ถอนออก:
nested.performance( nest.res )
# # Correlation coefficient: 0.7097
ซึ่งสามารถนำมาเปรียบเทียบกับสิ่งที่ได้จากโมเดลพื้นฐานในชุดการตรวจสอบข้ามการตรวจสอบความถูกต้อง:
base.res <- nested.glm( Y ~ age + sex , diabetes , family = gaussian(), folds = folds )
nested.performance( base.res )
# # Correlation coefficient: 0.1551
M. Colombo, HC Looker, B. Farran et al., โมเลกุลการบาดเจ็บของไตในเลือด 1 และ beta-2-microglobulin ดำเนินการเช่นเดียวกับแผงขนาดใหญ่สำหรับการทำนายการลดลงอย่างรวดเร็วของการทำงานของไตในเบาหวานชนิดที่ 2, Diabetologia (2019) 62 ( 1): 156-168 https://doi.org/10.1007/S00125-018-4741-9
HC Looker, M. Colombo, S. Hess et al., Biomarkers ของโรคไตเรื้อรังอย่างรวดเร็วในโรคเบาหวานประเภท 2, Kidney International (2015), 88 (4): 888-896 https://doi.org/10.1038/ki.2015.199
HC Looker, M. Colombo, F. Agakov et al., โปรตีน biomarkers สำหรับการทำนายโรคหัวใจและหลอดเลือดในโรคเบาหวานประเภท 2, diabetologia (2015) 58 (6): 1363-1371 https://doi.org/10.1007/S00125-015-3535-6