質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
RStudio

RStudioは、Rのプログラミングを効率化する統合開発環境です。統計計算とグラフィックスができるプログラミング言語であるRのIDEでOSSで公開されています。ソースコードやコンソールなどが一つの画面に見やすく配置されている点が特徴。コマンド名以外に、関数名やパッケージ名も補完できます。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

解決済

1回答

367閲覧

Rstudioのcld関数を用いて、tukeyHSD検定で得られた有意差に降順でアルファベットをつけたいです。

galileo_toshi

総合スコア1

RStudio

RStudioは、Rのプログラミングを効率化する統合開発環境です。統計計算とグラフィックスができるプログラミング言語であるRのIDEでOSSで公開されています。ソースコードやコンソールなどが一つの画面に見やすく配置されている点が特徴。コマンド名以外に、関数名やパッケージ名も補完できます。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

0クリップ

投稿2023/11/27 01:00

編集2023/11/27 01:02

実現したいこと

Rstudioのcld関数を用いて、tukeyHSD検定で得られた有意差に降順でアルファベットをつけたいです。
ご教示をお願い致します。

前提

Rstudioのcld関数を用いて、有意なグループにアルファベットをつけようとすると、アルファベットの順序が狂ってしまいます(降順でも昇順でもありません)。
私は植物を研究で扱っております。
特定の時期において、供試した4品種の茎の数に有意差があります。

該当のソースコード

R

1library(multcomp) 2#変数df2に最高分げつ期のデータを指定 3df2= df1[df1$stage =="maximum_tillering",] 4df2 5#1元配置の分散分析 6SG_res1 = anova(lm(df2$tiller.numnber ~ df2$cultivar)) 7summary(SG_res1) 8#tukey検定 9#データの整理をして、分散分析の結果をtuk1に入れる 10tuk1 = data.frame(x= factor(df2$cultivar),y= df2$tiller.numnber) 11TukeyHSD(aov(y ~ x,data = tuk1)) 12#本来では品種の名前が入っていますが、今回は伏せています 13tuk1$x = factor(tuk1$x,levels = c("a","b", 14 "c", "d")) 15 16#アルファベットを表示 17tuk2=aov(y ~ x,data = tuk1) 18SG_res2 = glht(tuk2,linfct=mcp(x="Tukey")) 19summary(SG_res2) 20cld(SG_res2,decreasing = T)

試したこと

ラボ内の人から、Rのバージョンを下げるとアルファベットの順序が揃うらしいので、やってみましたがダメでした。
宜しくお願いします。

補足情報(FW/ツールのバージョンなど)

R4.3.1 (R4.2.2でも無理でした)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

little_street

2023/11/29 01:38

4品種の内どの2品種の間にも有意差がある状況なら(decreasing=TRUE 指定では)「"d" "c" "b" "a"」という出力が期待されますが,実際にはどのようなアルファベットが出力されるのでしょうか。
galileo_toshi

2023/11/29 07:50

ご回答ありがとうございます。 おっしゃる通り、どの2品種間にも有意差がある状況であれば、コンソールに「"d" "c" "b" "a"」の様に出力されます。 しかしながら、アルファベットの上に記載されている品種名と対応しておりません。 例えば、4品種の名前がa,b,c,dで、分げつ数が多い順にd,a,b,cだとします。 本来であれば、コンソール上に a b c d #品種名 "b" "c" "d" "a" と出てきてほしいのですが、「"d" "c" "b" "a"」の順で出力されてしまいます。
little_street

2023/11/29 10:58

私の環境で検討した内容を回答欄に記載しました。
guest

回答1

0

ベストアンサー

例えば、4品種の名前がa,b,c,dで、分げつ数が多い順にd,a,b,cだとします。

同様の大小関係となるように値を設定(mango > apple > peach > melon)し多重比較してみましたが,私の環境「macOS(M1) 13.6.1, R 4.3.2, multcomp 1.4.25」でも同様の結果です(下記の記述例参照)。

multcomp のマニュアルcld の部分に目を通しましたが値の大小関係と連動してアルファベットを設定する機能は読み取れませんでした。現在その機能には対応していないのかもしれません。

なお,下記の記述例の最後に記載のように値の大小関係に合わせて x のレベルを設定し多重比較すれば値の大小関係とアルファベットを対応させることはできるようです

R

1library(multcomp, quietly=TRUE) 2 3set.seed(7) 4N <- 10 5tuk1 <- data.frame( 6 x = factor(rep(c("apple", "peach", "melon", "mango"), rep(N, 4))), 7 y = c(as.integer(rnorm(N, 25, 2.5)), as.integer(rnorm(N, 20, 2.5)), 8 as.integer(rnorm(N, 15, 2.5)), as.integer(rnorm(N, 30, 2.5)))) 9 10tuk1$x <- factor(tuk1$x, levels = c("apple", "peach", "melon", "mango")) 11tuk2 <- aov(y ~ x, data = tuk1) 12SG_res2 <- glht(tuk2, linfct = mcp(x="Tukey")) 13summary(SG_res2) 14## 15## Simultaneous Tests for General Linear Hypotheses 16## 17## Multiple Comparisons of Means: Tukey Contrasts 18## 19## 20## Fit: aov(formula = y ~ x, data = tuk1) 21## 22## Linear Hypotheses: 23## Estimate Std. Error t value Pr(>|t|) 24## peach - apple == 0 -3.400 1.148 -2.962 0.0263 * 25## melon - apple == 0 -9.400 1.148 -8.189 <0.001 *** 26## mango - apple == 0 4.400 1.148 3.833 0.0026 ** 27## melon - peach == 0 -6.000 1.148 -5.227 <0.001 *** 28## mango - peach == 0 7.800 1.148 6.795 <0.001 *** 29## mango - melon == 0 13.800 1.148 12.021 <0.001 *** 30## --- 31## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 32## (Adjusted p values reported -- single-step method) 33cld(SG_res2, decreasing=TRUE) 34## apple peach melon mango 35## "d" "c" "b" "a" 36 37tuk1$x <- factor(tuk1$x, levels = c("mango", "apple", "peach", "melon")) 38tuk2 <- aov(y ~ x, data = tuk1) 39SG_res2 <- glht(tuk2, linfct = mcp(x="Tukey")) 40cld(SG_res2, decreasing=TRUE) 41## mango apple peach melon 42## "d" "c" "b" "a"

投稿2023/11/29 10:56

編集2023/11/30 00:25
little_street

総合スコア319

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

galileo_toshi

2023/12/03 08:08

丁寧なご回答ありがとうございます。 やはり、値の大小と連動してアルファベットは設定してもらえないのですね。 ご説明の通りにデータフレームの品種の序列を、降順に並び変えることによって対応しました。 #変数df2に特定時期のデータを指定 df2= df1[df1$stage =="tillering",] df2 #tukeyHSD検定 #データの整理をして、分散分析の結果をtuk1に入れる tuk1 = data.frame(x= factor(df2$cultivar),y= df2$tiller.numnber) TukeyHSD(aov(y ~ x,data = tuk1)) tuk1.g = tuk1 %>% #品種ごとにグループ分け group_by(x) %>% #品種ごとの平均値を計算 summarize(y = mean(y)) %>% #品種ごとの平均値が大きい順に序列を変更 arrange(desc(y)) #平均値が高い順にベクトルを作成 order_vector = as.character(tuk1.g$x) %>% as.vector() #元のデータフレームの序列を、平均値が高い順に変更 tuk1$x = factor(tuk1$x, levels = order_vector) #アルファベットを表示 tuk2=aov(y ~ x,data = tuk1) SG_res2 = glht(tuk2,linfct=mcp(x="Tukey")) summary(SG_res2) cld(SG_res2) ggplot(data = tuk1, aes(x = x, y = y)) + geom_boxplot() + theme(plot.margin = unit(c(0.5, 0.5, 0.5, 0.5),"cm"))
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問