ความแตกต่างระหว่างการใช้การถดถอยริดจ์ใน R และ SAS


10

ผมได้อ่านคำอธิบายของการถดถอยสันในการประยุกต์ใช้เชิงเส้นสถิติรุ่นที่ 5 เอ็ดบทที่ 11. การถดถอยสันจะทำในข้อมูลไขมันในร่างกายที่มีอยู่ที่นี่

หนังสือเรียนตรงกับผลลัพธ์ใน SAS ซึ่งมีค่าสัมประสิทธิ์การแปลงกลับในรูปแบบที่เหมาะสมเป็น:

Y=7.3978+0.5553X1+0.3681X20.1917X3

สิ่งนี้แสดงให้เห็นจาก SAS เมื่อ:

proc reg data = ch7tab1a outest = temp outstb noprint;
  model y = x1-x3 / ridge = 0.02;
run;
quit;
proc print data = temp;
  where _ridge_ = 0.02 and y = -1;
  var y intercept x1 x2 x3;
run;
Obs     Y    Intercept       X1         X2         X3

 2     -1     -7.40343    0.55535    0.36814    -0.19163
 3     -1      0.00000    0.54633    0.37740    -0.13687

แต่ R ให้ค่าสัมประสิทธิ์ที่แตกต่างกันมาก:

data <- read.table("http://www.cst.cmich.edu/users/lee1c/spss/V16_materials/DataSets_v16/BodyFat-TxtFormat.txt", 
                   sep=" ", header=FALSE)
data <- data[,c(1,3,5,7)]
colnames(data)<-c("x1","x2","x3","y")
ridge<-lm.ridge(y ~ ., data, lambda=0.02)   
ridge$coef
coef(ridge)

>   ridge$coef
       x1        x2        x3 
10.126984 -4.682273 -3.527010 
>   coef(ridge)
                   x1         x2         x3 
42.2181995  2.0683914 -0.9177207 -0.9921824 
> 

ใครช่วยฉันเข้าใจว่าทำไม


ฉันใช้ชุดข้อมูลเดียวกันและวิเคราะห์ใน SPSS ผลลัพธ์จะคล้ายกับ SAS อย่างไรก็ตามถ้าเราสามารถทำให้ข้อมูลเป็นมาตรฐานในหนังสือได้ค่าแรกที่ c = 0 จะคล้ายกันใน R และ SPSS (ใช้การถดถอยเชิงเส้นหลายครั้ง) อย่างไรก็ตามผลลัพธ์จะค่อนข้างแตกต่างเมื่อเราเคลื่อนที่ต่อไปตามที่ระบุข้างต้น ฉันก็พบว่าไม่มีความแตกต่างระหว่างผลลัพธ์สำหรับข้อมูลเดียวกัน
asad

คำตอบ:


6

แม้ว่าการถดถอยของสันจะดูเป็นครั้งแรกเหมือนกับอัลกอริธึมธรรมดามารอยู่ในรายละเอียด ดูเหมือนว่าตัวแปรดั้งเดิมจะถูกปรับอัตราส่วนและพารามิเตอร์ไม่ใช่พารามิเตอร์ที่คุณคิดว่าเป็นคำอธิบายดั้งเดิม จากสิ่งที่ฉันรวบรวมอ่านการอ้างอิงที่ให้ไว้ในหน้าช่วยเหลือของ R ไม่มีวิธีที่ตกลงกันในการทำสันเขาถดถอย ดังนั้นความแตกต่างในผลลัพธ์สามารถอธิบายได้ด้วยอัลกอริธึมต่าง ๆ ที่ใช้โดย R และ SAS หวังว่าบางคนที่มีความรู้มากขึ้นสามารถให้คำตอบที่ละเอียดยิ่งขึ้นλlm.ridge

lm.ridgeคุณสามารถมองเห็นสิ่งที่ชนิดของขั้นตอนวิธีการถูกนำไปใช้ในการวิจัยโดยดูที่แหล่งที่มาของ เพียงพิมพ์lm.ridgeพรอมต์ R


ฉันพบว่าลิงก์นี้มีประโยชน์สำหรับการถอดรหัสว่า lm.ridge คำนวณค่าสัมประสิทธิ์ได้อย่างไร: mail-archive.com/r-help@r-project.org/msg81115.html แต่ก็ยังงงว่าผลลัพธ์ต่างจากข้อความที่ฉันอ้างอิงและ SAS อย่างไร เนื่องจากแต่ละอันควรจะกลับไปสู่ระดับเดิม
B_Miner

@ user2040 ตรวจสอบว่ามีการใช้ข้อมูลเดียวกันโดย SAS และ R หากเหมือนกันดังนั้นข้อสรุปเดียวคืออัลกอริทึมจะแตกต่างกัน หน้าความช่วยเหลือของ SAS พูดอะไร
mpiktas

@ user2040 ฉันได้จำลองการถดถอยแบบสันสันบน R ด้วยข้อมูลของคุณ ดังนั้นเรารู้แน่นอนว่าอัลกอริทึมนั้นแตกต่างกัน
mpiktas

1
คุณเพิ่งชนะฉันไปที่! :) ฉันกำลังดูหน้าช่วยเหลือของ SAS ที่คุณอ้างอิง ฉันเปรียบเทียบ RMSE (ข้อมูลในตัวอย่างเท่านั้นไม่ได้ตรวจสอบกับ CV หรือ bootstrap) และผลลัพธ์ R นั้นเหนือกว่าดังนั้นคุณคิดว่าการถดถอยของสันเหมาะที่สุดสำหรับการทำนายและไม่ตีความค่าสัมประสิทธิ์ (เนื่องจากผลลัพธ์สามารถ แตกต่างกันอย่างไรโดยอัลกอริธึม)? ฉันรู้แล้วว่าทฤษฎีโมเดลเชิงเส้นปกติ (CI's, contrasts ฯลฯ ) นั้นมีไว้สำหรับการถดถอยแบบสันเขา (bootstrapping ใกล้เข้ามามากขึ้น
B_Miner

0

การใช้ lm.ridge ยังสร้างเวกเตอร์ที่ปรับขนาด (ลองใช้หัว (รุ่น) เพื่อดูเอาต์พุตทั้งหมด) ในการรับค่าที่ทำนายไว้ใน R ที่คุณเห็นใน SAS ใช้ค่าสัมประสิทธิ์และหารด้วยเวกเตอร์สเกลาร์


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