LoginSignup
11
15

More than 5 years have passed since last update.

RとRStudioのインストールからpsychの使い方、クラスター分析までやってみる

Last updated at Posted at 2016-05-26

機械学習の準備等でRを使う必要が出てきたため、入門してみた。

環境インストール(Macで実施)

Rのインストール

https://cran.ism.ac.jp/bin/macosx/
ここにアクセスし、最新版のR-3.3.0.pkgをダウンロードしてきて実行するとインストールされる。
インストール後の確認。

$ r

R version 3.3.0 (2016-05-03) -- "Supposedly Educational"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin13.4.0 (64-bit)

R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。

R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。

'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。

>

RStudioのインストール

Rをインストールすれば、Rを使っての分析は可能だけど、R用のIDEがあるためこれを使ってみる。
https://www.rstudio.com/

こちらもdmgをダウンロードしてApplicationsにコピーするとすぐに使えるようになる。

こんな感じで、plotで視覚的にグラフを出したり、変数の中身を確認したりといろいろ便利。
スクリーンショット 2016-05-25 13.10.41.png

基本的なコマンド

初歩的なやつ

> mean(x)    # 平均
> sd(x)      # 標準偏差
> var(x)     # 分散
> median(x)  # 中央値
> min(x)     # 最小値
> max(x)     # 最大値
> range(x)   # 範囲

データの標準化

統計で言う標準化とは、元のデータに対して平均0、標準偏差1のデータに直すこと。
データの単位とか桁が大きく違う場合に、標準化をすることで統計的に比較しやすい単位にすることができる。

下記が標準化変量を求める方法。標準化変量は簡単な式で出せる。

z_i = \frac{x_i - μ_i}{σ_i}
> scale(x)

データの読み込み

csvファイルを読み込む。
サンプルデータとして、こちらのデータを借りる。

> dat <- read.csv("/Users/xxxxxx/Desktop/Cluster_sample01.csv", header=TRUE, sep=",", row.names = 1)
> dat
                           Sense Dignified Youthful   Trust Familiarity Advanced
TOYOTA                   4.14286   4.42857  4.03571 6.14286     5.57143  5.39286
NISSAN                   4.92857   3.71429  4.85714 5.10714     5.57143  5.07143
HONDA                    4.82143   3.67857  5.82143 5.03571     5.42857  5.53571
FORD                     3.50000   4.17857  3.42857 3.78571     3.03571  3.25000
MERCEDES\357\274\215BENZ 4.53571   6.42857  2.92857 5.75000     2.60714  4.28571
BMW                      5.28571   5.67857  3.89286 5.28571     3.07143  4.25000
                         Technique Creative  Sporty Security
TOYOTA                     6.00000  4.75000 4.03571  5.92857
NISSAN                     5.21429  4.67857 4.75000  5.00000
HONDA                      5.71429  5.32143 5.64286  4.75000
FORD                       3.78571  4.17857 3.89286  3.60714
MERCEDES\357\274\215BENZ   5.42857  4.50000 3.57143  5.71429
BMW                        5.14286  4.46429 4.60714  5.35714

row.names = 1によって1列目が行名になるようになるようである。
これをしないと、後のクラスター分析とかで"数値じゃない"とエラーがでる。

ビジュアル系

ヒストグラムが表示される。視覚的に便利。

hist(dat$Sense)

グラフの色のしても出来るみたい。

psychライブラリを使用して記述統計量を出力する

調べてると心理学系?の話で出てくるみたいだけど、便利な関数がたくさんありそうなのでちょっと使ってみた。
関数一つで記述統計量がずらっと出てきて便利。

こんな感じでパッケージをインストール出来る。RStudioならTools->Install PackagesでGUIでも可能。

> install.packages("psych")
also installing the dependency 'mnormt'

trying URL 'https://cran.rstudio.com/bin/macosx/mavericks/contrib/3.3/mnormt_1.5-4.tgz'
Content type 'application/x-gzip' length 89901 bytes (87 KB)
==================================================
downloaded 87 KB

trying URL 'https://cran.rstudio.com/bin/macosx/mavericks/contrib/3.3/psych_1.6.4.tgz'
Content type 'application/x-gzip' length 3271310 bytes (3.1 MB)
==================================================
downloaded 3.1 MB

tar: Failed to set default locale
tar: Failed to set default locale

The downloaded binary packages are in
    /var/folders/hj/s0l55f5j7h7c8r9h40d_bm4h0000gn/T//RtmpFxXxj8/downloaded_packages
> 
> library('psych')
> describe(dat)
            vars n mean   sd median trimmed  mad  min  max range  skew kurtosis   se
Sense          1 6 4.54 0.64   4.68    4.54 0.58 3.50 5.29  1.79 -0.43    -1.45 0.26
Dignified      2 6 4.68 1.12   4.30    4.68 0.90 3.68 6.43  2.75  0.50    -1.72 0.46
Youthful       3 6 4.16 1.04   3.96    4.16 1.06 2.93 5.82  2.89  0.39    -1.50 0.42
Trust          4 6 5.18 0.80   5.20    5.18 0.53 3.79 6.14  2.36 -0.54    -1.10 0.33
Familiarity    5 6 4.21 1.44   4.25    4.21 1.88 2.61 5.57  2.96 -0.03    -2.26 0.59
Advanced       6 6 4.63 0.87   4.68    4.63 0.85 3.25 5.54  2.29 -0.37    -1.61 0.35
Technique      7 6 5.21 0.77   5.32    5.21 0.42 3.79 6.00  2.21 -0.84    -0.81 0.31
Creative       8 6 4.65 0.38   4.59    4.65 0.21 4.18 5.32  1.14  0.56    -1.06 0.16
Sporty         9 6 4.42 0.75   4.32    4.42 0.64 3.57 5.64  2.07  0.43    -1.45 0.30
Security      10 6 5.06 0.83   5.18    5.06 0.71 3.61 5.93  2.32 -0.61    -1.21 0.34
> 

クラスター分析もやってみる

> result <- hclust(dist(dat), method="ward.D")
> plot(result)

クラスター分析は様々な方法があるようだが、ここではサンプルとしてウォード法というメソッドを指定してみる。この他のメソッドやkmeans法などの非階層型クラスタリングの関数も用意されているみたい。
plot関数により以下のような図がすぐに表示された。

Screen Shot 2016-05-26 at 9.58.56 PM.png

尚、cutree関数によりクラスターの階層を指定した情報を取得することが出来る。

> cutree(result, 3)
                  TOYOTA                   NISSAN                    HONDA 
                       1                        1                        1 
                    FORD MERCEDES\357\274\215BENZ                      BMW 
                       2                        3                        3 
> cutree(result, 2)
                  TOYOTA                   NISSAN                    HONDA 
                       1                        1                        1 
                    FORD MERCEDES\357\274\215BENZ                      BMW 
                       2                        2                        2 
> cutree(result, 1)
                  TOYOTA                   NISSAN                    HONDA 
                       1                        1                        1 
                    FORD MERCEDES\357\274\215BENZ                      BMW 
                       1                        1                        1 
> 

使い方はすぐに慣れるけど、使いこなすのが大変そう。
もう少しいろいろいじってみたい。

11
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
15