投稿

12月, 2017の投稿を表示しています

Rで非階層的クラスター分析をやる

イメージ
前回、階層的クラスター分析を紹介したので、今回は非階層的クラスター分析を行います。 先行研究でクラスター数が分かっている、もしくは想定される場合は非階層的クラスター分析から開始できますが、そうでない場合は階層的クタクター分析でクラスター数に目安をつけておく必要があります。 今回は、前回行った階層的クラスター分析の結果を元にやっていきます。 ここから、見て意味が分からない方は前回の階層的クラスター分析を見てください。 前回、x.y.y1.y2の4つの変数で、参加者が4群に分かれそうなことが分かりました。 そこで、実際にどのような4群なのかを見ていきましょう。 今回は非階層的クラスター分析をplyrパッケージのkmeans関数を用いて行います。 まず、いつも通りパッケージのインストールと読み込みを行います。 install.packages("plyr”) library(plyr) 前回と同じく、クラスター分析したい項目だけのデータセットを作成します。 data_cl <- data[,c("x","y","y1","y2")] そして、kmeans関数で分析を実行させます。 (k <- kmeans(data_cl , 4)) 式全体が()で括られているのは、分析結果をkというオブジェクトに代入しているので、そのままでは結果が表示されないため、結果を呼び出すためのものです。 kmeans関数の基本は以下のようになっています。 基本式:kmeans(データフレーム,クラスター数) 以下、任意のオプション iter.max : 繰り返しの最大回数。デフォルトは N=10。 nstart : ランダムに初期値を設定する場合のパラメータ。初期値を変更したい場合に用いる。試行回数。何通りの初期値を設定するかを指定する。k-means法は初期値依存という短所があります。そのため、時間とPCのスペックが許す限りnstartの回数を大きくした方が良いようです。初期値は最大でサンプル数-1までだと思います。同じ条件式で複数回分析を行い結果が同じであればさらに万全です。 alg...

Rで階層的クラスター分析をやる

イメージ
「階層的クラスター分析とはなんぞや」と思う方は、頑張って調べてください。 調べるのは大切ですが、私は実際にやりながらの方が理解できると思いますので、ここでは階層的クラスター分析の実際のやり方を紹介しようと思います。 私の適当な理解だと、「参加者がどの様な群に分かれるか知りたいが、想像がつかないので探索的に調べてみたい」と言うときに階層的クラスター分析を行うと思います。 では、実際にやってみましょう。 基本情報 データ名:data 変数: ID:回答者のIDです。入力時に識別するだけで、それ以上の意味はありません。 sex:性別の解答欄です。1が男性、2が女性、3がその他となっています。 shincho:身長を想定したデータです。 taiju:体重を想定したデータです。 x.y.y1.y2は適当な変数なので、意味は考えないでください。 実際にはこんな感じです。 今回はx.y.y1.y2の4つの変数で、参加者が何群に別れそうかを見てみます。 まず、クラスター分析に用いる変数だけのデータセットを作成します。 data_set <- data[,c( "x","y","y1","y2")] そして、distオブジェクトに変換します。 d <- dist(data_set) 最後に 二乗距離を使って分析します。 方法はウォード法です。 さらに、今回は式全体をplot関数で囲んでいるので、図の出力もさせています。 plot(hclust(d^2,method="ward.D"),hang=-1) 以下のように、結果が出力されます。 サンプル数が200ですから最後は真っ黒ですね。 この結果をどのように見るかです。 まず、この場合の参加者たちは大きく2つの群に分かれることが分かります。 ピンクのラインが入っている場所が、そうです。 次のさらにその中で2つに分岐しているため、水色の線の位置では4群と言えます。 まぁ、さらに細かくみていけば、次は一番右の群が2つに分岐しているので、そこを見て5群とも言えますが、 水色...

subsetで必要なデータだけを、取り出す。

イメージ
最近は男女差を比較したい時でも、性別の欄が2値のデータでない場合があります。 私もGoogleFormを用いてアンケート調査を行った時、フェイスシートでの性別の欄にはその他を準備しました。 その結果、回答数約200中4件ほどLGBTQの方の回答もありました。 性別を独立変数に用いる場合、LGBTQの人をどのように扱っていくかについてはここでは触れませんが、今後しっかりと考えなければいけないことだと思います。 ここでは、性別に「その他」という回答が含まれるデータから、男性と女性の回答だけを抜き出して分析する方法を紹介します。 データを抜き出す方法として、subset関数を用います。 今回は以下のデータを使います。 各変数は以下のようになっています。 ID:回答者のIDです。入力時に識別するだけで、それ以上の意味はありません。 sex:性別の解答欄です。1が男性、2が女性、3がその他となっています。 shincho:身長を想定したデータです。 taiju:体重を想定したデータです。 x.y.y1.y2は適当な変数なので、意味は考えないでください。 乱数発生で作った、人工データなので「身長のデータ小数点以下の桁多くないか?」みたいな細かい点は気にしないでください。 subsetの使い方は簡単です。 こんな感じです。 男性だけ抽出するのであれば data2 <- subset(data,data$sex==1) となります。 複数条件(男性と女性や男性かつ身長が高いなど)を指定する場合は、&と|を使います。 &はANDを意味し、「〜かつ〜」という条件です |はORを意味し、「〜または〜」という条件です。 今回の例では、「男性または女性」なので(data$sex==1 | data$sex==2)となります。 元のデータセットから必要なデータを抽出し適宜分析を行っていくのがRです。 データ抽出には、いろいろな方法がありますが一番簡単なのがsubsetだと思います。

Rでの、データの基礎統計量の算出(summary,describe)

イメージ
Rでの分析をする際に、まず最初にデータの基礎統計量が算出する必要があります。 Rに元々入っている関数では、summary関数を用います。 データは擬似的に作成した、データを用います。(データ名は「data」です) まず、Rに標準装備されているsummary関数を使ってみます。 結果はこのように出力されます。 Rでは結果が英語で出力されます。各項目の日本語訳は以下のようになります。 Min.最小値 1st. Qu.第一四分位 Median中央値 Mean平均値 3rd Qu.第三四分位 Max.最大値 summary関数では、代表値は簡単に分かります。 しかし、心理系の論文を書くのであれば標準偏差が知りたいところです。 そこで、psychパッケージをインストール&libraryして、describe関数を使います。 install.packages("psych") library(psych) このパッケージで心理系の分析の基本ができるようになります。 では、実際にdescribe関数を使っていましょう。 結果はこのように出力されます。 待望の標準偏差が出力されました。 結果が折り返されて表示されているので、少しみづらいですね・・・ vars:列番号 n:サンプル数 mean:平均値 sd:標準偏差 median:中央値 trimmed:トリムされた平均値 mad:中央絶対偏差値 min:最小値 max:最大値 range:レンジ skew:歪度 kurtosis:尖度 se:標準誤差 情報量は多いですが、いくつ理解できて活用できるかは技量次第ですね。 分からない、用語は自分で検索してみてください。