É possível especificar um modelo mais recente sem efeitos fixos?

9

Em R, como especifico o modelo lmer sem efeito fixo global? Por exemplo, se eu disser algo como

lmer(y ~ (1 | group) + (0 + x | group), data = my_df)

o modelo ajustado será

yij=a+αi+βixij

Como encaixo o modelo

yij=αi+βixij ?

Leo
fonte
Minha resposta do joelho foi que lmer(y~0+(1|group)+(0+x|group))funcionaria, mas isso gera um erro.
Mike Lawrence
4
Eu não acho que é possível especificar um modelo sem um efeito fixo com o lmer porque o pacote lme4 é dedicado apenas a modelos mistos (com pelo menos um efeito fixo e um efeito aleatório). Não me lembro de ter visto modelos de efeitos aleatórios na documentação, em nenhum caso. Pode ser útil solicitá-lo na lista de modelos mistos R-sig ( stat.ethz.ch/mailman/listinfo/r-sig-mixed-models )
maxTC
1
Por curiosidade, por que você quer fazer isso? Talvez haja outra maneira de abordar seu objetivo subjacente.
jbowman
2
centro yprimeiro :)
Macro

Respostas:

8

Como o @Mike Lawrence mencionou, a coisa óbvia a ser feita ao definir um modelo sem efeitos fixos é algo na forma de:

lmer(y ~ -1 + (1|GroupIndicator))

o que é realmente bastante direto; não se define interceptação ou matriz X. A razão básica pela qual isso não funciona é que, como o @maxTC apontou, "o pacote lme4 é dedicado apenas a modelos mistos ".

Em particular o que lmer () montagem faz é calcular o desvio perfilado, resolvendo a regressão dos mínimos quadrados penalizado entre o e , bem como os efeitos aleatórios esféricas e (Eq. (11), Ref. (2) Computacionalmente, esse procedimento de otimização calcula a decomposição de Cholesky do sistema correspondente, explorando a estrutura de blocos do sistema (Eq. (5), Ref. (1)). Definir nenhum efeito fixo global distorce praticamente essa estrutura de bloco de uma maneira que o código de lmer () não pode suportar. Entre outras coisas, o valor condicional esperado de é baseado em , mas está resolvido emy^yu0uβ^β^pergunta a solução de um sistema matricial que nunca existiu (a matriz na Ref. (1) ou na Ref. (2)). Então você recebe um erro como:RXXLX

Error in mer_finalize(ans) : 
  Cholmod error 'invalid xtype' at file:../Cholesky/cholmod_solve.c, line 970

Afinal, não havia nada a resolver em primeiro lugar.

Supondo que você não queira reescrever a função de custo de desvio de perfil lmer (), a solução mais fácil é baseada no axioma do CS-101: entrada de lixo, saída de lixo .

 N = length(y); Garbage <- rnorm(N); 
 lmer(y ~ -1 + Garbage + (1|GroupIndicator));

Então, o que fazemos é definir uma variável que é apenas ruído; como antes, lmer () é instruído a não usar interceptação fixa, mas apenas a matriz X nos definiu (nesse caso, a matriz de coluna única Garbage). Essa variável de ruído gaussiana extra estará na expectativa não correlacionada com nossos erros de medição de amostra, bem como com sua variação de efeitos aleatórios. Escusado será dizer que quanto mais estrutura seu modelo tiver, menor a probabilidade de obter correlações aleatórias indesejadas, mas estatisticamente significativas.Garbage

Portanto, o lmer () tem uma variável placebo (matriz) para jogar, e você espera que o associado seja zero e você não precisou normalizar seus dados de nenhuma maneira (centralizando-os, branqueando-os etc.) . Provavelmente, tentar uma inicialização aleatória da matriz do placebo também não será prejudicial. Uma nota final para o "Lixo": usar ruído gaussiano não foi "acidental"; possui a maior entropia entre todas as variáveis ​​aleatórias de igual variação, portanto, a menor chance de fornecer um ganho de informação.XβX

Claramente, isso é mais um truque computacional do que uma solução, mas permite que o usuário especifique efetivamente um modelo mais profundo sem efeito fixo global. Desculpas por esperar em torno das duas referências. Em geral, acho que a Ref. (1) é a melhor aposta para qualquer um perceber o que lmer () está fazendo, mas a Ref. (2) está mais próxima do espírito do código real.

Aqui está um pouco do código que mostra a ideia acima:

library(lme4)
N= 500;                 #Number of Samples
nlevA = 25;             #Number of levels in the random effect 
set.seed(0)             #Set the seed
e = rnorm(N); e = 1*(e - mean(e) )/sd(e); #Some errors

GroupIndicator =  sample(nlevA, N, replace=T)   #Random Nvel Classes 

Q = lmer( rnorm(N) ~ (1| GroupIndicator ));      #Dummy regression to get the matrix Zt easily
Z = t(Q@Zt);            #Z matrix

RA <-  rnorm(nlevA )                        #Random Normal Matrix
gammas =c(3*RA/sd(RA))                      #Colour this a bit

y = as.vector(  Z %*% gammas +  e )         #Our measurements are the sum of measurement error (e) and Group specific variance

lmer_native <- lmer(y ~ -1 +(1| GroupIndicator)) #No luck here.
Garbage <- rnorm(N)                              #Prepare the garbage

lmer_fooled <- lmer(y ~ -1 + Garbage+(1| GroupIndicator)) #OK...
summary(lmer_fooled)                             #Hey, it sort of works!

Referências:

  1. Modelos mistos lineares e mínimos quadrados penalizados por DM Bates e S. DebRoy, Journal of Multivariate Analysis, Volume 91 Edição 1, outubro de 2004 ( Link para pré-impressão )
  2. Métodos computacionais para modelos mistos por Douglas Bates, junho de 2012. ( Link to source )
usεr11852
fonte
Existe alguma razão para preferir a abordagem que você apresentou em relação à mencionada por Marco nos comentários?
22813 russellpierce #
2
Sim; você não altera os dados para que não sejam necessárias transformações de retorno. Como resultado, todos os diagnósticos e benefícios padrão da lmer (), por exemplo. variáveis ​​ajustadas, resíduos, níveis de efeitos aleatórios etc. etc. são diretamente interpretáveis, pois correspondem ao seu conjunto de dados "verdadeiro" e não a um "dado alterado".
usεr11852