web-dev-qa-db-fra.com

Extraire la valeur p de aov

Je cherche à extraire la valeur p générée d'un anova dans R. 

Voici ce que je cours:

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

Rendements:

              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

Quand je regarde la structure, voici ce que je vois. Je peux généralement travailler à travers des listes pour obtenir ce dont j'ai besoin, mais j'ai de la difficulté avec celle-ci. Une recherche sur Google semble également révéler des structures beaucoup plus simples que ce que je suis en train de faire.

NOTE: ASQ est mon cadre de données.

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"
48
Btibert3
summary(test)[[1]][["Pr(>F)"]]
63
Greg

depuis que la suggestion ci-dessus n'a pas fonctionné pour moi, voici comment j'ai réussi à le résoudre:

sum_test = unlist(summary(test))

puis en regardant les noms avec

names(sum_test)

j'ai "Pr (> F) 1" et "Pr (> F) 2", quand le premier c'est la valeur demandée, donc 

sum_test["Pr(>F)1"]

donnera la valeur demandée

18
yeinhorn

Je sais que c'est vieux, mais j'ai regardé en ligne et je n'ai pas trouvé d'explication ni de solution générale. Ce fil est l'une des premières choses qui ressort d'une recherche Google.

Aniko a raison, le moyen le plus simple est de regarder dans summary(test).

tests <- summary(test)
str(tests)

Cela vous donne une liste de 1 pour un objet indépendant de mesures mais il peut avoir plusieurs éléments avec des mesures répétées. Avec les mesures répétées, chaque élément de la liste est défini par le terme d'erreur correspondant à l'élément de la liste. Là où beaucoup de nouvelles personnes s'embrouillent, c'est que si c'est entre deux mesures, l'élément de liste unique n'est pas nommé. Ils ne le remarquent donc pas vraiment et ne comprennent pas pourquoi l’utilisation d’un sélecteur classique ne fonctionne pas.

Dans le cas des mesures indépendantes, quelque chose comme les œuvres suivantes.

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

En mesures répétées, c'est similaire, mais vous pouvez également utiliser des éléments nommés comme ...

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

Remarquez qu'il me restait à faire cette sélection de liste car chacun des éléments de liste du modèle de mesures répétées est à nouveau une liste de 1.

8
John

Découvrez str(summary(test)) - c'est là que vous voyez la p-valeur.

4
Aniko

Un peu plus court que dans le conseil de BurningLeo:

summary(test)[[1]][[1,"Pr(>F)"]]
3
Illya K
summary(aov(y~factor(x)))[[1]][[5]][1]
2
Shicheng Guo
unlist(summary(myAOV)[[2]])[[9]]

2 et 9 sont les positions de la valeur p dans le modèle myAOV

0
Alessio