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

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

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

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

統計

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

Q&A

解決済

1回答

226閲覧

R言語上での自動多重比較、検定の実施

Leader731

総合スコア20

R

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

統計

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

0グッド

0クリップ

投稿2019/06/17 19:38

編集2019/06/17 19:49

前提・実現したいこと

R言語上での自動多重検定の実施。
7群の正規性を確認するためにShapiro-Wilk 検定を使って各群を検定したいです。
しかし、ひとつひとつ検定するととても時間がかかるのでfor文などを利用して一度にすべての群間を検定したいと考えています。

発生している問題・

他の言語の場合、群のデータを一次元配列に入れてfor文で各群ごとに代入すれば済む話です。
しかし、R言語の場合そのやり方では難しいようなのでどうかければよいのかを教えて下さい。
コードを貼って示して頂けるとありがたいです。

該当のソースコード

R言語

1#各群のデータ 2v1=c(6.22916667,3.2675,3.47333333,2.91,5.9425,4.99916667,7.8775,5.975,6.13666667) 3v2=c(4.7025,4.42916667,3.19833333,2.92,5.1425,5.1775,6.03333333,5.4175,5.51583333) 4v3=c(4.17916667,3.87583333,3.15333333,3.28916667,5.33166667,4.08583333,5.97416667,4.81416667,7.11833333) 5v4=c(5.06416667,3.53083333,4.28833333,3.99583333,5.32666667,4.40916667,5.99666667,5.83333333,5.8825) 6v5=c(5.9625,4.0575,3.97166667,3.535,5.62333333,4.18333333,6.37833333,5.7075,5.38666667) 7v6=c(5.48666667,4.64166667,4.61583333,4.10833333,4.6875,4.315,6.58666667,4.98833333,5.715) 8v7=c(6.195,5.01,4.7,5.18416667,5.22416667,4.43916667,7.5625,6.925,5.72166667) 9 10#Shapiro-Wilk検定 11#xとyにはv1やv2などの各群の変数名が代入される 12shapiro.test(sort(x)-sort(y)) 13

###エラーメッセージ

Error in sort(x) - sort(y) : non-numeric argument to binary operator

試したこと

R言語

1#各群のデータ 2#Shapiro-Wilk 検定(正規性検定) 3v1=c(6.22916667,3.2675,3.47333333,2.91,5.9425,4.99916667,7.8775,5.975,6.13666667) 4v2=c(4.7025,4.42916667,3.19833333,2.92,5.1425,5.1775,6.03333333,5.4175,5.51583333) 5v3=c(4.17916667,3.87583333,3.15333333,3.28916667,5.33166667,4.08583333,5.97416667,4.81416667,7.11833333) 6v4=c(5.06416667,3.53083333,4.28833333,3.99583333,5.32666667,4.40916667,5.99666667,5.83333333,5.8825) 7v5=c(5.9625,4.0575,3.97166667,3.535,5.62333333,4.18333333,6.37833333,5.7075,5.38666667) 8v6=c(5.48666667,4.64166667,4.61583333,4.10833333,4.6875,4.315,6.58666667,4.98833333,5.715) 9v7=c(6.195,5.01,4.7,5.18416667,5.22416667,4.43916667,7.5625,6.925,5.72166667) 10 11#代入処理 12for (i in 1:7) { 13 for (j in 1:7) { 14 x <- paste("v",i) 15 y <- paste("v",j) 16 shapiro.test(sort(x)-sort(y)) 17 } 18}

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

R Studio
R言語

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

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

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

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

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

KojiDoi

2019/06/17 20:11

sort(x)-sort(y) これは何をしたいのでしょうか?
Leader731

2019/06/17 20:44

統計学の話になりますが、今回は対応ありのデータなので群間の差を取って、その差の値の正規性の検定をする必要があるのです。そのために2群の値を昇順にソートして差をとっています。
KojiDoi

2019/06/17 21:23

これでは"v 1”とかいう文字列を「ソート」することにしかなりませんね。
guest

回答1

0

ベストアンサー

テストしてませんが、多分こんな感じでしょう。リストの使い方をしかと理解してください。

R

1v <- list( 2 c(6.22916667,3.2675,3.47333333,2.91,5.9425,4.99916667,7.8775,5.975,6.13666667), 3 c(4.7025,4.42916667,3.19833333,2.92,5.1425,5.1775,6.03333333,5.4175,5.51583333), 4 c(4.17916667,3.87583333,3.15333333,3.28916667,5.33166667,4.08583333,5.97416667,4.81416667,7.11833333), 5 c(5.06416667,3.53083333,4.28833333,3.99583333,5.32666667,4.40916667,5.99666667,5.83333333,5.8825), 6 c(5.9625,4.0575,3.97166667,3.535,5.62333333,4.18333333,6.37833333,5.7075,5.38666667), 7 c(5.48666667,4.64166667,4.61583333,4.10833333,4.6875,4.315,6.58666667,4.98833333,5.715), 8 c(6.195,5.01,4.7,5.18416667,5.22416667,4.43916667,7.5625,6.925,5.72166667) 9) 10 11for (i in 1:6) { 12 for (j in i+1:7) { 13 shapiro.test(sort(v[[i]])-sort(v[[j]])) 14 } 15}

投稿2019/06/17 21:29

KojiDoi

総合スコア13671

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

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

Leader731

2019/06/18 11:35

ご返信有難うございます。 ```R for (i in 1:6) { for (j in i+1:7) { shapiro.test(sort(v[[i]])-sort(v[[j]])) } } ``` 上記のコードだと ```R Error in v[[j]] : subscript out of bounds ``` となるので ```R for (i in 1:7) { for (j in 1:7) { shapiro.test(sort(v[[i]])-sort(v[[j]])) } } ``` に書き換えました。 すると今度は ```R Error in shapiro.test(sort(v[[i]]) - sort(v[[j]])) : all 'x' values are identical ``` というエラーが出ます。 ググりましたが今ひとつ原因が分かりません。
KojiDoi

2019/06/18 11:55

> subscript out of bounds 計算の優先順位の問題です。カッコが必要でしたね。(i+1):7のようにしてください。 > all 'x' values are identical i=1, j=1のときにsort(x[[i]])-sort(y[[j]])がどうなるか考えれば、原因は明らかです。これぐらいのデバッグはできるようにしましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問