2014-10-13 8 views
5

Questo è per la mia tesi di laurea! Il mio consulente non sa come usare R e non so come usare qualcos'altro, quindi eccomi qui.ANOVA in R: Gradi di libertà quasi tutti uguali 1

Ho una serie di dati che inizia in questo modo:

> d.weight 
    R N P C D.weight 
1 1 0 0 GO  45.3 
2 2 0 0 GO  34.0 
3 3 0 0 GO  19.1 
4 4 0 0 GO  26.6 
5 5 0 0 GO  23.5 
6 1 45 0 GO  22.1 
7 2 45 0 GO  15.5 
8 3 45 0 GO  23.4 
9 4 45 0 GO  15.8 
10 5 45 0 GO  42.9 
... 

e così via.

  • R è rappresentante e ce ne sono 5 (1-5).
  • N è il livello di azoto e anche 5 (0, 45, 90, 180, 360).
  • P è il livello di fosforo e anche 5 (0, 35, 70, 140, 280).
  • C è una combinazione di impianto e ci sono 4 (GO, GB, LO, LB).
  • Il peso è secco in grammi.

Tuttavia, quando eseguo un ANOVA ottengo i gradi di libertà sbagliati. Di solito eseguo i miei ANOVA su sottoinsiemi di quel set completo di dati, ma facciamo solo un'analisi che altrimenti non farei, solo così puoi vedere che quasi tutti i Df sono sbagliati.

> example.aov=aov(D.weight ~ R+N+P+C, data=d.weight) 
> summary(example.aov) 
     Df Sum Sq Mean Sq F value Pr(>F)  
R    1 1158 1158 9.484 0.00226 ** 
N    1 202  202 1.657 0.19900  
P    1 11040 11040 90.408 < 2e-16 *** 
C    3 41032 13677 112.010 < 2e-16 *** 
Residuals 313 38220  122 

Quindi, fondamentalmente, l'unico corretto è il fattore C. È perché ha le lettere al posto dei numeri?

Ho trovato da qualche parte che se scrivo interazione() con ogni termine, ottengo la Df corretta, ma non so se è la cosa giusta da fare in generale. Per esempio:

> example.aov2=aov(D.weight ~ interaction(R)+interaction(N)+interaction(P)+interaction(C), data=d.weight) 
> summary(example.aov2) 
       Df Sum Sq Mean Sq F value Pr(>F)  
interaction(R) 4 7423 1856 19.544 2.51e-14 *** 
interaction(N) 4 543  136 1.429 0.224  
interaction(P) 4 13788 3447 36.301 < 2e-16 *** 
interaction(C) 3 41032 13677 144.042 < 2e-16 *** 
Residuals  304 28866  95 

ho provato con il fattore C solo per vedere se è incasinato tutto:

> example.aov3=aov(D.weight ~ C, data=d.weight) 
> summary(example.aov3) 
      Df Sum Sq Mean Sq F value Pr(>F)  
C    3 41032 13677 85.38 <2e-16 *** 
Residuals 316 50620  160     
> 
> example.aov4=aov(D.weight ~ interaction(C), data=d.weight) 
> summary(example.aov4) 
       Df Sum Sq Mean Sq F value Pr(>F)  
interaction(C) 3 41032 13677 85.38 <2e-16 *** 
Residuals  316 50620  160 

E sembra lo stesso. Dovrei aggiungere interazione() ovunque?

Grazie per l'aiuto!

+2

convertire le variabili numeriche in fattori ... ad esempio 'facs <- c (" R "," N "," P "); d_weight [facs] <- lapply (d.weight [facs], factor) ' –

+0

WOW. Sono impazzito per come 1h cercando di capirlo da solo, e l'hai risolto in meno di 1 minuto. GRAZIE. – XGF

+0

Ok, questo ha risolto un problema ma ora ne ha causato un altro. Quando provo a creare un grafico a linee con N o P nell'asse x, poiché N e P non sono più variabili continue, ottengo invece un grafico a barre invece ... abbastanza sorprendentemente. Ho bisogno che il programma pensi che N e P siano continui in alcuni casi, quindi ... cosa dovrei fare? – XGF

risposta

4

R determina se deve trattare variabili come categoriali (analisi tipo ANOVA) o continue (analisi tipo regressione) controllando se sono variabili numeric o factor. Più semplicemente, è possibile convertire i predittive variabili (indipendenti) a fattori tramite

facs <- c("R","N","P") 
d_weight[facs] <- lapply(d.weight[facs],factor) 

Se si desidera creare variabili ausiliarie invece di sovrascrivere si potrebbe fare qualcosa di simile

for (varname in facs) { 
    d_weight[[paste0("f",varname)]] <- factor(d_weight[[varname]]) 
} 

Ci potrebbe essere un più compatto modo per farlo ma che dovrebbe servire ...

+0

domanda successiva: intendevi creare una nuova variabile quando hai scritto "d_weight [facs]", o intendevi scrivere "d.weight [facs]"? – daOnlyBG

Problemi correlati