रेखीय मॉडल से एकत्रित परिणाम 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
मेरे लिए डेटा ड्रेजिंग की तरह एक सा लगता है। इस बात पर ध्यान केंद्रित नहीं किया जाना चाहिए कि आप क्या सोचते हैं कि एक उपयुक्त मॉडल है, क्या आप मॉडलिंग शुरू करने से पहले covariates, परिवर्तनों आदि । पता नहीं है कि आप एक अच्छा मॉडल खोजने के लिए उस सभी मॉडल फिटिंग किया था।
मोनिका को बहाल करें - जी। सिम्पसन

3
@ गेविन - मैं इसे बहुत ही जल्दी ऑफ-टॉपिक प्राप्त कर सकता हूं, लेकिन इसका संक्षिप्त उत्तर नहीं है, मैं डेटा ड्रेजिंग की या वकालत में यादृच्छिक वेरिएबल्स के बीच संबंध बनाने की वकालत नहीं कर रहा हूं। एक प्रतिगमन मॉडल पर विचार करें जिसमें आय शामिल है। क्या मॉडल पर उनके प्रभाव को देखने के लिए आय पर परिवर्तनों का परीक्षण करना उचित नहीं है? आय का लॉग, 10 डॉलर में आय का लॉग, 100 में आय का लॉग ... ... भले ही यह डेटा ड्रेजिंग है - एक फ़ंक्शन / सारांश उपकरण जो कई मॉडल रन से आउटपुट को एकत्र कर सकता है फिर भी बहुत उपयोगी होगा, नहीं?
चेस

जवाबों:


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
@ ईयर्डो, +1, अच्छा ग्राफ। इसका उपयोग तब सावधानी के साथ किया जाना चाहिए, जब निर्भरता के विभिन्न परिवर्तन का उपयोग विभिन्न प्रतिगमन में किया जाता है।
mpiktas

mpiktas, यह एक तालिका में भी सच है। ग्राफ़ सिर्फ सटीक की कीमत पर इसे और अधिक कॉम्पैक्ट बनाते हैं।
एडुआर्डो लियोनी

@Eduardo क्या आप ग्राफ़ के लिए कोड साझा कर सकते हैं?
सनकूलू

2
@suncoolsu R कोड @ एडुआर्डो की प्रतिक्रिया में दिए गए पहले लिंक पर उपलब्ध है। उसने कहा, यह grid, नहीं lattice:)
chl

@ एर्दोर्दो - विस्तृत उत्तर के लिए धन्यवाद, मुझे memiscपहले से पता नहीं था , किसी के तरकश में होने के लिए बहुत आसान पैकेज की तरह दिखता है!
पीछा

12

निम्नलिखित बिल्कुल सवाल का जवाब नहीं है। यह आपको कुछ विचार दे सकता है, हालांकि। यह कुछ ऐसा है जिसे मैंने हाल ही में एक से चार स्वतंत्र चर (डीएफ 1 डेटाफ़्रेम के पहले कॉलम में निर्भर चर) का उपयोग करके कई प्रतिगमन मॉडल के फिट का आकलन करने के लिए किया था।

# 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 (फॉर्मलिस्ट) की सामग्री थी

 [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 प्लॉट (लाइब्रेरी wle का उपयोग करके)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.