Come specificare una matrice di contrasto (in R) per la differenza tra un livello e una media degli altri?


9

Ho un modello di regressione che assomiglia a questo:

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

... o in notazione R: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3

Supponiamo che e X 2 siano variabili categoriali e X 3 sia numerico. La complicazione è che X 1 ha tre livelli X 1 a , X 1 b , X 1 c e invece di contrasti standard, devo testare:X1X2X3X1X1a,X1b,X1c

  • Se l'intercettazione per il livello differisce in modo significativo dall'intercettazione media per i livelli X 1 b e X 1 c .X1aX1bX1c
  • Se la risposta di è significativamente diversa tra il livello X 1 a e la media dei livelli X 1 b e X 1 c .X2X1aX1bX1c
  • Se la pendenza di è significativamente diversa tra il livello X 1 a e la media dei livelli X 1 b e X 1 c .X3X1aX1bX1c

Sulla base di questo post sembra che la matrice che voglio sia ...

 2
-1
-1

contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1)))β1beta1X1bX1cX3=0X2X1a

Qualcuno ha qualche consiglio su come avvolgere la mia testa attorno alla relazione tra mezzi cellulari e contrasti? Grazie. Esiste un nome standard per questo tipo di contrasto?


Aha! Secondo il link pubblicato nella risposta di Glen_b , la linea di fondo è che puoi convertire QUALSIASI confronto di gruppo significa che vuoi un attributo di contrasto in stile R come segue:

  1. Crea una matrice quadrata. Le righe rappresentano i livelli del fattore e le colonne rappresentano i contrasti. Tranne il primo, che dice al modello cosa dovrebbe rappresentare l'intercetta.
  2. Se vuoi che la tua intercettazione sia la media maggiore, riempi la prima colonna con lo stesso valore diverso da zero, non importa quale. Se si desidera che l'intercettazione sia uno dei mezzi di livello, inserire un numero in quella riga e riempire il resto con zeri. Se vuoi che l'intercettazione sia una media di più livelli, metti i numeri in quelle righe e gli zeri nel resto. Se vuoi che sia una media ponderata, usa numeri diversi, altrimenti usa lo stesso numero. Puoi anche inserire valori negativi nella colonna intercetta e questo probabilmente significa anche qualcosa, ma cambia completamente gli altri contrasti, quindi non ho idea di cosa sia
  3. Compila il resto delle colonne con valori positivi e negativi che indicano quali livelli vuoi rispetto a quelli degli altri. Dimentico perché la somma a zero è importante, ma regola i valori in modo che le colonne si sommino a zero.
  4. Trasponi la matrice usando la t()funzione.
  5. Utilizzare ginv()dal MASSpacchetto o solve()per ottenere l'inverso della matrice trasposta.
  6. Rilascia la prima colonna, ad es mycontrast<-mycontrast[,-1]. Ora hai la matrice apx p-1, ma le informazioni che hai inserito per la tua intercettazione sono state codificate nella matrice nel suo insieme durante il passaggio 5.
  7. Se vuoi che le etichette nell'output di riepilogo siano più piacevoli da leggere rispetto lm()all'output predefinito di et al., Dai un nome alle colonne della tua matrice di conseguenza. L'intercettazione verrà sempre nominata automaticamente (Intercept)comunque.
  8. Rendi la tua matrice il nuovo contrasto per il fattore in questione, ad es contrasts(mydata$myfactor)<-mymatrix
  9. Run lm()(e probabilmente molte altre funzioni che utilizzano formule) come di consueto nella serie R senza dover caricare glht, doByo contrasts.

Glen_b, grazie e grazie UCLA Statistical Consulting Group. Il mio professore di statistiche applicate ha trascorso diversi giorni a dedicarmi a questo argomento e non avevo ancora idea di come scrivere la mia matrice di contrasto. E ora, un'ora di lettura e gioco con R, e finalmente penso di averlo capito. Immagino che avrei dovuto fare domanda invece all'UCLA. O l'Università di StackExchange.

Risposte:


5

(0,1,1)

Ciò che R chiama codifica helmert, questo chiama "reverse Helmert". Sono equivalenti a un cambio di ordine variabile.


L'equivalente "fino a un cambio di ordine variabile" dovrebbe essere "dato un'inversione dell'ordine dei livelli"? Quindi, per ottenere il tipo di helmert SAS / SPSS (confrontarlo con la media dei livelli rimanenti), si dovrebbe o invertire l'ordine dei livelli del fattore in questione, oppure rev () ogni colonna quindi rev () ogni riga della matrice restituito da contra.helmert?
tim

@tim "un cambiamento di ordine variabile" non significa " qualsiasi cambiamento di ordine variabile", ma letteralmente un cambiamento di ordine variabile (cioè uno in particolare).
Glen_b -Restate Monica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.