从r中的summary(aov())中隔离显着性列

时间:2013-03-20 09:39:16

标签: r summary

如何将预先安装的数据warpbreaks作为示例隔离摘要(aov())中的重要性列...

> a<-summary(aov(breaks~wool*tension,data=warpbreaks))
> a
             Df Sum Sq Mean Sq F value   Pr(>F)    
wool          1    451   450.7   3.765 0.058213 .  
tension       2   2034  1017.1   8.498 0.000693 ***
wool:tension  2   1003   501.4   4.189 0.021044 *  
Residuals    48   5745   119.7                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

> somefunction(a)[,6]

1     .  
2     ***
3     *
4     

3 个答案:

答案 0 :(得分:6)

# Extract the p-values
pvals <- a[[1]][["Pr(>F)"]]

# Use the symnum function to produce the symbols
sigSymbols <- symnum(pvals, na = FALSE, 
                     cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), 
                     symbols = c("***", "**", "*", ".", " "))

返回带有属性的向量:

> sigSymbols
[1] .   *** *      
attr(,"legend")
[1] 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

如果您不想使用legend属性,则可以在legend = FALSE函数中使用参数symnum

答案 1 :(得分:4)

我找不到/想到一个直接的方法,所以我创建了自己的方法。我提取数据框的最后一列,即Pr(>F)

p = a[[1]][,5]

因为那个空白而被淘汰了最后一个值:

p = p[-length(p)]

然后制定了编码:

stars = findInterval(p, c(0, 0.001, 0.01, 0.05, 0.1,))
codes = c("***" , "**","*", ".", " ")
codes[stars]

如果你愿意,你当然可以把它放在一个功能中。

 get_stars = function(p) {
         stars = findInterval(p, c(0, 0.001, 0.01, 0.05, 0.1))
         codes = c("***" , "**","*", ".", " ")
         codes[stars]
     }

示例

R> p = c(0.0005, 0.005, 0.025, 0.075, 0.5)
R> get_stars(p)
[1] "***" "**"  "*"   "."   " "  

答案 2 :(得分:0)

上述提取p值的方法对我不起作用,因为我的模型包含一个错误项。我成功使用了以下内容:

test.summary <- summary(aov(dv ~ iv1 + Error(grouping.factor / iv1 ), data = df))
p <- test.summary[[2]][[1]][["Pr(>F)"]][1]

[1]之后添加[["Pr(>F)"]]只提取p值,而不是 null 之后的值。

另外,在@csgillespie中,你的代码在向量中的最后一个元素之后包含一个额外的逗号,所以R期望在0.1后面有一个参数:

stars = findInterval(p, c(0, 0.001, 0.01, 0.05, 0.1,))