CentOSにRを入れてみた

ここから必要なrpmパッケージを落とす。
まずR本体のインストール。

$ rpm -ivh R-2.13.0-2.el6.rf.x86_64.rpm
エラー: 依存性の欠如:
	libtcl8.5.so()(64bit) は R-2.13.0-2.el6.rf.x86_64 に必要とされています
	libtk8.5.so()(64bit) は R-2.13.0-2.el6.rf.x86_64 に必要とされています

必要なものをいろいろ言われるので適宜yumでインストールする。意外とめんどくさい。

$ yum install tcl tk

R-devel, libRmath, libRmath-develも入れる。

せっかくなので判別分析でもやってみる。かの有名なフィッシャーのあやめデータセットを使う。これはデフォルトで入っている。

> iris
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
3            4.7         3.2          1.3         0.2     setosa
4            4.6         3.1          1.5         0.2     setosa
5            5.0         3.6          1.4         0.2     setosa
~
145          6.7         3.3          5.7         2.5  virginica
146          6.7         3.0          5.2         2.3  virginica
147          6.3         2.5          5.0         1.9  virginica
148          6.5         3.0          5.2         2.0  virginica
149          6.2         3.4          5.4         2.3  virginica
150          5.9         3.0          5.1         1.8  virginica

3クラス、50サンプルずつデータが並んでいる。
LDAを使うにはMASSパッケージが必要。

> library(MASS)
> (Z.lda<-lda(iris[,5]~.,data=iris[,1:4]))
Call:
lda(iris[, 5] ~ ., data = iris[, 1:4])

Prior probabilities of groups:
    setosa versicolor  virginica 
 0.3333333  0.3333333  0.3333333 

Group means:
           Sepal.Length Sepal.Width Petal.Length Petal.Width
setosa            5.006       3.428        1.462       0.246
versicolor        5.936       2.770        4.260       1.326
virginica         6.588       2.974        5.552       2.026

Coefficients of linear discriminants:
                    LD1         LD2
Sepal.Length  0.8293776 -0.02410215
Sepal.Width   1.5344731 -2.16452123
Petal.Length -2.2012117  0.93192121
Petal.Width  -2.8104603 -2.83918785

Proportion of trace:
   LD1    LD2 
0.9912 0.0088 

識別実験もやってみる。奇数行を学習データ、偶数行をテストデータとする。見やすいようにクラスラベルも変える。

> iris.train<-iris1[even.n,]
> iris.lab<-c(rep("S",50),rep("C",50),rep("V",50))
> iris1<-data.frame(iris[,1:4],Species=iris.lab)
> even.n<-2*(1:75)-1
> iris.train<-iris1[even.n,]
> iris.test<-iris1[-even.n,]
> Z.lda<-lda(Species~.,data=iris.train)

学習データの識別結果はpredictで見れる。$classはクラス、$posteriorは事後確率、$xは判別特徴のスコア。
識別結果はtableで。

> predict(Z.lda)$class
 [1] S S S S S S S S S S S S S S S S S S S S S S S S S C C C C C C C C C C V C C
[39] C C C C C C C C C C C C V V V V V V V V V V V V V V V V V C V V V V V V V
Levels: C S V
> predict(Z.lda)$posterior
               C            S            V
1   2.063321e-21 1.000000e+00 6.123882e-42
3   1.241843e-18 1.000000e+00 2.385305e-38
5   5.002164e-22 1.000000e+00 1.218263e-42
7   4.894577e-18 1.000000e+00 5.109531e-37
9   1.138098e-14 1.000000e+00 3.454692e-33
~
> predict(Z.lda)$x
           LD1         LD2
1    7.9226230 -0.21852960
3    7.2987565  0.31563262
5    8.0475972 -0.46728206
7    7.0862313 -0.35174617
9    6.4034581  1.01764732
~
> table(iris.train[,5],predict(Z.lda)$class)
   
     C  S  V
  C 24  0  1
  S  0 25  0
  V  1  0 24

未知データを識別するには、以下のようにpredictを使う。

> Y<-predict(Z.lda,iris.test[,-5]) #使うのはテストデータの第5列以外
> table(iris.test[,5],Y$class) 
   
     C  S  V
  C 24  0  1
  S  0 25  0
  V  2  0 23