2010-07-29 18 views
41

Busco para extraer el valor de p generado a partir de un análisis de varianza en R.Extracto de p-valor de aov

Esto es lo que estoy corriendo:

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

Rendimiento:

   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 

Cuando miro la estructura, esto es lo que veo. Normalmente puedo trabajar con listas para obtener lo que necesito, pero estoy teniendo un momento difícil con este. Una búsqueda en Google también parecía revelar estructuras mucho más simples de lo que estoy obteniendo.

NOTA: ASQ es mi marco de datos.

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

Al hacer str (prueba), se enumera la estructura del objeto aov. Lo que necesita observar es el resultado de print.aov() (ver métodos (imprimir))! El str de Aniko (resumen (prueba)) hace justamente eso. –

Respuesta

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

No funciona para mí. :( – huggie

+19

Necesito otro [[1]] - pero, oye, eso es genial :) 'resumen (prueba) [[1]] [[" Pr (> F) "]] [[1]]' – BurninLeo

+2

sin BurninLeo's extra [[1]], da la última columna de la tabla de resumen, la segunda fila está en blanco: solo queremos que la primera fila obtenga el valor p, que es lo que extra [[1]] hace. – MichaelChirico

4

Salida str(summary(test)) - que es donde se ve el valor de p.

8

Sé que esto es viejo, pero me miraron a su alrededor en línea y no encontraron una explicación o solución general y de este hilo es una de las primeras cosas que viene en una búsqueda en Google.

Aniko tiene razón, la manera más fácil es buscar en summary(test).

tests <- summary(test) 
str(tests) 

Eso le da una lista de 1 para un objeto aov de medidas independientes pero podría tener varios elementos con medidas repetidas. Con las medidas repetidas cada elemento en la lista se define por el término de error para el elemento en la lista. Donde mucha gente nueva se confunde es que si es entre medidas, el elemento de una lista en solitario no se nombra. Entonces, realmente no lo notan y no entienden por qué no funciona el uso de un selector típico.

En el caso de medidas independientes algo así como los siguientes trabajos.

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

En medidas repetidas es similar, pero también se podría utilizar elementos con nombre como ...

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

en cuenta que hay todavía tenía que hacer que la selección de la lista, ya que cada uno de los elementos de la lista en la repetida El modelo de medidas es nuevamente una lista de 1.

16

ya que el anterior sugieren que no funcionó para mí esto es como me las arreglé para resolverlo:

sum_test = unlist(summary(test)) 

continuación, mirando los nombres con

names(sum_test) 

tengo "Pr (> F) 1" y "Pr (> F) 2", cuando el primero que el valor solicitado, por lo

sum_test["Pr(>F)1"] 

dará el valor solicitado

+0

WOW, eso es increíble! Ya había sido capaz de obtener el valor p de otros métodos, pero nunca he visto el comando "unlist", y esto produce una gran lista optimizada de la salida completa de aov –

3

algo más corto, que en advice de BurningLeo:

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

2 y 9 son las posiciones de p-valor en el modelo myAOV