ผลรวมจากแบบจำลองเชิงเส้นวิ่ง R


16

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

ตัวอย่างรหัส & รุ่น:

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)

lm1 <- lm(weight ~ group)
lm2 <- lm(weight ~ group - 1)
lm3 <- lm(log(weight) ~ group - 1)

#Draw comparisions between models 1 - 3?

models <- list(lm1, lm2, lm3)

lapply(models, summary)

5
ฟังดูคล้ายกับข้อมูลที่ขุดลอกมาให้ฉัน ไม่ควรให้ความสำคัญกับสิ่งที่คุณคิดว่าเป็นแบบอย่างที่เหมาะสมสิ่งที่แปรปรวนร่วมการแปลง ฯลฯก่อนที่คุณจะเริ่มทำแบบจำลอง R ไม่รู้ว่าคุณทำแบบนั้นทั้งหมดเพื่อหาแบบจำลองที่ดี
Reinstate Monica - G. Simpson

3
@ กาวิน - ฉันสามารถเห็นสิ่งนี้ได้รับการปิดหัวข้ออย่างน่ากลัวอย่างรวดเร็ว แต่คำตอบสั้น ๆ คือไม่ฉันไม่ได้สนับสนุนการขุดลอกข้อมูลหรือค้นหาความสัมพันธ์ปลอมระหว่างตัวแปรสุ่มในชุดข้อมูล พิจารณาโมเดลการถดถอยที่รวมถึงรายได้ มันไม่สมเหตุสมผลที่จะทดสอบการเปลี่ยนแปลงรายได้เพื่อดูผลกระทบที่มีต่อโมเดล บันทึกรายได้บันทึกรายรับ 10 ดอลลาร์ดอลลาร์บันทึกรายได้ 100s ... ? แม้ว่านี่จะเป็นการขุดลอกข้อมูลซึ่งเป็นเครื่องมือ / ฟังก์ชั่นสรุปที่สามารถรวมเอาท์พุทจากการรันหลาย ๆ แบบจะยังคงมีประโยชน์มากใช่ไหม?
ไล่

คำตอบ:


17

วางแผนพวกเขา!

http://svn.cluelessresearch.com/tables2graphs/longley.png

หรือถ้าคุณต้องใช้ตาราง: แพ็คเกจapsrtableหรือmtableฟังก์ชั่นในแพ็คเกจmemisc

การใช้ mtable

 mtable123 <- mtable("Model 1"=lm1,"Model 2"=lm2,"Model 3"=lm3,
     summary.stats=c("sigma","R-squared","F","p","N"))

> mtable123

Calls:
Model 1: lm(formula = weight ~ group)
Model 2: lm(formula = weight ~ group - 1)
Model 3: lm(formula = log(weight) ~ group - 1)

=============================================
                 Model 1   Model 2   Model 3 
---------------------------------------------
(Intercept)      5.032***                    
                (0.220)                      
group: Trt/Ctl  -0.371                       
                (0.311)                      
group: Ctl                 5.032***  1.610***
                          (0.220)   (0.045)  
group: Trt                 4.661***  1.527***
                          (0.220)   (0.045)  
---------------------------------------------
sigma             0.696      0.696     0.143 
R-squared         0.073      0.982     0.993 
F                 1.419    485.051  1200.388 
p                 0.249      0.000     0.000 
N                20         20        20     
=============================================


1
@Eduardo, +1, กราฟที่ดี ควรใช้ด้วยความระมัดระวังแม้ว่าเมื่อมีการใช้การเปลี่ยนแปลงที่แตกต่างกันของตัวแปรตามในการถดถอยที่แตกต่างกัน
mpiktas

mpiktas ก็เป็นจริงในตารางเช่นกัน กราฟทำให้กะทัดรัดขึ้นโดยใช้ความแม่นยำ
Eduardo Leoni

@Eduardo คุณสามารถแบ่งปันรหัสสำหรับกราฟได้หรือไม่
suncoolsu

2
รหัส @suncoolsu R มีอยู่ในลิงก์แรกที่ให้ไว้ในการตอบกลับของ @ Eduardo เขาเขาก็gridไม่ได้lattice:)
CHL

@Eduardo - ขอบคุณสำหรับคำตอบรายละเอียดฉันไม่ได้ตระหนักถึงmemiscก่อนหน้านี้ดูเหมือนว่าแพคเกจที่มีประโยชน์มากที่จะมีในตัวสั่น!
ไล่

12

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

# create the combinations of the 4 independent variables
library(foreach)
xcomb <- foreach(i=1:4, .combine=c) %do% {combn(names(df1)[-1], i, simplify=FALSE) }

# create formulas
formlist <- lapply(xcomb, function(l) formula(paste(names(df1)[1], paste(l, collapse="+"), sep="~")))

เนื้อหาของ as.character (formlist) คือ

 [1] "price ~ sqft"                     "price ~ age"                     
 [3] "price ~ feats"                    "price ~ tax"                     
 [5] "price ~ sqft + age"               "price ~ sqft + feats"            
 [7] "price ~ sqft + tax"               "price ~ age + feats"             
 [9] "price ~ age + tax"                "price ~ feats + tax"             
[11] "price ~ sqft + age + feats"       "price ~ sqft + age + tax"        
[13] "price ~ sqft + feats + tax"       "price ~ age + feats + tax"       
[15] "price ~ sqft + age + feats + tax"

จากนั้นฉันก็รวบรวมดัชนีที่มีประโยชน์

# R squared
models.r.sq <- sapply(formlist, function(i) summary(lm(i))$r.squared)
# adjusted R squared
models.adj.r.sq <- sapply(formlist, function(i) summary(lm(i))$adj.r.squared)
# MSEp
models.MSEp <- sapply(formlist, function(i) anova(lm(i))['Mean Sq']['Residuals',])

# Full model MSE
MSE <- anova(lm(formlist[[length(formlist)]]))['Mean Sq']['Residuals',]

# Mallow's Cp
models.Cp <- sapply(formlist, function(i) {
SSEp <- anova(lm(i))['Sum Sq']['Residuals',]
mod.mat <- model.matrix(lm(i))
n <- dim(mod.mat)[1]
p <- dim(mod.mat)[2]
c(p,SSEp / MSE - (n - 2*p))
})

df.model.eval <- data.frame(model=as.character(formlist), p=models.Cp[1,],
r.sq=models.r.sq, adj.r.sq=models.adj.r.sq, MSEp=models.MSEp, Cp=models.Cp[2,])

ชื่อไฟล์สุดท้ายคือ

                      model p       r.sq   adj.r.sq      MSEp         Cp
1                price~sqft 2 0.71390776 0.71139818  42044.46  49.260620
2                 price~age 2 0.02847477 0.01352823 162541.84 292.462049
3               price~feats 2 0.17858447 0.17137907 120716.21 351.004441
4                 price~tax 2 0.76641940 0.76417343  35035.94  20.591913
5            price~sqft+age 3 0.80348960 0.79734865  33391.05  10.899307
6          price~sqft+feats 3 0.72245824 0.71754599  41148.82  46.441002
7            price~sqft+tax 3 0.79837622 0.79446120  30536.19   5.819766
8           price~age+feats 3 0.16146638 0.13526220 142483.62 245.803026
9             price~age+tax 3 0.77886989 0.77173666  37884.71  20.026075
10          price~feats+tax 3 0.76941242 0.76493500  34922.80  21.021060
11     price~sqft+age+feats 4 0.80454221 0.79523470  33739.36  12.514175
12       price~sqft+age+tax 4 0.82977846 0.82140691  29640.97   3.832692
13     price~sqft+feats+tax 4 0.80068220 0.79481991  30482.90   6.609502
14      price~age+feats+tax 4 0.79186713 0.78163109  36242.54  17.381201
15 price~sqft+age+feats+tax 5 0.83210849 0.82091573  29722.50   5.000000

ในที่สุดพล็อต Cp (ใช้ Library wle)

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