Come eseguire un ANCOVA in R


17

Voglio eseguire un'analisi ANCOVA dei dati riguardanti la densità delle epifite vegetali. All'inizio, vorrei sapere se c'è qualche differenza nella densità della pianta tra due pendenze, una N e una S, ma ho altri dati come l'altitudine, l'apertura del baldacchino e l'altezza della pianta ospite. So che la mia covariata dovrebbe essere le due pendenze (N e S). Ho costruito questo modello che funziona in R e anche se non ho idea se funziona bene. Inoltre vorrei sapere qual è la differenza se uso il simbolo +o *.

model1 <- aov(density~slope+altitude+canopy+height)
summary(model1)
model1

3
+ calcolerà solo gli effetti principali, * stimerà le interazioni tra i fattori collegati a *. I framework ANCOVA di solito stimano solo un effetto principale del fattore continuo, ma le interazioni tra tutti i fattori raggruppati.
Russellpierce,

Risposte:


14

Lo strumento di base per questo è lm; si noti che aovè un wrapper per lm.

In particolare, se si dispone di alcune variabili di raggruppamento (fattore), g e una covariata continua X , il modello y ~ x + gsi adatterebbe a un modello ANCOVA effetti principali, mentre y ~ x * gsi adatterebbe un modello che include l'interazione con la covariata. aovprenderà le stesse formule.

Prestare particolare attenzione alla guida Notein aov.

Per quanto riguarda +vs *, russellpierce lo copre praticamente, ma ti consiglio di guardare ?lme ?formulasoprattutto la sezione 11.1 del manuale An Introduction to R che viene fornito con R (o puoi trovarlo online se non hai capito come per trovarlo sul tuo computer, più facilmente, questo implica trovare il menu a discesa "Aiuto" in R o RStudio).


Supponiamo di avere due fattori gruppo , e due covariate x 1 , x 2 , con il mio modello essendo y i j = μ + α i + η j + x i j 1 γ 1 + x i j 2 γ 2 + ϵ i j Sì ~ g_1 + g_2 + x_1 + x_2 fa lo stesso trucco? Esegui i valori F ottenuti contro x_1 e x_2 test γ 1 = 0 e γg1,g2X1,X2
yioj=μ+αio+ηj+Xioj1γ1+Xioj2γ2+εioj
γ1=0 rispettivamente? γ2=0
Sayan,

Non sono sicuro di come mi sia perso questo. Sì. .... e se vuoi testarli entrambi contemporaneamente, misura entrambi con e senza di essi e passa gli oggetti lm montati anova(vedrai presto se li dai nell'ordine sbagliato perché alcune SS saranno negative se lo fai )
Glen_b -Restate Monica

10

Consiglio di ottenere e leggere Discovering Statistics utilizzando R by Field. Ha una bella sezione su ANCOVA.

Per eseguire ANCOVA in R, caricare i seguenti pacchetti:

car
compute.es
effects
ggplot2
multcomp
pastecs
WRS

Se stai usando lmo aov(io uso aov) assicurati di impostare i contrasti usando la funzione "contrasti" prima di eseguire uno aovo lm. R utilizza per impostazione predefinita contrasti non ortogonali che possono rovinare tutto in un ANCOVA. Se si desidera impostare contrasti ortogonali utilizzare:

contrasts(dataname$factorvariable)=contr.poly(# of levels, i.e. 3) 

quindi esegui il tuo modello come

model.1=aov(dv~covariate+factorvariable, data=dataname)

Per visualizzare il modello utilizzare:

Anova(model.1, type="III") 

Assicurati di usare maiuscole "A" Anovaqui e non anova. Ciò darà risultati usando SS di tipo III.

summary.lm(model.1)darà un altro sommario e include l'R-sq. produzione.

posth=glht(model.1, linfct=mcp(factorvariable="Tukey"))  ##gives the post-hoc Tukey analysis
summary(posth) ##shows the output in a nice format.

Se si desidera verificare l'omogeneità delle pendenze di regressione, è possibile includere anche un termine di interazione per IV e covariata. Sarebbe:

model=aov(dv~covariate+IV+covariate:IV, data=dataname)

Se il termine di interazione è significativo, non si ha omogeneità.


Perché i contrasti non ortogonali rovinano tutto?
tintin

1
Per rispondere alla domanda sopra sul "perché i contrasti non ortogonali rovinano tutto". La risposta è che R per impostazione predefinita è non ortogonale (cioè la differenza tra i mezzi) che può causare problemi se si desidera vedere il contributo di ciascun IV separatamente. Quando specifichiamo contrasti ortogonali diciamo a R che vogliamo che le SS per gli IV siano completamente partizionate e non sovrapposte. In questo modo possiamo vedere la variazione attribuita a ciascun predittore in modo chiaro e chiaro. Se non si specifica, R utilizza automaticamente un approccio più liberale al contrasto.

2
Perché l'interesse per il tipo III SS?
Frank Harrell,

4

Ecco una documentazione complementare http://goo.gl/yxUZ1R della procedura suggerita da @Butorovich. Inoltre, la mia osservazione è che quando la covariata è binaria, l'uso del sommario (oggetto lm.) darebbe la stessa stima IV generata da Anova (oggetto lm.oggetto, tipo = "III").


1
Non è chiaro che questa dovrebbe essere una risposta. È? In tal caso, si prega di modificare per chiarire. Se è una domanda, ti preghiamo di fare clic sul ASK QUESTIONin alto e chiederlo lì. Quindi possiamo aiutarti correttamente.
gung - Ripristina Monica

Concordato. Il messaggio è stato rivisto come una risposta (complementare) alla precedente.
XX

3

Usiamo l'analisi di regressione per creare modelli che descrivono l'effetto della variazione nelle variabili predittive sulla variabile di risposta. A volte se abbiamo una variabile categoriale con valori come Sì / No o Maschio / Femmina ecc., La semplice analisi di regressione fornisce risultati multipli per ciascun valore della variabile categoriale. In tale scenario, possiamo studiare l'effetto della variabile categoriale utilizzandola insieme alla variabile predittore e confrontando le linee di regressione per ciascun livello della variabile categoriale. Tale analisi è definita come Analisi della covarianza chiamata anche ANCOVA.

Esempio
Si consideri il Rset di dati integrato mtcars. In esso osserviamo che il campoam rappresenta il tipo di trasmissione (automatica o manuale). È una variabile categoriale con valori 0 e 1. Il valore delle miglia per gallone ( mpg) di un'auto può anche dipendere da essa oltre al valore della potenza del cavallo ( hp). Studiamo l'effetto del valore di amsulla regressione tra mpge hp. Viene fatto utilizzando la aov()funzione seguita dalla anova()funzione per confrontare le regressioni multiple.

L'inserimento dei dati
Creazione di un frame di dati contenente i campi mpg, hpeam dal set di dati mtcars. Qui prendiamo mpgcome variabile di risposta, hpcome variabile predittiva e amcome variabile categoriale.

input <- mtcars[,c("am","mpg","hp")]
head(input)

Quando eseguiamo il codice sopra, produce il seguente risultato:

                  am  mpg  hp
Mazda RX4          1 21.0 110
Mazda RX4 Wag      1 21.0 110
Datsun 710         1 22.8  93
Hornet 4 Drive     0 21.4 110
Hornet Sportabout  0 18.7 175
Valiant            0 18.1 105

Analisi ANCOVA
Creiamo un modello di regressione prendendo hpcome variabile predittore e mpgcome variabile di risposta tenendo conto dell'interazione tra ame hp.

Modello con interazione tra variabile categoriale e variabile predittiva

Crea modello di regressione 1

result1 <- aov(mpg~hp*am,data=mtcars)
summary(result1)

Quando eseguiamo il codice sopra, produce il seguente risultato:

            Df Sum Sq Mean Sq F value   Pr(>F)    
hp           1  678.4   678.4  77.391 1.50e-09 ***
am           1  202.2   202.2  23.072 4.75e-05 ***
hp:am        1    0.0     0.0   0.001    0.981    
Residuals   28  245.4     8.8                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Questo risultato mostra che sia la potenza del cavallo che il tipo di trasmissione hanno un effetto significativo sulle miglia per gallone poiché il valore p in entrambi i casi è inferiore a 0,05. Ma l'interazione tra queste due variabili non è significativa in quanto il valore p è superiore a 0,05.

Modello senza interazione tra variabile categoriale e variabile predittiva

Crea il modello di regressione2

result2 <- aov(mpg~hp+am,data=mtcars)
summary(result2)

Quando eseguiamo il codice sopra, produce il seguente risultato:

            Df Sum Sq Mean Sq F value   Pr(>F)    
hp           1  678.4   678.4   80.15 7.63e-10 ***
am           1  202.2   202.2   23.89 3.46e-05 ***
Residuals   29  245.4     8.5                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Questo risultato mostra che sia la potenza del cavallo che il tipo di trasmissione hanno un effetto significativo sulle miglia per gallone poiché il valore p in entrambi i casi è inferiore a 0,05.

Confronto tra due modelli
Ora possiamo confrontare i due modelli per concludere se l'interazione delle variabili è veramente insignificante. Per questo usiamo la anova()funzione.

 anova(result1,result2)

 Model 1: mpg ~ hp * am
 Model 2: mpg ~ hp + am
   Res.Df    RSS Df  Sum of Sq     F Pr(>F)
 1     28 245.43                           
 2     29 245.44 -1 -0.0052515 6e-04 0.9806

Poiché il valore p è maggiore di 0,05, concludiamo che l'interazione tra potenza del cavallo e tipo di trasmissione non è significativa. Quindi il chilometraggio per gallone dipenderà in modo simile dalla potenza del cavallo dell'auto sia in modalità di trasmissione automatica che manuale.


Quindi quale è venuto prima, questa risposta o questo post sui tutorial indicano? tutorialspoint.com/r/r_analysis_of_covariance.htm . Questa risposta dovrebbe essere cancellata come plagio? O i tutorial puntano semplicemente a copiare da qui?
John,
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.