Como especificar uma matriz de contraste (em R) para a diferença entre um nível e uma média dos outros?

9

Eu tenho um modelo de regressão parecido com este:

Y=β0+β1X1+β2X2+β3X3+β12X1X2+β13X1X3+β123X1X2X3

... ou na notação R: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3

Digamos que e são variáveis ​​categóricas e é numérico. A complicação é que tem três níveis e, em vez de contrastes padrão, preciso testar:X 2 X 3 X 1 X 1 a , X 1 b , X 1 cX1X2X3X1X1a,X1b,X1c

  • Se a interceptação para o nível difere significativamente da interceptação média para os níveis e . X 1 b X 1 cX1aX1bX1c
  • Se a resposta de é significativamente diferente entre o nível e a média dos níveis e .X 1 a X 1 b X 1 cX2X1aX1bX1c
  • Se a inclinação de é significativamente diferente entre o nível e a média dos níveis e .X 1 a X 1 b X 1 cX3X1aX1bX1c

Com base neste post , parece que a matriz que eu quero é ...

 2
-1
-1

Eu também contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1))). A estimativa de muda, mas as outras também. Eu pode reproduzir a nova estimativa de subtraindo os valores previstos das e meios grupo (quando e está no seu nível de referência) a partir de duas vezes o valor de a esses níveis. Mas não posso confiar que especifiquei minha matriz de contraste corretamente, a menos que também possa derivar os outros coeficientes da mesma forma. b e t a 1 X 1 b X 1 c X 3 = 0 X 2 X 1 aβ1beta1X1bX1cX3=0X2X1a

Alguém tem algum conselho sobre como envolver minha cabeça na relação entre meios celulares e contrastes? Obrigado. Existe um nome padrão para esse tipo de contraste?


Aha! De acordo com o link postado na resposta de Glen_b , a linha inferior é que você pode converter QUALQUER comparação de grupos significa que você deseja em um atributo de contraste no estilo R da seguinte maneira:

  1. Faça uma matriz quadrada. As linhas representam os níveis do seu fator e as colunas representam contrastes. Exceto o primeiro, que informa ao modelo o que o intercepto deve representar.
  2. Se você deseja que sua interceptação seja a média geral, preencha a primeira coluna com o mesmo valor diferente de zero, não importa o quê. Se você deseja que a interceptação seja um dos meios de nível, insira um número nessa linha e preencha o restante com zeros. Se você deseja que a interceptação seja uma média de vários níveis, coloque números nessas linhas e zeros no restante. Se você deseja que seja uma média ponderada, use números diferentes; caso contrário, use o mesmo número. Você pode até colocar valores negativos na coluna de interceptação e isso provavelmente significa algo também, mas isso muda completamente os outros contrastes, então não faço ideia do que é isso.
  3. Preencha o restante das colunas com valores positivos e negativos, indicando quais níveis você deseja em comparação com outros. Eu esqueço por que a soma de zero é importante, mas ajuste os valores para que as colunas sejam somadas a zero.
  4. Transponha a matriz usando a t()função
  5. Use a ginv()partir da MASSembalagem ou solve()para obter o inverso da matriz transposta.
  6. Solte a primeira coluna, por exemplo mycontrast<-mycontrast[,-1]. Agora você tem a matriz apx p-1, mas as informações inseridas para sua interceptação foram codificadas na matriz como um todo durante a etapa 5.
  7. Se você deseja que os rótulos na saída do resumo sejam mais agradáveis ​​de ler do que lm()a saída padrão de et al., Nomeie as colunas da matriz de acordo. A interceptação sempre será automaticamente nomeada (Intercept)no entanto.
  8. Faça da sua matriz o novo contraste para o fator em questão, por exemplo, contrasts(mydata$myfactor)<-mymatrix
  9. Executar lm()(e provavelmente muitas outras funções que utilizam fórmulas) como normal em R padrão sem ter de carga glht, doByou contrasts.

Glen_b, obrigado e obrigado UCLA Statistical Consulting Group. Meu professor de estatísticas aplicadas passou vários dias acenando com a mão sobre esse tópico, e eu ainda não sabia como escrever minha própria matriz de contraste. E agora, uma hora lendo e brincando com R, e finalmente acho que entendi. Acho que eu deveria ter me inscrito na UCLA. Ou Universidade do StackExchange.

f1r3br4nd
fonte

Respostas:

5

Essa comparação de uma com a média de todas as variáveis ​​posteriores é (além da escala), chamada codificação de Helmert ou contrastes de Helmert . O que você fornece é o primeiro contraste, o outro seria uma versão em escala de .(0,1,1)

O que R chama de codificação de Helmert, isso chama de 'Helmert reverso'. Eles são equivalentes a uma mudança de ordem variável.

Glen_b -Reinstate Monica
fonte
O equivalente "até uma mudança de ordem variável" deve ser "dado uma reversão da ordem dos níveis"? Portanto, para obter o tipo de helmert SAS / SPSS (comparar com a média dos níveis restantes), seria necessário reverter a ordem dos níveis do fator em questão ou rev ​​() cada coluna e rev () cada linha da matriz retornado por contra.helmert?
tim
@tim "uma mudança na ordem das variáveis" não significa " qualquer mudança na ordem das variáveis", mas literalmente uma mudança na ordem das variáveis ​​(ou seja, uma em particular).
Glen_b -Reinstala Monica