5

warpbreaksプレインストールされたデータを例として、summary(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     
4

3 に答える 3

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 = FALSEsymnum

于 2013-03-20T09:56:33.643 に答える
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] "***" "**"  "*"   "."   " "  
于 2013-03-20T09:49:28.830 に答える
0

モデルに誤差項が含まれていたため、上記の p 値を抽出する方法はうまくいきませんでした。私は以下を使用して成功しました:

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

[1]afterを追加[["Pr(>F)"]]すると、p 値のみが抽出され、その後のnull値は抽出されません。

また、@csgillespie、コードにはベクトルの最後の要素の後に余分なコンマが含まれているため、R は の後に引数を期待しています0.1:

stars = findInterval(p, c(0, 0.001, 0.01, 0.05, 0.1,))
于 2015-07-18T19:22:48.883 に答える