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