2012-11-09 17 views
5

Sto tentando di eseguire 96 regressioni e salvare i risultati come 96 oggetti diversi. Per complicare le cose, voglio che l'indice di una delle covariate nel modello cambi anche 96 volte. Ho quasi risolto il problema ma sfortunatamente ho colpito un muro. Il codice finora è,Ciclo continuo delle covariate nella regressione utilizzando R

for(i in 1:96){ 

    assign(paste("z.out", i,sep=""), lm(rMonExp_EGM~ TE_i + Month2+Month3+Month4+Month5+Month6+Month7+Month8+Month9+ 
    Month10+Month11+Month12+Yrs_minus_2004 + 
    as.factor(LGA),data=Pokies)) 

} 

Questo funziona sul lato creazione di oggetti (ad esempio ho z.out1 - z.out96), ma io non riesco a ottenere il pedice sul covariata a cambiare pure.

Ho 96 variabili denominate TE_1, TE_2 ... TE_96 nel set di dati. Come tale, il pedice su TE_, "i" deve cambiare per corrispondere a ciascuno degli oggetti che creo. Cioè, z.out1 dovrebbe tenere i risultati di questo modello:

z.out1 <- lm(rMonExp_EGM~ TE_1 + Month2+Month3+Month4+Month5+Month6+Month7+Month8+Month9+ 
    Month10+Month11+Month12+Yrs_minus_2004 + as.factor(LGA),data=Pokies) 

E z.out96 dovrebbe essere:

z.out96 <- lm(rMonExp_EGM~ TE_96+ Month2+Month3+Month4+Month5+Month6+Month7+Month8+Month9+ 
    Month10+Month11+Month12+Yrs_minus_2004 + as.factor(LGA),data=Pokies) 

Speriamo che questo ha un senso. Sono grato per eventuali suggerimenti/consigli.

+0

Ma a parte il prog problema di speronamento, dovresti probabilmente ripensare o chiedere a CrossValidate informazioni su una serie storica come fattori individuali. Il risultato è definitivamente fuorviante o semplicemente sbagliato. –

risposta

7

vorrei mettere i risultati in una lista e di evitare i for loop e assign dichiarazioni

È possibile utilizzare una combinazione di reformulate e update per creare la formula

orig_formula <- MonExp_EGM~ Month2+Month3+Month4+Month5+Month6+Month7+Month8+Month9+ 
Month10+Month11+Month12+Yrs_minus_2004 + as.factor(LGA) 


te_variables <- paste0('TE_', 1:96) 
# Or if you don't have a current version of R 
# te_variables <- paste('TE', 1:96, sep = '_') 

new_formula <- lapply(te_variables, function(x,orig = orig_formula) { 
    new <- reformulate(c(x,'.')) 
    update(orig, new)}) 
## it works!  
new_formula[[1]] 
## MonExp_EGM ~ TE_1 + Month2 + Month3 + Month4 + Month5 + Month6 + 
## Month7 + Month8 + Month9 + Month10 + Month11 + Month12 + 
## Yrs_minus_2004 + as.factor(LGA) 
new_formula[[2]] 
## MonExp_EGM ~ TE_2 + Month2 + Month3 + Month4 + Month5 + Month6 + 
## Month7 + Month8 + Month9 + Month10 + Month11 + Month12 + 
## Yrs_minus_2004 + as.factor(LGA) 


models <- lapply(new_formula, lm, data = pokies) 

Ci dovrebbe ora essere di 96 elementi in l'elenco models

È possibile denominarli per riflettere i nomi originali pianificati

names(models) <- paste0('z.out', 1:96) 
# or if you don't have a current version of R 
# names(models) <-paste('z.out', 1:96 ,sep = '') 

e poi accedere ad un unico modello da

models$z.out5 

ecc

o creare una sintesi di tutti i modelli

summaries <- lapply(models, summary) 

ecc ....

# just the coefficients 
coefficients <- lapply(models, coef) 

# the table with coefficient estimates and standard.errors 

coef_tables <- apply(summaries, '[[', 'coefficients') 
+0

grazie! Questo fa il trucco. Supponiamo di voler estrarre i coefficienti dai modelli, sarebbe quindi prudente utilizzare un ciclo for? Esempio - bumpkis <- matrice (nrow = 96, ncol = 1) per (i in 1:96) { bumpkis [i,] <- c (modelli $ z.out (i) $ coefficienti [2]) } Questo non funziona purtroppo perché non riesco a far funzionare l'io. Penso che mi manchi qualcosa di fondamentale sui loop. – kpeyton

+0

No. Vedi i miei esempi in soluzione modificata. Per questo tipo di attività, i loop funzioneranno, ma una soluzione R idiomatica consiste nell'utilizzare 'lapply'. Il tuo uso dei 'i' in' models $ z.out (i) 'non sarebbe corretto. Prova 'modelli [[incolla ('z.out', i, sep = '')]]'. Non sarai in grado di usare '$' – mnel

Problemi correlati