2013-03-20 10 views
4

如何在總結隔離意義欄(AOV())取預安裝數據warpbreaks作爲一個例子...隔離開來總結的意義欄(AOV())中的R

> 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  

回答

5
# 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 = FALSEsymnum函數中。

3

我找不到/想到一個直接的方法,所以我創建了我自己的。我提取數據幀的最後一列,即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] "***" "**" "*" "." " " 
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值,而不是它後值:我用下面取得了成功。

此外,@csgillespie,代碼包括在載體中最終元件後進行額外的逗號,因此R期待0.1後一個參數:

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