2015-08-24 25 views
10

Vorrei condividere alcuni dei miei pensieri quando si tenta di migliorare il tempo di adattamento del modello di un modello di effetti misti lineare in R utilizzando il pacchetto lme4.Funzione lsm accelerazione in R

Dimensione del set di dati: Il set di dati è composto da circa 400.000 righe e 32 colonne. Sfortunatamente, nessuna informazione può essere condivisa sulla natura dei dati.

Presupposti e assegni: Si presume che la variabile di risposta provenga da una distribuzione normale. Prima del processo di adattamento del modello, le variabili sono state testate per collinearità e multicollinearità utilizzando le tabelle di correlazione e la funzione alias fornita in R.

Le variabili continue sono state ridimensionate per favorire la convergenza.

Struttura modello: L'equazione del modello contiene 31 effetti fissi (compresa l'intercetta) e 30 effetti casuali (l'intercettazione non è inclusa). Gli effetti casuali sono randomizzati per una variabile fattore specifica che ha 2700 livelli. La struttura di covarianza è Variance Components poiché si presume che esista un'indipendenza tra gli effetti casuali.

Modello esempio equazione:

lmer(Response ~ 1 + Var1 + Var2 + ... + Var30 + (Var1-1| Group) + (Var2-1| Group) + ... + (Var30-1| Group), data=data, REML=TRUE)

Modello è stato installato con successo, tuttavia, ci sono voluti circa 3,1 ore per fornire risultati. Lo stesso modello in SAS ha richiesto alcuni secondi. C'è la letteratura disponibile sul web su come ridurre il tempo utilizzando l'algoritmo di ottimizzazione non lineare nloptwrap e turnining fuori dal tempo di calcolo derivato che viene eseguita dopo l'ottimizzazioni è finito calc.derivs = FALSE:

https://cran.r-project.org/web/packages/lme4/vignettes/lmerperf.html

volta è stato ridotto del 78%.

Domanda: C'è un altro modo alternativo per ridurre il tempo di adattamento del modello definendo gli ingressi del parametro lmer di conseguenza? C'è così tanta differenza tra R e SAS in termini di tempo di adattamento del modello.

Qualsiasi suggerimento è apprezzato.

+0

La mia prima mossa sarebbe quella di sottocampionare il set di dati (righe) e adattarlo. –

+1

Ciao @Roman Luštrik. Devo ottenere stime dei coefficienti utilizzando l'intero set di dati. – mammask

+0

Penso che gli algoritmi utilizzati in 'lmer' e SAS proc mixed siano diversi, anche se dovresti ottenere @benbolker per confermare. Potresti anche esaminare il [codice sorgente] (https://github.com/lme4/lme4/tree/master/src) –

risposta

7

lmer() determina le stime dei parametri ottimizzando il log-likehood profilato o il criterio REML profilato rispetto ai parametri nella matrice di covarianza degli effetti casuali. Nel tuo esempio ci saranno 31 parametri, corrispondenti alle deviazioni standard degli effetti casuali da ciascuno dei 31 termini. Le ottimizzazioni vincolate di tale dimensione richiedono tempo.

È possibile che SAS PROC MIXED disponga di metodi di ottimizzazione specifici o di metodi più sofisticati per determinare le stime iniziali. SAS essendo un sistema a codice chiuso significa che non sapremo cosa fanno.

proposito, è possibile scrivere gli effetti casuali come (1 + Var1 + Var2 + ... + Var30 || Group)

+1

Esiste un aspetto della valutazione della verosimiglianza dei profili profilata in lmer che può essere resa più veloce per questi tipi di modelli. Quando abbiamo scritto lme4 abbiamo risolto i coefficienti degli effetti fissi e le modalità degli effetti casuali ad ogni iterazione. Ciò comporta operazioni su matrici con n righe e vettori di lunghezza n, dove n è il numero di osservazioni. Recentemente mi sono reso conto che questo non è necessario. Ho un'implementazione [Julia] (http://julialang.org) dell'algoritmo modificato ma nulla ancora in R. –

+1

Sono nuovo di stackoverflow e apparentemente ho perso alcune delle sottigliezze. Di solito mi identifico come Doug Bates, non come utente 1864481 –

+3

Caro Douglas. E. Bates, la tua risposta è una sorpresa. Sono riuscito a montare lo stesso modello in 'Julia'. I risultati indicano che 'Julia' è circa 74 volte più veloce di' R' quando si tratta di adattarsi al modello specifico. Questa è un'enorme differenza di prestazioni. Inoltre, i risultati sono allineati. C'è qualche piano per eseguire lo stesso sviluppo in "R lme4" nel prossimo futuro? Grazie per il vostro aiuto. Konstantinos Mammas – mammask

1

Se si utilizza glmer piuttosto che lmer, c'è un parametro nAGQ. Ho trovato che l'impostazione nAGQ=0 riduceva drasticamente il tempo necessario per adattarsi a un modello abbastanza complesso (13 effetti fissi, un effetto casuale con intercetta e pendenza variabile, 300k righe). Questo in pratica dice a glmer di usare una forma meno precisa di stima dei parametri per GLMM. Vedi ?glmer per maggiori dettagli, o this post.

+0

Grazie per il tuo contributo, lo avrò sicuramente in mente! – mammask