Regressione multipla multivariata in R


68

Ho 2 variabili dipendenti (DV) ciascuna delle quali può essere influenzata dall'insieme di 7 variabili indipendenti (IV). I DV sono continui, mentre l'insieme di IV è costituito da un mix di variabili continue e binarie. (Nel codice sotto le variabili continue sono scritte in lettere maiuscole e variabili binarie in lettere minuscole.)

Lo scopo dello studio è scoprire come questi DV sono influenzati dalle variabili IV. Ho proposto il seguente modello di regressione multipla multivariata (MMR):

my.model <- lm(cbind(A, B) ~ c + d + e + f + g + H + I)

Per interpretare i risultati chiamo due affermazioni:

  1. summary(manova(my.model))
  2. Manova(my.model)

Gli output di entrambe le chiamate sono incollati di seguito e sono significativamente diversi. Qualcuno può spiegare quale affermazione tra i due dovrebbe essere scelta per sintetizzare correttamente i risultati di MMR, e perché? Qualsiasi suggerimento sarebbe molto apprezzato.

Output usando l' summary(manova(my.model))istruzione:

> summary(manova(my.model))
           Df   Pillai approx F num Df den Df    Pr(>F)    
c           1 0.105295   5.8255      2     99  0.004057 ** 
d           1 0.085131   4.6061      2     99  0.012225 *  
e           1 0.007886   0.3935      2     99  0.675773    
f           1 0.036121   1.8550      2     99  0.161854    
g           1 0.002103   0.1043      2     99  0.901049    
H           1 0.228766  14.6828      2     99 2.605e-06 ***
I           1 0.011752   0.5887      2     99  0.556999    
Residuals 100                                              
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Output usando l' Manova(my.model)istruzione:

> library(car)
> Manova(my.model)

Type II MANOVA Tests: Pillai test statistic
  Df test stat approx F num Df den Df    Pr(>F)    
c  1  0.030928   1.5798      2     99   0.21117    
d  1  0.079422   4.2706      2     99   0.01663 *  
e  1  0.003067   0.1523      2     99   0.85893    
f  1  0.029812   1.5210      2     99   0.22355    
g  1  0.004331   0.2153      2     99   0.80668    
H  1  0.229303  14.7276      2     99 2.516e-06 ***
I  1  0.011752   0.5887      2     99   0.55700    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Risposte:


78

In poche parole, questo è dovuto al fatto base-R manova(lm())utilizza il confronto modello sequenziale per le cosiddette Tipo I somma dei quadrati, mentre car's Manova()di default usa il confronto modello per il Tipo II somma dei quadrati.

Presumo che tu abbia familiarità con l'approccio del confronto dei modelli con ANOVA o con l'analisi di regressione. Questo approccio definisce questi test confrontando un modello limitato (corrispondente a un'ipotesi nulla) con un modello senza restrizioni (corrispondente all'ipotesi alternativa). Se non hai familiarità con questa idea, raccomando l'eccellente "Progettazione di esperimenti e analisi dei dati" di Maxwell & Delaney (2004).

Per SS di tipo I, il modello con restrizioni in un'analisi di regressione per il tuo primo predittore cè il modello null che utilizza solo il termine assoluto:, lm(Y ~ 1)dove Ynel tuo caso sarebbe il DV multivariato definito da cbind(A, B). Il modello senza restrizioni aggiunge quindi il predittore c, ovvero lm(Y ~ c + 1).

Per SS di tipo II, il modello senza restrizioni in un'analisi di regressione per il tuo primo predittore cè il modello completo che include tutti i predittori ad eccezione delle loro interazioni, ovvero lm(Y ~ c + d + e + f + g + H + I). Il modello con restrizioni rimuove il predittore cdal modello senza restrizioni, ovvero lm(Y ~ d + e + f + g + H + I).

Poiché entrambe le funzioni si basano su confronti di modelli diversi, portano a risultati diversi. Alla domanda a cui è preferibile è difficile rispondere: dipende davvero dalle tue ipotesi.

Ciò che segue presuppone che tu abbia familiarità con il modo in cui le statistiche dei test multivariati come la traccia Pillai-Bartlett vengono calcolate in base al modello null, al modello completo e alla coppia di modelli con restrizioni. Per brevità, considero solo predittori ce H, e solo test per c.

N <- 100                             # generate some data: number of subjects
c <- rbinom(N, 1, 0.2)               # dichotomous predictor c
H <- rnorm(N, -10, 2)                # metric predictor H
A <- -1.4*c + 0.6*H + rnorm(N, 0, 3) # DV A
B <-  1.4*c - 0.6*H + rnorm(N, 0, 3) # DV B
Y <- cbind(A, B)                     # DV matrix
my.model <- lm(Y ~ c + H)            # the multivariate model
summary(manova(my.model))            # from base-R: SS type I
#           Df  Pillai approx F num Df den Df  Pr(>F)    
# c          1 0.06835   3.5213      2     96 0.03344 *  
# H          1 0.32664  23.2842      2     96 5.7e-09 ***
# Residuals 97                                           

Per confronto, il risultato da car's Manova()funzione utilizzando SS di tipo II.

library(car)                           # for Manova()
Manova(my.model, type="II")
# Type II MANOVA Tests: Pillai test statistic
#   Df test stat approx F num Df den Df  Pr(>F)    
# c  1   0.05904   3.0119      2     96 0.05387 .  
# H  1   0.32664  23.2842      2     96 5.7e-09 ***

Ora verifica manualmente entrambi i risultati. Costruisci prima la matrice di progettazione e confrontala con la matrice di progettazione di R.X

X  <- cbind(1, c, H)
XR <- model.matrix(~ c + H)
all.equal(X, XR, check.attributes=FALSE)
# [1] TRUE

Definire ora la proiezione ortogonale per il modello completo ( , usando tutti i predittori). Questo ci dà la matrice .Pf=X(XX)1XW=Y(IPf)Y

Pf  <- X %*% solve(t(X) %*% X) %*% t(X)
Id  <- diag(N)
WW  <- t(Y) %*% (Id - Pf) %*% Y

Modelli vincolato e per il tipo SS I più loro proiezioni e , che portano alla matrice .PrIPuIBI=Y(PuIPPrI)Y

XrI <- X[ , 1]
PrI <- XrI %*% solve(t(XrI) %*% XrI) %*% t(XrI)
XuI <- X[ , c(1, 2)]
PuI <- XuI %*% solve(t(XuI) %*% XuI) %*% t(XuI)
Bi  <- t(Y) %*% (PuI - PrI) %*% Y

Modelli vincolato e per SS tipo II plus loro proiezioni e , portando a matrice . P u I I B I I = Y ( P u I I - P P r I I ) YPrIPuIIBII=Y(PuIIPPrII)Y

XrII <- X[ , -2]
PrII <- XrII %*% solve(t(XrII) %*% XrII) %*% t(XrII)
PuII <- Pf
Bii  <- t(Y) %*% (PuII - PrII) %*% Y

Traccia Pillai-Bartlett per entrambi i tipi di SS: traccia di .(B+W)1B

(PBTi  <- sum(diag(solve(Bi  + WW) %*% Bi)))   # SS type I
# [1] 0.0683467

(PBTii <- sum(diag(solve(Bii + WW) %*% Bii)))  # SS type II
# [1] 0.05904288

Si noti che i calcoli per le proiezioni ortogonali imitano la formula matematica, ma sono una cattiva idea numericamente. crossprod()Invece, si dovrebbero usare decomposizioni QR o SVD in combinazione con .


3
Il mio grandissimo +1 per questa risposta ben illustrata.
chl

Mi chiedo che sebbene usando la lmfunzione sto conducendo una regressione multivariata specificando più di una variabile respose all'interno della lmfunzione. Ho imparato che usando la lmfunzione quando i miei dati sono in realtà multivariati si ottengono risultati errati per errore standard. Ma in questo caso my.model <- lm(cbind(A, B) ~ c + d + e + f + g + H + I); sarà vcov(my.model )sottovalutare l'errore standard o lmin modo intelligente regolare la correlazione tra le variabili dipendenti?
utente 31466

6

Bene, non ho ancora abbastanza punti per commentare la risposta precedente ed è per questo che lo sto scrivendo come risposta separata, quindi per favore scusatemi. (Se possibile, spingimi oltre i 50 punti di ripetizione;)

Quindi ecco i 2 centesimi: i test degli errori di tipo I, II e III sono essenzialmente variazioni dovute allo sbilanciamento dei dati. (Defn Unbalanced: non avere lo stesso numero di osservazioni in ciascuno degli strati). Se i dati sono bilanciati, il test di errore di tipo I, II e III fornisce esattamente gli stessi risultati.

Quindi cosa succede quando i dati sono sbilanciati?

Considera un modello che include due fattori A e B; ci sono quindi due effetti principali e un'interazione, AB. SS (A, B, AB) indica il modello completo SS (A, B) indica il modello senza interazione. SS (B, AB) indica il modello che non tiene conto degli effetti del fattore A e così via.

Questa notazione ora ha un senso. Tienilo a mente.

SS(AB | A, B) = SS(A, B, AB) - SS(A, B)

SS(A | B, AB) = SS(A, B, AB) - SS(B, AB)

SS(B | A, AB) = SS(A, B, AB) - SS(A, AB)

SS(A | B)     = SS(A, B) - SS(B)

SS(B | A)     = SS(A, B) - SS(A)

Tipo I, chiamato anche somma "sequenziale" di quadrati:

1) SS(A) for factor A.

2) SS(B | A) for factor B.

3) SS(AB | B, A) for interaction AB.

Quindi stimiamo l'effetto principale di A prima, l'effetto di B dato A, e quindi stimiamo l'interazione AB dato A e B (Qui sono i dati sbilanciati, le differenze entrano in gioco. Mentre stimiamo prima l'effetto principale e poi l'altro di altri e quindi interazione in una "sequenza")

Tipo II:

1) SS(A | B) for factor A.

2) SS(B | A) for factor B.

Il tipo II verifica il significato dell'effetto principale di A dopo B e B dopo A. Perché non c'è SS (AB | B, A)? L'avvertenza è che il metodo di tipo II può essere utilizzato solo quando abbiamo già testato che l'interazione non è significativa. Dato che non esiste interazione (SS (AB | B, A) è insignificante) il test di tipo II ha una potenza maggiore rispetto al tipo III

Tipo III:

1) SS(A | B, AB) for factor A.

2) SS(B | A, AB) for factor B.

Quindi abbiamo testato l'interazione durante il tipo II e l'interazione era significativa. Ora dobbiamo usare il tipo III in quanto tiene conto del termine di interazione.

Come ha già detto @caracal, quando i dati sono bilanciati, i fattori sono ortogonali e i tipi I, II e III danno tutti gli stessi risultati. Spero che questo possa essere d'aiuto !

Divulgazione: la maggior parte non è opera mia. Ho trovato questa eccellente pagina collegata e mi è venuta voglia di ridimensionarla ulteriormente per renderla più semplice.

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.