No.14511 C( )とデータフレームの関係  【大学院生です】 2011/04/09(Sat) 21:18

よろしくお願いいたします。

青木先生のHPや著書をベースにRの練習をしているところですが,理解できない箇所が出てきましたので,ご指導いただけませんか。

例 えば,青木先生のHPに準備されているTukeyの方法による多重比較において,青木先生の使用例はc(14,15...)を使ったものとなっておりま す。このデータが,ExcelにA列からE列まで入力されているとします。それをread.delim(...)で読み込んで,

source("http://aoki2.si.gunma-u.ac.jp/R/src/tukey.R", encoding="euc-jp")

をそのまま使って分析を行うことはできないでしょうか?もし不可の場合は,Excelのデータフレームをどう変形させれば,上記URLをそのままコピペして分析できるのか教えていただけませんか?

基本的な事かも知れませんが,よろしくお願いいたします。

No.14512 Re: C( )とデータフレームの関係  【波音】 2011/04/09(Sat) 23:31

よい回答を得るためには上手く情報を提示するコツがあって,

> ExcelにA列からE列まで入力されている

ということについても,どのようにA列からE列まで入力されているのかを明確にするとよいでしょう。

青木先生のtuky()は2つのベクトルを指定するようになっているので,観測値をベクトルとして用意すればよいわけです。だからてっとり早くするには

http://aoki2.si.gunma-u.ac.jp/R/excel.html

にあるexcel.w()という関数を使ってしまうことです。例えば必要な観測値をA列に全て入力しておいて,

> x <- c(excel.w(1))

とすればExcelにある1列がベクトルとしてxに格納されます(行列形式で読まれるのでc()を使う必要があります)。

ちなみに,Rはベクトル,行列,データフレームとそれぞれ概念(?)が異なります。特にデータフレームとは「1列に1つの変数情報が格納されているもの」ということになるので,tuky()のデータセットだと:

DAT, group
14, 1
15, 1
14, 1
・・・
17, 5
17, 5
18, 5

という形式がデータフレームということになります(1列目に観測値,2列目にグループといったように)。

No.14513 Re: C( )とデータフレームの関係  【青木繁伸】 2011/04/09(Sat) 23:35

添付図のように入力されているということですか?また,グループを表す変数は特に用意されておらず,列ごとのデータが群ごとのデータであると。
これを一般的に取り扱うのは,かなり面倒なプログラムを書かねばならず,そのプログラムはデータの記述の仕方についてある程度厳密な仕様に従うことを要求するでしょうね。
既存のデータの記述様式をどの程度許すかによって,プログラムもそれに対応するものでなければならず,どこまで汎用性を持たせるかについても色々面倒でしょう。
各群のデータ数が等しいならば簡単ですが,例に示すように,各群のデータ数が不等ならば,面倒この上ない。
各 群のデータ数が等しいなら,何らかの方法で(いろいろあるけど)エクセルからRへ行列としてデータを読み取り,その行列の名前を a とすれば,tukey の第 1 引数は c(a) ,第 2 引数は rep(1:ncol(a), each=ncol(a)) とすればよいのですけど。
宗でない場合,そのような面倒なプログラムを書くに値するか(例えば何十回も同じような分析をするとか?)のトレードオフでしょう。


No.14515 Re: C( )とデータフレームの関係  【大学院生です】 2011/04/10(Sun) 11:00

波音さん,青木先生

お返事ありがとうございました。データ数が等しいかどうかの問題もあり,面倒 であると言うことが理解できました。私はプログラムをかけるほどの知識を持っておりませんので,例えば,仮のデータとして,3群あり,1群目に30件,2 群目に45件,3群目に33件の場合,c()を使って,

data <- c(
14, 15, 14, 16, 15, 17, 17,..... # 第 1 群のデータ,30 例
17, 16, 17, 16, 15, 18, 19, 15,..... # 第 2 群のデータ,45 例
18, 19, 20, 19, 17, 17,..... # 第 3 群のデータ,33 例

)
group <- rep(1:3, c(30, 45, 33)) # 群を表す数値
tukey(data, group) # Tukey 法

とすべきかと理解しました。

ちなみに波音さんが例示してくださったDAT, groupをタイトルに設定されたデータフレームですと,青木先生が書かれたプログラムはそのまま使用できるのでしょうか?もし可能でしたら,どのような書き方をすべきなのかご教授いただけると幸いです。

物わかりが悪くご迷惑をおかけいたします。

No.14516 Re: C( )とデータフレームの関係  【青木繁伸】 2011/04/10(Sun) 16:05

d という名前のデータフレームで,DAT, group という列名の場合,tukey(d$DAT, d$group) のようにすればよいのです。つまり,データフレームの列 d$DAT などは,ベクトルなんですね(c() は,ベクトルを作る関数です)。また,DAT, group が それぞれ,1列目,2列目なので,tukey(d[,1], d[,2]) としてもかまいません(tukey(d[1], d[2]) ではだめです) 。

No.14522 Re: C( )とデータフレームの関係  【大学院生です】 2011/04/11(Mon) 09:57

青木先生

お礼が遅くなりました。回答頂いたものでやってみたところうまくいきました。

何となくですが,データの扱い方が理解できてきました。

ありがとうございました。

● 「統計学関連なんでもあり」の過去ログ--- 044 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る