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"
summary(test)[[1]][["Pr(>F)"]]
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
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.
Découvrez str(summary(test))
- c'est là que vous voyez la p-valeur.
Un peu plus court que dans le conseil de BurningLeo:
summary(test)[[1]][[1,"Pr(>F)"]]
summary(aov(y~factor(x)))[[1]][[5]][1]
unlist(summary(myAOV)[[2]])[[9]]
2 et 9 sont les positions de la valeur p dans le modèle myAOV