4

クラスカルウォリス検定とのペアワイズ比較の後に有意コードを取得する方法はありますか? 有意性コードとは、差が有意な場所を示すために母集団に割り当てられる文字コードを意味します。

従来の anova では、このようなテストHSD.testはライブラリから使用して実行できますagricolaeが、anova の非パラメトリック対応物については、何も見つけることができませんでした。

小さなおもちゃの例:

dv  <-  c(runif(100, 5.0, 10))
iv  <-  as.factor( c(rep("I", 10),  rep("II", 10),  rep("III", 10),  rep("IV", 10), rep("V", 10),
                    rep("VI", 10), rep("VII", 10), rep("VIII", 10), rep("IX", 10), rep("X", 10)))

df  <-  data.frame(dv, iv)

# with anova
library(agricolae)
aov.000  <-  aov(dv ~ iv,  data=df)
HSD.test(aov.000, "iv")

# after KW test: 
(kt  <-  kruskal.test(dv ~ iv,  data=df))

library(coin)
library(multcomp)
NDWD <- oneway_test(dv ~ iv, data = df,
        ytrafo = function(data) trafo(data, numeric_trafo = rank),
        xtrafo = function(data) trafo(data, factor_trafo = function(x)
            model.matrix(~x - 1) %*% t(contrMat(table(x), "Tukey"))),
        teststat = "max", distribution = approximate(B=1000))

### global p-value
print(pvalue(NDWD))

### sites (I = II) != (III = IV) at alpha = 0.01 (page 244)
print(pvalue(NDWD, method = "single-step"))
4

4 に答える 4

5

他の人に役立つ可能性があるため、次のように機能するようです(multcompViewライブラリを使用):

library(multcompView)
mat  <-  data.frame(print(pvalue(NDWD, method = "single-step")))
(a   <-  c(mat[, 1]));  names(a)  <-  rownames(mat)
multcompLetters(a)

または、次のようにします。

test  <-  pairwise.wilcox.test(dv, iv, p.adj="bonferroni", exact=FALSE)
# test  <-  pairwise.wilcox.test(et.ef, s.t, p.adj="holm", exact=FALSE)

library(multcompView)
test$p.value
library(reshape)
(a <- melt(test$p.value))
a.cc  <-  na.omit(a)
a.pvals  <-  a.cc[, 3]
names(a.pvals)  <-  paste(a.cc[, 1], a.cc[, 2], sep="-")
a.pvals
multcompLetters(a.pvals)
于 2013-06-05T09:43:15.477 に答える
3

rcompanion パッケージの cldList 関数を使用することもできます ( https://rcompanion.org/rcompanion/d_06.htmlを参照)。例:

k_test <- k_test$res

library(rcompanion)

cldList(comparison = k_test$Comparison,
    p.value    = PT$P.adj,
    threshold  = 0.05)


Error: No significant differences.

Dunn ポストホックと組み合わせて使用​​したところ、完璧に機能しました。

于 2018-12-17T18:56:14.833 に答える
2

multicomp パッケージを使用して、少なくともグラフィカルに実行できます。

dv  <-  c(runif(100, 5.0, 10))
iv  <-  as.factor( c(rep("I", 10),  rep("II", 10),  rep("III", 10),  rep("IV", 10), rep("V", 10),
                rep("VI", 10), rep("VII", 10), rep("VIII", 10), rep("IX", 10), rep("X", 10)))
df  <-  data.frame(dv, iv)
anova_results  <-  aov(dv ~ iv,  data=df)
library(multcomp)
tuk <- glht(anova_results, linfct = mcp(iv = "Tukey"))
summary(tuk)          # standard display
tuk.cld <- cld(tuk)   # letter-based display
opar <- par(mai=c(1,1,1.5,1))
plot(tuk.cld)
par(opar)

もちろん、ランダムに生成されたデータが与えられた場合、結果のプロットはあまり興味深いものではありませんが、グループ化を提供します-

ここに画像の説明を入力

これは、同じアプローチを使用した私のプロットの 1 つです。

ここに画像の説明を入力 最後に、グラフィックが必要ない場合は、パッケージを掘り下げて、別の場所で使用するグループ化情報を格納する文字列を簡単に見つけることができます。

于 2013-06-04T17:42:46.237 に答える
1

Kruskal テストのコンパクトな文字表示が必要な場合は、同じライブラリagricolaeが関数でそれを許可しているようkruskalです。独自のデータを使用する:

library(agricolae)
kruskal(df$dv, df$iv, group=TRUE, p.adj="bonferroni")$groups
####    trt  means M
#### 1  VI    59.2 a
#### 2  VII   57.0 a
#### 3  IX    56.4 a
#### 4  II    55.0 a
#### ...

(まあ、この例では、グループは異なるとは見なされません...)

于 2016-09-22T10:11:11.083 に答える