2010-07-29 15 views
41

Ich suche den p-Wert von einem anova in R.Extract p-Wert von aov

Hier erzeugt zu extrahieren ist, was ich bin mit:

test <- aov(asq[,9] ~ asq[,187]) 
summary(test) 

Ausbeuten:

   Df Sum Sq Mean Sq F value Pr(>F)  
asq[, 187]  1 3.02 3.01951 12.333 0.0004599 *** 
Residuals 1335 326.85 0.24483      
--- 
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
12 observations deleted due to missingness 

Wenn ich die Struktur sehe, ist das, was ich sehe. Ich kann normalerweise Listen durcharbeiten, um zu bekommen, was ich brauche, aber ich habe eine harte Zeit mit dieser. Eine Google Suche schien auch viel einfachere Strukturen zu offenbaren, als ich bekomme.

HINWEIS: ASQ ist mein Datenrahmen.

str(test) 

List of 13 
$ coefficients : Named num [1:2] 0.2862 0.0973 
    ..- attr(*, "names")= chr [1:2] "(Intercept)" "asq[, 187]" 
$ residuals : Named num [1:1337] 0.519 0.519 -0.481 -0.481 -0.481 ... 
    ..- attr(*, "names")= chr [1:1337] "1" "2" "3" "4" ... 
$ effects  : Named num [1:1337] -16.19 -1.738 -0.505 -0.505 -0.505 ... 
    ..- attr(*, "names")= chr [1:1337] "(Intercept)" "asq[, 187]" "" "" ... 
$ rank   : int 2 
$ fitted.values: Named num [1:1337] 0.481 0.481 0.481 0.481 0.481 ... 
    ..- attr(*, "names")= chr [1:1337] "1" "2" "3" "4" ... 
$ assign  : int [1:2] 0 1 
$ qr   :List of 5 
    ..$ qr : num [1:1337, 1:2] -36.565 0.0273 0.0273 0.0273 0.0273 ... 
    .. ..- attr(*, "dimnames")=List of 2 
    .. .. ..$ : chr [1:1337] "1" "2" "3" "4" ... 
    .. .. ..$ : chr [1:2] "(Intercept)" "asq[, 187]" 
    .. ..- attr(*, "assign")= int [1:2] 0 1 
    ..$ qraux: num [1:2] 1.03 1.02 
    ..$ pivot: int [1:2] 1 2 
    ..$ tol : num 1e-07 
    ..$ rank : int 2 
    ..- attr(*, "class")= chr "qr" 
$ df.residual : int 1335 
$ na.action :Class 'omit' Named int [1:12] 26 257 352 458 508 624 820 874 1046 1082 ... 
    .. ..- attr(*, "names")= chr [1:12] "26" "257" "352" "458" ... 
$ xlevels  : list() 
$ call   : language aov(formula = asq[, 9] ~ asq[, 187]) 
$ terms  :Classes 'terms', 'formula' length 3 asq[, 9] ~ asq[, 187] 
    .. ..- attr(*, "variables")= language list(asq[, 9], asq[, 187]) 
    .. ..- attr(*, "factors")= int [1:2, 1] 0 1 
    .. .. ..- attr(*, "dimnames")=List of 2 
    .. .. .. ..$ : chr [1:2] "asq[, 9]" "asq[, 187]" 
    .. .. .. ..$ : chr "asq[, 187]" 
    .. ..- attr(*, "term.labels")= chr "asq[, 187]" 
    .. ..- attr(*, "order")= int 1 
    .. ..- attr(*, "intercept")= int 1 
    .. ..- attr(*, "response")= int 1 
    .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
    .. ..- attr(*, "predvars")= language list(asq[, 9], asq[, 187]) 
    .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric" 
    .. .. ..- attr(*, "names")= chr [1:2] "asq[, 9]" "asq[, 187]" 
$ model  :'data.frame': 1337 obs. of 2 variables: 
    ..$ asq[, 9] : int [1:1337] 1 1 0 0 0 1 1 1 0 0 ... 
    ..$ asq[, 187]: int [1:1337] 2 2 2 2 2 2 2 2 2 2 ... 
    ..- attr(*, "terms")=Classes 'terms', 'formula' length 3 asq[, 9] ~ asq[, 187] 
    .. .. ..- attr(*, "variables")= language list(asq[, 9], asq[, 187]) 
    .. .. ..- attr(*, "factors")= int [1:2, 1] 0 1 
    .. .. .. ..- attr(*, "dimnames")=List of 2 
    .. .. .. .. ..$ : chr [1:2] "asq[, 9]" "asq[, 187]" 
    .. .. .. .. ..$ : chr "asq[, 187]" 
    .. .. ..- attr(*, "term.labels")= chr "asq[, 187]" 
    .. .. ..- attr(*, "order")= int 1 
    .. .. ..- attr(*, "intercept")= int 1 
    .. .. ..- attr(*, "response")= int 1 
    .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
    .. .. ..- attr(*, "predvars")= language list(asq[, 9], asq[, 187]) 
    .. .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric" 
    .. .. .. ..- attr(*, "names")= chr [1:2] "asq[, 9]" "asq[, 187]" 
    ..- attr(*, "na.action")=Class 'omit' Named int [1:12] 26 257 352 458 508 624 820 874 1046 1082 ... 
    .. .. ..- attr(*, "names")= chr [1:12] "26" "257" "352" "458" ... 
- attr(*, "class")= chr [1:2] "aov" "lm" 
+0

Wenn Sie das tun str (Test), es listet die Struktur des aov-Objekts auf. Was Sie sehen müssen, ist die Ausgabe von print.aov() (siehe Methoden (Drucken))! Anikos str (Zusammenfassung (Test)) macht genau das. –

Antwort

52
summary(test)[[1]][["Pr(>F)"]] 
+2

Es funktioniert nicht für mich. :( – huggie

+19

Ich brauche eine andere [[1]] - aber, hey, das ist cool :) 'Zusammenfassung (Test) [[1]] [[" Pr (> F) "]] [[1]]' – BurninLeo

+2

ohne BurninLeo's extra [[1]], es gibt die letzte Spalte der Übersichtstabelle, deren zweite Zeile leer ist - wir wollen nur die erste Zeile den p-Wert bekommen, was das extra [[1]] tut. – MichaelChirico

4

Check out str(summary(test)) - das ist, wo Sie den p-Wert zu sehen.

8

Ich weiß, das ist alt, aber ich sah online rund um und hatte keine Erklärung oder allgemeine Lösung und dieser Thread ist eines der ersten Dinge, die in einer Google-Suche kommt.

Aniko hat Recht, der einfachste Weg ist in summary(test) suchen.

Das gibt Ihnen eine Liste von 1 für eine unabhängige Messungen aov Objekt, aber es könnte mehrere Elemente mit wiederholten Maßnahmen haben. Bei den wiederholten Messungen wird jeder Eintrag in der Liste durch den Fehlerbegriff für den Eintrag in der Liste definiert. Wo viele neue Leute verwirrt werden, ist das, wenn es zwischen Maßen ist, der einsame Listenpunkt nicht benannt. Sie bemerken das nicht wirklich und verstehen nicht, warum die Verwendung eines typischen Selektors nicht funktioniert.

Im unabhängigen Maßnahmen Fall etwas wie das Folgende funktioniert.

tests[[1]]$'Pr(>F)' 

In wiederholten Messungen ähnlich es ist, aber man könnte auch benannte Elemente verwenden wie ...

myModelSummary$'Error: subject:A'[[1]]$'Pr(>F)' 

Hinweis gibt, weil jeder der Listenelemente in der wiederholte ich hatte noch diese Liste Auswahl zu tun Maßmodell ist wieder eine Liste von 1.

16

da die empfiehlt, oben nicht für mich arbeiten das ist, wie ich es lösen verwaltet:

sum_test = unlist(summary(test)) 

dann an den weiteren Namen mit

names(sum_test) 

ich habe "Pr (> F) 1" und "Pr (> F) 2", wenn der erste es den gewünschten Wert einstellen, so

sum_test["Pr(>F)1"] 

wird den gewünschten Wert geben

+0

Wow, das ist super !!! Ich war bereits in der Lage, den p-Wert von anderen Methoden zu bekommen, aber ich habe nie den "unlist" -Befehl gesehen, und dies erzeugt eine große rationalisierte Liste der kompletten aov-Ausgabe –

3

etwas kürzer, als in BurningLeo der advice:

summary(test)[[1]][[1,"Pr(>F)"]] 
2
summary(aov(y~factor(x)))[[1]][[5]][1] 
0
unlist(summary(myAOV)[[2]])[[9]] 

2 und 9 sind die Positionen der p-Wert in myAOV Modell