Ho una conoscenza più approfondita di R e ho cercato di stimare pendenze casuali (coefficienti di selezione) per circa 35 individui su 5 anni per quattro variabili di habitat. La variabile di risposta è se un luogo è stato "usato" (1) o "disponibile" (0) habitat ("usa" sotto).
Sto usando un computer Windows a 64 bit.
In R versione 3.1.0, utilizzo i dati e l'espressione di seguito. PS, TH, RS e HW sono effetti fissi (standardizzati, misurati a distanza dai tipi di habitat). lme4 V 1.1-7.
str(dat)
'data.frame': 359756 obs. of 7 variables:
$ use : num 1 1 1 1 1 1 1 1 1 1 ...
$ Year : Factor w/ 5 levels "1","2","3","4",..: 4 4 4 4 4 4 4 4 3 4 ...
$ ID : num 306 306 306 306 306 306 306 306 162 306 ...
$ PS: num -0.32 -0.317 -0.317 -0.318 -0.317 ...
$ TH: num -0.211 -0.211 -0.211 -0.213 -0.22 ...
$ RS: num -0.337 -0.337 -0.337 -0.337 -0.337 ...
$ HW: num -0.0258 -0.19 -0.19 -0.19 -0.4561 ...
glmer(use ~ PS + TH + RS + HW +
(1 + PS + TH + RS + HW |ID/Year),
family = binomial, data = dat, control=glmerControl(optimizer="bobyqa"))
glmer mi fornisce stime dei parametri per gli effetti fissi che hanno senso per me, e anche le pendenze casuali (che interpreto come coefficienti di selezione per ciascun tipo di habitat) hanno senso quando indagino i dati qualitativamente. La probabilità logaritmica per il modello è -3050,8.
Tuttavia, la maggior parte della ricerca in ecologia animale non utilizza R perché con i dati sulla posizione degli animali, l'autocorrelazione spaziale può rendere gli errori standard inclini all'errore di tipo I. Mentre R utilizza errori standard basati sul modello, sono preferiti gli errori empirici (anche Huber-white o sandwich).
Mentre R attualmente non offre questa opzione (per quanto ne so - PER FAVORE, correggimi se sbaglio), SAS lo fa - anche se non ho accesso a SAS, un collega ha accettato di farmi prestare il suo computer per determinare se gli errori standard cambia in modo significativo quando viene utilizzato il metodo empirico.
In primo luogo, desideriamo garantire che quando si utilizzano errori standard basati sul modello, SAS produca stime simili a R, per essere certi che il modello sia specificato allo stesso modo in entrambi i programmi. Non mi importa se sono esattamente uguali, solo simili. Ho provato (SAS V 9.2):
proc glimmix data=dat method=laplace;
class year id;
model use = PS TH RS HW / dist=bin solution ddfm=betwithin;
random intercept PS TH RS HW / subject = year(id) solution type=UN;
run;title;
Ho anche provato varie altre forme, come l'aggiunta di linee
random intercept / subject = year(id) solution type=UN;
random intercept PS TH RS HW / subject = id solution type=UN;
Ho provato senza specificare il
solution type = UN,
o commentando
ddfm=betwithin;
Indipendentemente da come specifichiamo il modello (e abbiamo provato in molti modi), non riesco a ottenere le pendenze casuali in SAS per assomigliare in remoto a quell'output da R - anche se gli effetti fissi sono abbastanza simili. E quando intendo diverso, intendo che nemmeno i segni sono uguali. La probabilità di log di -2 in SAS era 71344,94.
Non riesco a caricare il mio set di dati completo; così ho creato un set di dati giocattolo con solo i record di tre persone. SAS mi dà l'output in pochi minuti; in R ci vuole più di un'ora. Strano. Con questo set di dati giocattolo ora sto ottenendo stime diverse per gli effetti fissi.
La mia domanda: qualcuno può fare luce sul perché le stime delle pendenze casuali potrebbero essere così diverse tra R e SAS? C'è qualcosa che posso fare in R, o SAS, per modificare il mio codice in modo che le chiamate producano risultati simili? Preferirei cambiare il codice in SAS, dal momento che "credo" le mie stime R più.
Sono davvero preoccupato per queste differenze e voglio arrivare al fondo di questo problema!
Il mio output da un set di dati giocattolo che utilizza solo tre dei 35 individui nel set di dati completo per R e SAS sono inclusi come jpeg.
MODIFICA E AGGIORNAMENTO:
Come ha aiutato @JakeWestfall a scoprire, le piste in SAS non includono gli effetti fissi. Quando aggiungo gli effetti fissi, ecco il risultato: confrontare le pendenze R con le pendenze SAS per un effetto fisso, "PS", tra i programmi: (coefficiente di selezione = pendenza casuale). Si noti l'aumento della variazione in SAS.
0
s e 1
s, R
modellerà la probabilità di una risposta "1" mentre SAS modellerà la probabilità di una risposta "0". Per rendere il modello SAS la probabilità di "1" è necessario scrivere la variabile di risposta come use(event='1')
. Naturalmente, anche senza farlo, credo che dovremmo aspettarci ancora le stesse stime delle varianze di effetti casuali, così come le stesse stime di effetti fissi sebbene con i loro segni invertiti.
ranef()
funzione piuttosto che coef()
. Il primo fornisce gli effetti casuali effettivi, mentre il secondo fornisce gli effetti casuali più il vettore di effetti fissi. Quindi questo spiega molte delle ragioni per cui i numeri illustrati nel tuo post differiscono, ma rimane ancora una sostanziale discrepanza che non posso spiegare totalmente.
ID
non è un fattore in R; controlla e vedi se questo cambia qualcosa.