[(株)数理システム]

(S-PLUS) S-PLUS mini course 第25回


S-PLUS mini course の25回目をお届けします。

東京ではここのところ毎日天気が悪く、ぱっとしない日が続きますが皆様お元気でいらっしゃいますか?

まず、お知らせです。

*******************************************************
新しいバージョン、S-PLUS 6.1 for Windows がリリースされました!
詳しくは
http://www.msi.co.jp/splus/
をご覧ください。
お問い合わせは splus-info@msi.co.jp まで、お気軽にどうぞ。
*******************************************************

なお、S-PLUS 特別セミナー「S-PLUS GUIで始める調査データ処理の基礎 - アンケートデータの集計と検定−」はおかげさまを持ちまして、満員となりました。
ご要望が多いようなので、次回の開催も予定しています。
今回日程が合わずご参加いただけなかった方、気がついたときにはすでに満員で間に合わなかった方、大変恐れ入りますが、次回のご参加をご検討いただけますと幸いです。

さて、前回は回帰分析の説明変数に因子があったときに使うダミーが options によってどのように変わるかをご紹介しました。

ここで、ちょっと因子について触れたいと思います。

例えば、次のようなデータを作ると

data <- data.frame(x=1:10, y=letters[1:10])

data$x は数値ですが、data$y は character ではなくて、factor になります。これは例えば、外部ファイルをインポートしたときや
read.table で読み込んだときも同様です(バージョンによっては文字列を因子ではなく、文字列として読み込む設定にできることがあります)。

因子だから問題が起こる、ということはあまりありませんが、人の名前など、一意な文字だと、属性の因子水準が大きくなって不便なこともあります。文字列に直すには

mode(data$y)<-"character"

あるいは

data$y<-as.character(data$y)

で、強制的に文字列にしてください。

デフォルトの場合、アルファベット順になります。

data <- data.frame(x=1:10, y=letters[1:10])
levels(data$y)

[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

これを、任意の順番にするには

data$z <- factor(data$y, levels=rev(letters[1:10]))

と、関数 factor の引数 levels で指定します。
決して

levels(data$y) <- rev(letters[1:10])

としないでくださいね(文字そのものが置換されてしまいます)。

どういうことか、例えばアンケートなどでよくありますよね
1: はい
2: いいえ
3: どちらでもない
で、

x <- factor(c(1, 3, 2, 3, 3, 1))
as.numeric(x)

[1] 1 3 2 3 3 1

と、みたまんまの数字に変換されますが、順序を考えて「はい」「どちらでもない」「いいえ」にしたときは、

x <- factor(c(1,3, 2, 3, 3, 1), levels=c(1, 3, 2))
as.numeric(x)

[1] 1 2 3 2 2 1

元の x とは異なる数字になります。
つまり、「みたままの数字」ではなく「因子水準」に変換されます。
これを避けるには、一旦文字列にします。

as.numeric(as.character(x))
[1] 1 3 2 3 3 1

因子水準が 1, 2, 3, ..., 9, 10, 11 のように、2桁の数値になっている場合は特に注意してください。この場合の因子水準は1, 10, 11, 2,というアルファベット順となります。

次回は因子について、もう少しご説明したいと思います。
お楽しみに!

----------------------------------------------------------------

? お問い合わせ/資料請求はお気軽に。
(株)数理システム《S-PLUS》グループ <splus-info@msi.co.jp>