[(株)数理システム]

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


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

会社のすぐ近くにある新宿御苑の桜はもうそろそろ散り始めています。皆様、今年はお花見をなさいましたか?

さて、前回は因子データについて、お話ししましたが、簡単にまとめますと、

を説明しました。

今週は因子水準について、もう少し詳しくご説明します。

・因子(factor)の拡張版として、順序因子がある(ordered)

普通の因子(factor)は、因子水準間に特に関係がありませんが、よくアンケート調査にある「とてもそう思う」「そう思う」「わからない」「そう思わない」「まったくそう思わない」のように、因子水準の間に順序の関係がある場合は、順序因子(ordered)にします。

方法は factor のときと同じで、

ordered(順序因子にしたいデータ)

でOKなのですが、こちらでも因子水準を指定することができます。(指定がないと、元のデータが普通の因子なら、その因子水準の順番、そうでなければアルファベット順になります)
順序因子にしたデータを、データ名エンターとして表示させると、最後に因子の順序が表示されます。

そして、このデータが回帰などの説明変数になった場合、contr.poly
という選点直交多項式系という対比を使って、ダミー行列を作り、計算に用いられます。

・因子水準は継承される

どういうことかというと、例えば、既に何回か使っているサンプル・データの fuel.frame を使って説明すると、fuel.frame の変数 Type が因子です。

> Type <- fuel.frame$Type
# このデータだけ抜き出す
> class(Type)
[1] "factor"
> levels(Type)
[1] "Compact" "Large" "Medium" "Small" "Sporty" "Van"

この中から、"Van" 以外のものを取り出して、新しいデータ Type2 としますと、

> Type2 <- Type[Type!="Van"]
> levels(Type2)

[1] "Compact" "Large" "Medium" "Small" "Sporty" "Van"

と、Type2 のデータの中に、もはや "Van" というデータはないけれど、因子水準には残ったままです。つまり、これが因子水準の継承です。
例えば、この Type2 を使って、回帰の予測をする場合など、この因子水準の継承がないとおかしな結果になってしまいます。しかし、このような意図がなくて、新しいデータから、古い不要な因子水準を除きたい場合は、特殊な引数 drop を指定します。

> Type3 <- Type[Type!="Van", drop=T]
> levels(Type3)

[1] "Compact" "Large" "Medium" "Small" "Sporty"

今度は "Van" が因子水準にありません(繰り返しになりますが、回帰の予測に使うデータには、drop=T を指定しないでください)

・因子水準をまとめる

例えば、Type のうち、"Small" と "Compact" をまとめて因子"S" に、"Medium" は "M" に、"Large" は "L" に、"Sporty" と "Van" は"O" に、と自在に因子水準を結合させることもできます。

> levels(Type) <- list(S=c("Compact", "Small"), M="Medium",
L="Large", O=c("Sporty", "Van"))


とします。
2回ほど、因子の話をしましたが、次回はまた回帰に戻りたいと思います。
お楽しみに!

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

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