Rによるデータ分析

Rによる区間高次元化回帰分析

区間高次元化回帰分析 のRによる実施例です。

区間高次元化回帰分析

この実施例は、 区間高次元化回帰分析 のページと、ほぼ同じ手順をRで実行しています。
dummy

Rによる一般化線形混合モデル にあるような一般化線形混合モデルや、交互作用モデルを使うと、コードはシンプルにする方法もあります。 しかし、この方法を使うと、xの元データの項がモデルに入って来て、係数の評価がわかりにくくなります。

library(MASS)
library(dummies)

setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data1 <- Data

DataY <- Data

DataY$X <- NULL

Data1$Y <- NULL

DataX <- Data1

Data1[,1] <- droplevels(cut(Data1[,1], breaks = 3,include.lowest = TRUE))
# 1列目の量的変数を1次元クラスタリングで3つカテゴリに分ける
Data2 <- dummy.data.frame(Data1)
# ダミー変換
Data3 <-Data2*DataX[,1]
# 交互作用項の作成
colnames(Data3)<-paste0("X:",colnames(Data3))
# 変数名の修正
Data4 <-cbind(DataY,Data2,Data3)

gm <- step(glm(Y~., data=Data4, family= gaussian(link = "identity")))
# 重回帰分析
summary(gm)
# 結果の出力
dummy

#ここから予測の手順
library(ggplot2)
s2 <- predict(gm,Data4)
# 作業用ディレクトリを変更
Data4s2 <- cbind(Data4,s2)
# データを読み込み
ggplot(Data4s2, aes(x=Y, y=s2)) + geom_point() + labs(x="Y",y="predicted Y")

dummy

クラスター高次元化回帰分析

この実施例は、 クラスター高次元化回帰分析 のページのデータを使っています。 クラスター分析の部分がEXCELではできないところですが、Rなら簡単にできます。

ダミー変数と、元の説明変数との交互作用項を作るのに、 線形混合モデル を使っています。 こうすると、コードがシンプルになります。

ここでは、クラスター分析としてk-means法を使っています。 他の方法は、 Rによるクラスター分析 のページが参考になります。
dummy

library(MASS)
library(dummies)

setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data10 <- Data

Data10$Y <- NULL
# Yの列を削除
Data11 <- Data10
# 出力先の行列を作る

for (i in 1:ncol(Data10)) {
Data11[,i] <- (Data10[,i] - min(Data10[,i]))/(max(Data10[,i]) - min(Data10[,i]))
# 正規化
}

km <- kmeans(Data11,3) # k-means法で分類。これは3個のグループ分けの場合
cluster <- km$cluster
# 分類結果の抽出
cluster <- as.character(cluster)# 文字列に変換
cluster <- as.data.frame(cluster)
# データフレームに変換
cluster <- dummy.data.frame(cluster)
# ダミー変換
Data4 <-cbind(Data,cluster)
# データセットの作成
gm <- step(glm(Y~.^2, data=Data4, family= gaussian(link = "identity")))
# 線形混合モデル
summary(gm)
# 結果の出力

dummy
このコードだと、モデルに元の説明変数が入るため、結果の解釈がちょっと面倒です。

結果にcluster3の場合が入っていないですが、cluster3の単独の係数はX01やX02という所の係数に表れています。

cluster1とcluster2が少々面倒で、cluster1のX01の係数というのは、X01とX01:cluster1というのの和です。 この場合だと、前者が約-2で、後者が約4なので、「約2 (-2+4)」というのが、知りたい値になります。

#ここから予測の手順
library(ggplot2)
s2 <- predict(gm,Data4)
# 作業用ディレクトリを変更
Data4s2 <- cbind(Data4,s2)
# データを読み込み
ggplot(Data4s2, aes(x=Y, y=s2)) + geom_point() + labs(x="Y",y="predicted Y")

dummy

ほぼ一直線に並ぶので、非常に精度が高く予測できていることが、わかります。







Tweet データサイエンス教室