2008/06/21

データを集計しよう

データを集計するのときは,table 関数を使います.

table(変数名) で一変数のデータの度数分布表を作成します.また table(変数名,変数名) で,クロス集計をしてくれます.ちなみに 1 番目の変数が表側,2 番目が表頭にきます.

連続データの場合は,cut(変数名,breaks=seq(150,180,10)) を用いると可能です.たとえば, table(sex,cut(height,breaks=seq(150,180,10))) と書くと階級に分けながらクロス集計もできます.ちなみにこの場合 (○,△] と書かれていますが,これは右端を含んで,左端を含まないことになります.

ヒストグラムだけが必要な場合は,hist を使いましょう.これはグラフのところで紹介します.

R でデータの分布を表す散布図や箱ひげ図,ヒストグラムを書こう

R には多数のグラフ機能がありますが,とりあえず 2 変量のデータの分布を確認する際に利用する散布図を書いてみましょう.

この前のデータセットを利用してもできるのですが,軸に変数名の表示をしたいこともありますので,とりあえず height<-sampledata[[2]] などと列の値を改めて変数に入れておきます(もっと楽な方法を探しています)※この意味だとデータセットの前に変数の概念を紹介したほうが良いか….

これにより,height と weight の変数を作ります.これで plot(height,weight) とすると散布図が表示されます.ちなみに plot 関数で引数を一つだけにすると横軸(x 軸)に対象番号(index),縦軸(y 軸)にその変数の値で散布図を書きます.xlim=c(下限,上限)で,横軸(x 軸)の表示範囲を指定できます.同様に ylim で縦軸(y 軸)の表示範囲を指定できます.

また,1 変量のデータの分布を確認するボックスプロット(箱ひげ図)は boxplot 関数で利用できます.boxplot(変数名) で表示できます.ちなみにオプションで,horizontal=F とすると縦向き,T なら横向きに箱を表示します.なお,引数にデータ名を続けて書くと,複数のボックスを書くことになります.ちなみに所属グループの列が対応して入力していたら,変数名~属性変数名とすることで,属性ごとの箱を同時作図してくれます.外れ値の設定などもできるようです.

hist 関数を使うとヒストグラムも書けます.単純に hist(変数名) とすると変数の度数によるヒストグラムを作成してくれます.このとき breaks = seq(下限,上限,階級の幅)で指定するとそれに従ったヒストグラムを書いてくれます.

これらの分布を知るグラフを利用することはデータ分析の基本ですね.使いこなしましょう.

変数の[[]] と [] には違いがあります

変数名のあとに [[○]] とか [○] をつけて,値を他の変数に渡すことが可能ですが,[[○]] だと各数値をそれぞれ,[○] だと列ごとを渡します.データセットの列名だとしづらい場合に,改めて,変数に値を渡すときには [[○]] で渡した方がよいでしょう.もっと良い方法がありそうなので,また探してみます.

テキストファイルに書かれたデータを読み込もう

カンマ区切りやタブ区切りといったテキストファイルに書かれたデータを読み込むことができればかなり分析のバリエーションが広がるでしょう.今回はこれを紹介します.

まずはカンマ区切りやタブ区切りといったテキストファイルを準備します.また一行目には変数名を書いてあることを前提にします.変数名はなくてもできますが,データを目的によって分析するためにもあることがわかりやすいためです.また,このファイルを作業ディレクトリに置きます.作業ディレクトリは getwd() 関数で表示することができます.ちなみに Windows 版 R だと,「ファイル」メニューの「作業ディレクトリの変更」でディレクトリ(フォルダ)を変更することも可能です.もちろん作業ディレクトリを意識せずにファイルを指定すれば読むこともできますが,日本語や空白入力になることもあるためここでは,作業ディレクトリにあることを前提とします.

作業ディレクトリにデータのテキストファイルを置くことができたら,R のコマンドで,sample<-read.table("ファイル名",header=T,sep=",")のように入力します(最初の sample はデータセット名になります.適当な名前を付けてください).header オプションは一行目に変数名があることを示します.0 だと一行目からデータとして読み込まれます.sep は区切り文字を指定します.タブ区切りの場合は,"\t" を入力しましょう.他にもコマンド等を避けるために何行目から読む込むことを指示する skip もある.

ただ完全に一行目の変数名等になっていたら,カンマ区切りは read.csv("ファイル名"),タブ区切りはread.delim("ファイル名") でも読み込み可能です.

データの計算するときは,mean(sample) などと入力すると使えます.mean(sample[1]) とすると 1 列目の平均値を出力します.mean(sampledata[2:3]) とすると 2, 3 列目を出力します.ちなみに変数名も同時に出力してくれるので,わかりやすいと思います.ちなみに変数名は表示されますが,オブジェクトとしては認識されていませんので(データセット全体として認識されています),変数を別途に認識させるか,データセット名[1] のように使います.ひょっとしたら良い方法があるかもしれないので,探してみます.

2008/06/15

データの入力と単純計算

Rでデータを入力するのは以下のようにしていけば可能です.もちろんこれ以外に行列で入力やファイルで読み込みなどいろいろできます.ここでは一番単純なことを紹介します.

c(○,○,○,…,○)とするとベクトルでデータ(1 変数のデータ)を表現できます.これを常に入力していけば平均値等も求められます.例えば,平均値だと mean 関数を使いますが, mean(c(154,167,183,143)) となります.これでもよいのですが,統計は基本的に測定に対して数値(データ)が得られますので,変数の値として入力することがお勧めです.変数は適当な名前をつけて,それにこのベクトルでのデータを渡しましょう.渡し方は「変数名<-c(○,○,○,…,○)」となります(日本語も同様に使えます).「身長<-c(154,167,183,143)」とすると「身長」という変数に数値(データ)が渡されます.ここで「身長」と入力するとその数値が表示されます.

もちろん計算するときはこの変数名を使えます.平均値を求める場合は,mean 関数を使って mean(身長),中央値は median 関数を使って,median(身長),その他にも基本統計量では,最大値 max,最小値 min,総和 sum,不偏分散 var,その標準偏差 sd,四分位偏差 IQR,五点要約値(最小値,下側ヒンジ,中央値,上側側ヒンジ,最大値)fivenum,ヒンジを 25%,75% に変えた quantile も使える.Excel は quantile と同じ値.またデータの個数(正確には標本の大きさ)length などを使います.これらの関数を使うと,範囲(レンジ)も max-min をして(単に range で求めると最大値と最小値を出力),また四分位範囲は IQR*2 と求めることが可能です(ただし,四分位点の取り方によって計算が一致しない).ちなみに summary を使うと五点要約(quatile を使ったときの値)と平均値をざっと出してくれます.またパッケージ e1071 を使うと skewness(),kurtosis() で,歪度と尖度も求められます.なお,Windows で,パッケージを読む込むには,[パッケージ] メニューから [パッケージの読み込み] を選び,該当するパッケージを選びます.なお,ave 関数を使うと変数の標本の大きさの平均値が求められる.これで偏差は変数名-ave(変数名) を使い,変数で求められる.

また rank 関数を使うと昇順(小さい順)のそれぞれの順位を表示することが可能です.またタイデータ(同値データの扱いも 5 種類から設定できます).

R を使うと簡単にデータの要約値が求まるので,便利です.

Rで基本計算

Rで単純計算は簡単です.今回は計算をしてみましょう.


Rを起動して,あとはプロンプト(っていうのかな?行頭の「>」のことです)のあとで,計算式を入力します.四則演算はそれぞれたし算「+」,ひき算「-」,かけ算「*」,わり算「/」です.また演算順を制御する丸カッコ「()」やべき乗の「^」も使えます.もちろん小数や負の数の計算も基本的に問題なくできます.

また簡単なコマンドで数値を求めることもももちろんできます.たとえば,平方根は sqrt 関数を使います.sqrt(2) と入力すると 1.414…と表示されます.また,pi と入力すると現在の設定での表示桁数で円周率(標準では,3.141593)と表示されます.また三角関数 sin,cos,tan も使えます.ただしラジアンでの表記のため引数には注意してください.たとえば,30°の正弦の値を求めるときは,sin(pi/6) と入力します(結果は 0.5).また自然対数の底の累乗は exp 関数を使います.exp(1)=2.718282 となります.

対数関数も同様に log 関数で使えます.第 1 引数で真数を,第 2 引数で底を指定します.具体的には log(2,4) と入力すると 0.5 が表示されます.底の指定は base= とする場合もあります.底を指定しない場合は,自然対数となります.またそれぞれ底が 2 のときの log2(例:log2(4)=2),常用対数の log10 関数(例:log10(100)=2)もあります.

組み合わせ関係は現在のバージョンでは使えそうです.choose 関数で組み合わせ総数(例:choose(10,2)=45.階乗計算は factorial 関数を使います(例:factorial(3)=6).順列や累乗根の関数はまだ標準ではないようです.

関数を使う場合に悩んだらヘルプを使ってみましょう.ヘルプの使い方もいくつか方法がありますが,関数名がわかっていたら help(関数名)と入力するとその項目が表示されます.たとえば,help(log) で log 関数のヘルプが出ます(Windows ではそうですが,他の OS ではわかりません).また関数名がわからない場合は,help.search を使うとヘルプをキーワードで検索することが可能です.たとえば組み合わせの関数を探したい場合は, help.search("combination") と入力すると別ウィンドーで結果が表示されます(コンソールを全画面表示にしている場合は,画面の切り替えに注意).Windows の場合は,ヘルプウィンドーを使う方が使いやすい場合もありますので,使いやすい方を使いましょう.

2008/06/14

R で共分散構造分析

要因分析をするために回帰分析は使えない(回帰モデルでは変数間の関係が適切とは言えない場合があるので)のでモデルをいろいろ考えられる共分散構造分析が要因分析にはあっています.でも具体的に利用するには SPSS & AMOS などちょっとコストが必要です.なかなか文系大学だと購入は厳しいといえます.

そんなときには R を利用しましょう.この sem パッケージを使うと R で共分散構造分析が使えるようです.AMOS ほど簡単ではないかもしれませんが,今度使ってみたいと思います.