Rによるデータ分析

Rによる質的変数の対数線形分析

このページのデータは、各変数が1列になっている形式からスタートします。 2変数あり、行と列に振り分けられている分割表の場合の対数線形分析は、 Rによるクロス集計表の回帰分析 にあります。

対数線形分析 のRによる実施例です。 ここでの対数線形分析は、対数線形分析のライブラリがあって、それを使っているのではなく、 一般化線形モデル のライブラリのglmを使っています。

Rの実施例

中間処理として、質的変数が複数あるテーブルデータから、カテゴリの組合せの出現回数をします。 この方法だけの説明は、、 Rによるクロス集計 にあります。

質的変数のみの場合

library(dplyr) #ライブラリを読み込み
library(MASS)
# 作ライブラリの読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T, stringsAsFactors=TRUE) #
# データを読み込み
nc <- ncol(Data)
# データの列数を数える
Data2 <- count(group_by(Data,Data[,1:nc],.drop=FALSE))
# 分割表を作る
gm <- step(glm(n~.^2, data=Data2,family=poisson))
# 対数線形分析
summary(gm)
# 結果の出力

量的変数が含まれる場合

量的変数の場合、 1次元クラスタリング をして質的変数に変換することで、対数線形分析が使えるようになります。

library(dplyr) #ライブラリを読み込み
library(MASS)
# 作ライブラリの読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T, stringsAsFactors=TRUE) #
# データを読み込み
Data1 <- Data
# 1次元クラスタリングの出力先を作る
nc <- ncol(Data1)
# データの列数を数える
for (i in 1:nc) {
# ループの始まり。データの列数を数えて同じ回数繰り返す
if (class(Data1[,i]) == "numeric") {
# 条件分岐の始まり
Data1[,i] <- droplevels(cut(Data1[,i], breaks = 5,include.lowest = TRUE))
# 5分割する場合。量的データは、質的データに変換する。
}
# if文の処理の終わり
}
# ループの終わり
Data2 <- count(group_by(Data1,Data1[,1:nc],.drop=FALSE))
# 分割表を作る
gm <- step(glm(n~.^2, data=Data2,family=poisson))
# 対数線形分析
summary(gm)
# 結果の出力

3次の交互作用を見る場合

上のコードの場合は、2変数の交互作用項がすべて入るモデルをスタートにして、変数の絞り込みが始まります。 この場合は、2つの組み合わせを見ている連関係数を使う方法と、あまり変わらないことをしています。

例えば、3変数の交互作用項も入れたい場合は、下記にします。 この場合は、計算時間が相当かかるだけでなく、n数不足が原因と思われるエラーが発生しやすいです。 変数が数個なら、問題なくできます。 筆者が試した時は、変数が6個の時はダメで、3個だとできました。

gm <- step(glm(n~.^3, data=Data2,family=poisson)) # 対数線形分析
summary(gm)
# 結果の出力





Tweet データサイエンス教室