Eu sou um usuário mais familiarizado com R e tenho tentado estimar inclinações aleatórias (coeficientes de seleção) há cerca de 35 indivíduos com mais de 5 anos para quatro variáveis de habitat. A variável de resposta é se um local foi habitat "usado" (1) ou "disponível" (0) ("uso" abaixo).
Estou usando um computador com Windows de 64 bits.
No R versão 3.1.0, eu uso os dados e a expressão abaixo. PS, TH, RS e HW são efeitos fixos (distância medida e padronizada para os tipos de 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"))
O glmer me fornece estimativas de parâmetros para os efeitos fixos que fazem sentido para mim, e as inclinações aleatórias (que eu interpreto como coeficientes de seleção para cada tipo de habitat) também fazem sentido quando investigo os dados qualitativamente. A probabilidade de log para o modelo é -3050,8.
No entanto, a maioria das pesquisas em ecologia animal não usa R porque, com dados de localização do animal, a autocorrelação espacial pode tornar os erros padrão propensos a erros do tipo I. Enquanto R usa erros padrão baseados em modelo, os erros padrão empíricos (também Huber-branco ou sanduíche) são os preferidos.
Embora R atualmente não ofereça essa opção (que eu saiba - POR FAVOR, me corrija se eu estiver errado), o SAS oferece - embora eu não tenha acesso ao SAS, um colega concordou em me emprestar seu computador para determinar se os erros padrão mudar significativamente quando o método empírico é usado.
Primeiro, desejamos garantir que, ao usar erros padrão baseados em modelo, o SAS produza estimativas semelhantes às de R - para ter certeza de que o modelo seja especificado da mesma maneira nos dois programas. Não me importo se são exatamente iguais - apenas semelhantes. Eu tentei (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;
Eu também tentei várias outras formas, como adicionar linhas
random intercept / subject = year(id) solution type=UN;
random intercept PS TH RS HW / subject = id solution type=UN;
Eu tentei sem especificar o
solution type = UN,
ou comentando
ddfm=betwithin;
Não importa como especificamos o modelo (e tentamos várias maneiras), não consigo que as inclinações aleatórias no SAS se assemelhem remotamente às saídas do R - mesmo que os efeitos fixos sejam semelhantes o suficiente. E quando quero dizer diferente, quero dizer que nem mesmo os sinais são os mesmos. A probabilidade de log -2 no SAS era 71344,94.
Não consigo carregar meu conjunto de dados completo; então eu criei um conjunto de dados de brinquedo apenas com os registros de três indivíduos. O SAS me fornece resultados em alguns minutos; em R demora mais de uma hora. Esquisito. Com este conjunto de dados de brinquedos, agora estou obtendo estimativas diferentes para os efeitos fixos.
Minha pergunta: alguém pode esclarecer por que as estimativas de declives aleatórios podem ser tão diferentes entre R e SAS? Existe algo que eu possa fazer no R ou SAS para modificar meu código para que as chamadas produzam resultados semelhantes? Prefiro alterar o código no SAS, pois "acredito" que meu R calcule mais.
Estou realmente preocupado com essas diferenças e quero chegar ao fundo desse problema!
Minha saída de um conjunto de dados de brinquedo que usa apenas três dos 35 indivíduos no conjunto de dados completo para R e SAS é incluída como jpegs.
EDITAR E ATUALIZAR:
Como o @JakeWestfall ajudou a descobrir, as inclinações no SAS não incluem os efeitos fixos. Quando adiciono os efeitos fixos, eis o resultado - comparando inclinações R com inclinações SAS para um efeito fixo, "PS", entre programas: (Coeficiente de seleção = inclinação aleatória). Observe o aumento da variação no SAS.
0
s e 1
s, R
modelará a probabilidade de uma resposta "1", enquanto o SAS modelará a probabilidade de uma resposta "0". Para tornar o modelo SAS a probabilidade de "1", você precisa escrever sua variável de resposta como use(event='1')
. É claro que, mesmo sem fazer isso, acredito que ainda deveríamos esperar as mesmas estimativas das variações de efeito aleatório, bem como as mesmas estimativas de efeito fixo, embora com seus sinais revertidos.
ranef()
função em vez de coef()
. O primeiro fornece os efeitos aleatórios reais, enquanto o segundo fornece os efeitos aleatórios mais o vetor de efeitos fixos. Portanto, isso explica muito por que os números ilustrados em sua postagem diferem, mas ainda há uma discrepância substancial que não posso explicar totalmente.
ID
não é um fator em R; verifique e veja se isso muda alguma coisa.