programing

aov에서 p- 값 추출

projobs 2021. 1. 19. 22:10
반응형

aov에서 p- 값 추출


R의 anova에서 생성 된 p- 값을 추출하려고합니다.

내가 실행하는 것은 다음과 같습니다.

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

수율 :

              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

구조를 보면 이것이 바로 내가 본 것입니다. 나는 일반적으로 필요한 것을 얻기 위해 목록을 살펴볼 수 있지만 이것으로 어려움을 겪고 있습니다. 구글 검색은 또한 내가 얻는 것보다 훨씬 단순한 구조를 드러내는 것처럼 보였다.

참고 : ASQ는 내 데이터 프레임입니다.

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)"]]

위의 제안이 저에게 효과가 없었기 때문에 이것이 해결 방법입니다.

sum_test = unlist(summary(test))

다음으로 이름을보고

names(sum_test)

나는 "Pr (> F) 1"과 "Pr (> F) 2"를 가지고 있는데, 처음에 요청 된 값이 될 때

sum_test["Pr(>F)1"]

요청 된 값을 제공합니다


나는 이것이 오래되었다는 것을 알고 있지만 온라인을 둘러 보았고 설명이나 일반적인 해결책을 찾지 못했고이 스레드는 Google 검색에서 나타나는 첫 번째 항목 중 하나입니다.

Aniko가 맞습니다. 가장 쉬운 방법은 summary(test).

tests <- summary(test)
str(tests)

이는 독립 측정 값 aov 개체에 대해 1 목록을 제공하지만 반복 측정 값이있는 여러 항목을 가질 수 있습니다. 반복 측정 값을 사용하면 목록의 각 항목이 목록의 항목에 대한 오류 용어로 정의됩니다. 많은 새로운 사람들이 혼란스러워하는 곳은 측정치 사이에 있으면 하나의 외로운 목록 항목에 이름이 지정되지 않는다는 것입니다. 따라서 그들은 실제로 그것을 알아 차리지 못하고 일반적인 선택기를 사용하는 것이 왜 작동하지 않는지 이해하지 못합니다.

독립 조치의 경우 다음과 같은 것이 작동합니다.

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

반복 측정에서는 비슷하지만 다음과 같은 명명 된 항목을 사용할 수도 있습니다.

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

반복 측정 모델의 각 목록 항목이 다시 1의 목록이기 때문에 여전히 목록 선택을 수행해야했습니다.


Check out str(summary(test)) - that's where you see the p-value.


Somewhat shorter, than in BurningLeo's advice:

summary(test)[[1]][[1,"Pr(>F)"]]

summary(aov(y~factor(x)))[[1]][[5]][1]

unlist(summary(myAOV)[[2]])[[9]]

2 and 9 are the positions of p-value in myAOV model

ReferenceURL : https://stackoverflow.com/questions/3366506/extract-p-value-from-aov

반응형