Spørgsmål:
Samlede resultater fra lineær modelkørsel R
Chase
2011-02-04 01:00:04 UTC
view on stackexchange narkive permalink

Da regressionsmodellering ofte er mere "kunst" end videnskab, finder jeg mig ofte i at teste mange iterationer af en regressionsstruktur. Hvad er nogle effektive måder at opsummere oplysningerne fra disse flere modelkørsler i et forsøg på at finde den "bedste" model? En tilgang, jeg har brugt, er at placere alle modeller på en liste og køre resume () på tværs af denne liste, men jeg forestiller mig, at der er mere effektive måder at sammenligne på?

Prøve kode &-modeller:

  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) gruppe <- gl (2,10,20, labels = c ("Ctl", "Trt")) vægt <- c (ctl, trt) lm1 <- lm (vægt ~ gruppe) lm2 <- lm (vægt ~ gruppe - 1) lm3 <- lm (log (vægt) ~ gruppe - 1) #Trek sammenligninger mellem modeller 1-3? modeller <- liste (lm1, lm2, lm3 ) lapply (modeller, resume)  
Lyder lidt som data uddybning for mig. Bør ikke fokus være på, hvad du sandsynligvis synes er en passende model, hvilke kovariater, transformationer osv. * Før * du begynder at modellere. R ved ikke, at du passede alt sammen for at finde en god model.
@Gavin - Jeg kan se, at dette bliver meget forfærdeligt uden for emnet, men det korte svar er nej, jeg går ikke ind for datamudring eller at finde falske forhold mellem tilfældige variabler i et datasæt. Overvej en regressionsmodel, der inkluderer indkomst. Er det ikke rimeligt at teste ændringer i indkomst for at se deres indvirkning på modellen? Indkomstlog, indkomstlog i 10'ere dollars, indkomstlog i 100'ere ... Selvom dette er dataudmudring - ville et funktions- / opsummeringsværktøj, der kan samle output fra mange modelkørsler, stadig være meget nyttigt, nej?
To svar:
Eduardo Leoni
2011-02-04 01:32:11 UTC
view on stackexchange narkive permalink

Planlæg dem!

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

Eller , hvis du skal, skal du bruge tabeller: apsrtable -pakken eller mtable -funktionen i memisc -pakken.

Brug af mtabel

  mtable123 <- mtable ("Model 1" = lm1, "Model 2" = lm2, "Model 3" = lm3, summary.stats = c (" sigma "," R-squared "," F "," p "," N ")) > mtable123Calls: Model 1: lm (formel = vægt ~ gruppe) Model 2: lm (formel = vægt ~ gruppe - 1) Model 3: lm (formel = log (vægt) ~ gruppe - 1) ====================================== ========== Model 1 Model 2 Model 3 ---------------------------------- ----------- (Intercept) 5.032 *** (0.220) gruppe: Trt / Ctl -0.371 (0.311) gruppe: Ctl 5.032 *** 1.610 *** (0.220) (0.045) gruppe: Trt 4.661 *** 1.527 *** (0.220) (0.045) -------------------------------------------- -sigma 0,696 0,696 0,143 R-kvadrat 0,073 0,982 0,993 F 1,419 485,051 1200,388 p 0,249 0,000 0,000 N 20 20 20 ============================= ===================  

@Eduardo, +1, flot graf. Det skal bruges med forsigtighed, selvom når den forskellige transformation af afhængig variabel bruges i forskellige regressioner.
mpiktas, det er også sandt i en tabel. Grafer gør det bare mere kompakt på bekostning af præcision.
@Eduardo kan du dele koden til grafer?
@suncoolsu R-kode er tilgængelig på det første link givet i @Eduardo's-svar. He he, det er `gitter`, ikke` gitter` :)
@Eduardo - Tak for det detaljerede svar, jeg var ikke klar over `memisc` tidligere, ligner en meget praktisk pakke at have i sin kogger!
Memisc har en masse ikke meget relaterede, men alligevel meget nyttige funktioner. Jeg bruger det ikke så ofte som jeg skulle.
@Chl .. Tak .. for humor. Eduardo, din hjemmeside er fantastisk! Tak fordi du delte fantastisk kode :-) Jeg håber, jeg kan gøre det på `gitter`. : D
@suncoolsu Lad os gå med en `gitter` implementering så :) Det skal ikke være for hårdt.
Hvordan ville jeg bare planlægge aflytning og arbejdsløs?
George Dontas
2011-02-04 02:10:28 UTC
view on stackexchange narkive permalink

Følgende svarer ikke nøjagtigt på spørgsmålet. Det kan dog give dig nogle ideer. Det er noget, jeg for nylig gjorde for at vurdere tilpasningen af ​​flere regressionsmodeller ved hjælp af en til fire uafhængige variabler (den afhængige variabel var i den første kolonne i df1 dataframe).

  # opret kombinationerne af de 4 uafhængige variablerbibliotek (foreach) xcomb <- foreach (i = 1: 4, .combine = c)% do% {combn (names (df1) [- 1], i, simplify = FALSE)} # create formulasformlist <- lapply (xcomb, function (l) formula (paste (names (df1) [1], paste (l, collaps = "+"), sep = "~ ")))  

Indholdet af as.character (formliste) var

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

Så indsamlede jeg nogle nyttige indeks

# R squaredmodels.r.sq <- sapply (formliste, funktion (i) resume (lm (i)) $ r.squared) # justeret R squaredmodels.adj.r.sq <- sapply (formlist, funktion (i) oversigt (lm (i)) $ adj.r.squared) # MSEpmodels.MSEp <- sapply (formliste, funktion (i) anova (lm (i)) ['Mean Sq'] ['Residuals', ]) # Fuld model MSEMSE <- anova (lm (formliste [[længde (formliste)]])) ['Mean Sq'] ['Residuals',] # Mallow's Cpmodels.Cp <- sapply (formlist, funktion (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 = som.karakter (formliste), p = modeller.Cp [1,], r.sq = modeller.r.sq, adj.r.sq = modeller.adj. r.sq, MSEp = models.MSEp, Cp = models.Cp [2,])

Den endelige dataramme var

  model p r.sq adj.r.sq MSEp Cp1 pris ~ sqft 2 0.71390776 0.71139818 42044.46 49.2606202 pris ~ alder 2 0.02847477 0.01352823 162541.84 292.4620493 pris ~ feats 2 0.17858447 0.17137907 120716.21 351.0044414 pris ~ skat 0.7353.053 ~ sqft + feats 3 0.72245824 0.71754599 41148.82 46.4410027 pris ~ sqft + skat 3 0.79837622 0.79446120 30536.19 5.8197668 pris ~ alder + feats 3 0.16146638 0.13526220 142483.62 245.8030269 pris ~ alder + skat 3 0.77886989 0,7788698 21.02106011 pris ~ sqft + alder + bedrifter 4 0.80454221 0.79523470 33739.36 12.51417512 pris ~ sqft + alder + skat 4 0.82977846 0.82140691 29640.97 3.83269213 pris ~ sqft + feats + skat 4 0.80068220 0.79481991 30482.90 6.60950214 pris 0.710821 ~ sqft + age + feats + tax 5 0.83210849 0.82091573 29722.50 5.000000  

Endelig et Cp-plot (ved hjælp af bibliotek wle)



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 2.0-licens, den distribueres under.
Loading...