Eu tenho um modelo de regressão parecido com este:
... 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 c
- 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 c
- 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 c
- 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 c
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
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:
- 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.
- 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.
- 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.
- Transponha a matriz usando a
t()
função - Use a
ginv()
partir daMASS
embalagem ousolve()
para obter o inverso da matriz transposta. - 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. - 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. - Faça da sua matriz o novo contraste para o fator em questão, por exemplo,
contrasts(mydata$myfactor)<-mymatrix
- Executar
lm()
(e provavelmente muitas outras funções que utilizam fórmulas) como normal em R padrão sem ter de cargaglht
,doBy
oucontrasts
.
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.
contra.helmert
?