このページのデータは、各変数が1列になっている形式からスタートします。 2変数あり、行と列に振り分けられている分割表の場合の対数線形分析は、 Rによるクロス集計表の回帰分析 にあります。
対数線形分析 のRによる実施例です。 ここでの対数線形分析は、対数線形分析のライブラリがあって、それを使っているのではなく、 一般化線形モデル のライブラリのglmを使っています。
中間処理として、質的変数が複数あるテーブルデータから、カテゴリの組合せの出現回数をします。 この方法だけの説明は、、 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) # 結果の出力
上のコードの場合は、2変数の交互作用項がすべて入るモデルをスタートにして、変数の絞り込みが始まります。 この場合は、2つの組み合わせを見ている連関係数を使う方法と、あまり変わらないことをしています。
例えば、3変数の交互作用項も入れたい場合は、下記にします。 この場合は、計算時間が相当かかるだけでなく、n数不足が原因と思われるエラーが発生しやすいです。 変数が数個なら、問題なくできます。 筆者が試した時は、変数が6個の時はダメで、3個だとできました。
gm <- step(glm(n~.^3, data=Data2,family=poisson)) # 対数線形分析
summary(gm) # 結果の出力