从 av 中提取 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"
99460 次浏览

看看 str(summary(test)),你就能看到 p 值了。

这里:

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

我知道这是旧的,但我在网上寻找,没有找到一个解释或一般的解决方案,这个线程是第一件事情,出现在谷歌搜索。

阿尼科是对的,最简单的方法是在 summary(test)中寻找。

tests <- summary(test)
str(tests)

这将为一个独立度量单位对象提供一个1的列表,但它可能包含多个具有重复度量的项。通过重复度量,列表中的每个项都由列表中的项的错误术语定义。许多新人感到困惑的地方在于,如果它在两个度量之间,那么一个单独的列表项就不会被命名。因此,他们并没有真正注意到这一点,也不明白为什么使用一个典型的选择器不起作用。

在独立度量的情况下,下面这样的方法是有效的。

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

在重复的测量中,它是相似的,但是你也可以使用命名的项目,如..。

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

请注意,我仍然必须进行列表选择,因为重复度量模型中的每个列表项目又是一个1的列表。

因为上面的建议对我不起作用,所以我设法解决了这个问题:

sum_test = unlist(summary(test))

然后看名字

names(sum_test)

我有“ Pr (> F)1”和“ Pr (> F)2”,当第一个值为所请求的值时,所以

sum_test["Pr(>F)1"]

将给出所请求的值

比《燃烧的狮子》中的 建议短一些:

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

2和9是 myAOV 模型中 p 值的位置