ข้อผิดพลาดมาตรฐานสำหรับการทำนายด้วยเชือกโดยใช้ R


60

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

ดังนั้นคำถามของฉันคือ: มีแพ็คเกจหรือรหัส R บางอย่างที่สามารถคำนวณข้อผิดพลาดมาตรฐานสำหรับการทำนาย LASSO ได้หรือไม่?


3
เพื่ออธิบายลักษณะพื้นฐานของคำถามนี้ (เนื่องจากมีการตีกลับไปมา b / t CV & SO) ฉันสงสัยว่าเราอาจแก้ไขชื่อ Rob หรือไม่ แล้วทำไม 'ดูเหมือนไม่มีแพ็คเกจสำหรับข้อผิดพลาดมาตรฐาน LASSO พวกเขายากที่จะคำนวณหรือไม่' หรืออะไรทำนองนั้นบางทีอาจมีการแก้ไขเล็กน้อยกับร่างกายเพื่อให้สอดคล้องกัน ฉันคิดว่ามันจะทำให้ชัดเจนยิ่งขึ้นในหัวข้อเกี่ยวกับประวัติย่อเพื่อให้ความกำกวมนี้ไม่เกิดขึ้น & เราไม่จำเป็นต้องกลับไป
gung - Reinstate Monica

3
ฉันสามารถตั้งคำถามเพิ่มเติมเกี่ยวกับวิธีการทางสถิติ แต่นั่นไม่ใช่สิ่งที่ฉันอยากรู้ ควรมีสถานที่สำหรับคำถามเกี่ยวกับ CV เกี่ยวกับซอฟต์แวร์ที่ใช้วิธีการที่กำหนด การอภิปรายเพิ่มเติมที่meta.stats.stackexchange.com/q/2007/159
Rob Hyndman

1
คุณสามารถทำได้อย่างง่ายดายในกรอบการทำงานแบบเบย์โดยใช้แพ็คเกจmonomvnดูคำตอบของฉันด้านล่าง
fabians

คำตอบ:


46

คยองและคณะ (2010), "การถดถอยแบบปรับโทษ, ข้อผิดพลาดมาตรฐาน, & Bayesian lassos", การวิเคราะห์แบบเบส์, 5 , 2 , แนะนำว่าอาจไม่มีความเห็นพ้องกันในวิธีการคำนวณข้อผิดพลาดมาตรฐานสำหรับการคาดการณ์แบบบ่วงบาศ Tibshirani ดูเหมือนจะเห็นด้วย (สไลด์ 43)ว่าข้อผิดพลาดมาตรฐานยังคงเป็นปัญหาที่ไม่ได้รับการแก้ไข


7
นั่นจะอธิบายว่าทำไมแพ็คเกจไม่ได้ใช้ข้อผิดพลาดมาตรฐาน
Rob Hyndman

20

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


เชื่อมโยงโดยไม่ต้องจ่ายเงินกับกระดาษที่คุณพูดถึง: statweb.stanford.edu/~tibs/ftp/covtest.pdf
mvherweg

13

คำตอบ Sandipan Karmakar บอกคุณว่าจะทำอย่างไรสิ่งนี้จะช่วยคุณในเรื่อง "อย่างไร":

> library(monomvn)
>
> ## following the lars diabetes example
> data(diabetes)
> str(diabetes)
'data.frame':   442 obs. of  3 variables:
 $ x : AsIs [1:442, 1:10] 0.038075.... -0.00188.... 0.085298.... -0.08906.... 0.005383.... ...
      ..- attr(*, "dimnames")=List of 2
      .. ..$ : NULL
  .. ..$ : chr  "age" "sex" "bmi" "map" ...

 $ y : num  151 75 141 206 135 97 138 63 110 310 ...

[ ... ]

> ## Bayesian Lasso regression
> reg_blas <- with(diabetes, blasso(x, y))
t=100, m=8
t=200, m=5
t=300, m=8
t=400, m=8
t=500, m=7
t=600, m=8
t=700, m=8
t=800, m=8
t=900, m=5
> 
> ## posterior mean beta (setting those with >50% mass at zero to exactly zero)
> (beta <- colMeans(reg_blas$beta) * (colMeans(reg_blas$beta != 0)  > 0.5))
      b.1       b.2       b.3       b.4       b.5       b.6       b.7       b.8 
   0.0000 -195.9795  532.7136  309.1673 -101.1288    0.0000 -196.4315    0.0000 
      b.9      b.10 
 505.4726    0.0000 
> 
> ## n x nsims matrix of realizations from the posterior predictive:
> post_pred_y <- with(reg_blas, X %*% t(beta))
> 
> ## predictions:
> y_pred <- rowMeans(post_pred_y)
> head(y_pred)
[1]  52.772443 -78.690610  24.234753   9.717777 -23.360369 -45.477199
> 
> ## sd of y:
> sd_y <- apply(post_pred_y, 1, sd)
> head(sd_y)
[1] 6.331673 6.756569 6.031290 5.236101 5.657265 6.150473
> 
> ## 90% credible intervals
> ci_y <- t(apply(post_pred_y, 1, quantile, probs=c(0.05, 0.95)))
> head(ci_y)
             5%       95%
[1,]  42.842535  62.56743
[2,] -88.877760 -68.47159
[3,]  14.933617  33.85679
[4,]   1.297094  18.01523
[5,] -32.709132 -14.13260
[6,] -55.533807 -35.77809

13

Bayesian LASSO เป็นทางเลือกเดียวสำหรับปัญหาการคำนวณข้อผิดพลาดมาตรฐาน ข้อผิดพลาดมาตรฐานจะถูกคำนวณโดยอัตโนมัติใน Bayesian LASSO ... คุณสามารถใช้ Bayesian LASSO ได้อย่างง่ายดายโดยใช้รูปแบบ Gibbs Sampling ...

Bayesian LASSO ต้องการการแจกแจงก่อนหน้าเพื่อกำหนดให้กับพารามิเตอร์ของโมเดล ในรูปแบบ LASSO เรามีฟังก์ชั่นวัตถุประสงค์กับเป็นพารามิเตอร์การทำให้เป็นมาตรฐาน ที่นี่เนื่องจากเรามีไม่ใช้สำหรับดังนั้นจึงจำเป็นต้องมีการแจกแจงก่อนประเภทพิเศษนี้ LAPLACE กระจายสเกลของการกระจายแบบปกติพร้อมการแจกแจงแบบเอ็กซ์โพเนนเชียลเป็นความหนาแน่นในการผสม ขึ้นอยู่กับ posteriors เงื่อนไขเต็มรูปแบบของแต่ละพารามิเตอร์จะต้องมีการอนุมาน||yXβ||22+λ||β||1λ1β

จากนั้นหนึ่งสามารถใช้การสุ่มตัวอย่างกิ๊บส์สำหรับการจำลองห่วงโซ่ ดู Park & Cassella (2008), "การคชกรรมเชือก" JASA , 103 , 482

มีข้อเสียสามประการของ LASSO ที่ใช้งานบ่อย:

  1. เราต้องเลือกโดยการตรวจสอบข้ามหรือวิธีการอื่นλ

  2. ข้อผิดพลาดมาตรฐานเป็นเรื่องยากในการคำนวณเป็น LARS และกลไกอื่น ๆ ผลิตประมาณการจุดเบต้า}β

  3. โครงสร้างลำดับชั้นของปัญหาในมือไม่สามารถเข้ารหัสได้โดยใช้แบบจำลองบ่อยซึ่งค่อนข้างง่ายในกรอบเบย์


11

เพื่อเพิ่มคำตอบข้างต้นปัญหาดูเหมือนว่าแม้จะมี bootstrap ไม่เพียงพอเนื่องจากการประเมินจากโมเดลการลงโทษนั้นมีอคติและการบูตสแตรปจะพูดเฉพาะกับความแปรปรวนเท่านั้นโดยไม่สนใจอคติของการประเมิน นี้จะสรุปอย่างในบทความสำหรับแพคเกจการลงโทษในหน้า 18

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


3
Bootstrapping สามารถประมาณและแก้ไขอคติได้แม้ว่าตัวอย่างจะต้องมีขนาดใหญ่พอสมควร
Glen_b

3

มีแพ็คเกจ selectiveInference ใน R, https://cran.r-project.org/web/packages/selectiveInference/index.htmlที่ให้ช่วงความเชื่อมั่นและค่า p สำหรับค่าสัมประสิทธิ์ของคุณที่ติดตั้งโดย LASSO ตามเอกสารต่อไปนี้ :

Stephen Reid, Jerome Friedman และ Rob Tibshirani (2014) การศึกษาการประมาณค่าความแปรปรวนของข้อผิดพลาดในการถดถอยแบบบ่วง arXiv: 1311.5274

PS: เพียงแค่รู้ว่านี้ผลิตประมาณการข้อผิดพลาดสำหรับพารามิเตอร์ของคุณไม่แน่ใจว่าสำหรับข้อผิดพลาดในการทำนายครั้งสุดท้ายของคุณถ้านั่นคือสิ่งที่คุณหลังจาก ... ฉันคิดว่าคุณสามารถใช้"ช่วงเวลาที่ทำนายประชากร"สำหรับว่าถ้าคุณชอบ (โดย resampling พารามิเตอร์ตามพอดีหลังจากการกระจายปกติหลายตัวแปร)

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