Rによるデータ分析

Rによるロジスティック回帰分析

ロジスティック回帰分析 のRによる実施例です。

2値分類のロジスティック回帰分析

基本のロジスティック回帰分析です。

ここでは、以下のデータを使っています。 このデータのcsvファイルが、CドライブのRtestというフォルダにあることを想定しています。
logistic

setwd("C:/Rtest")
Data <- read.csv("Data.csv", header=T)
library(ggplot2)
ggplot(Data, aes(x=X01, y=Y)) + geom_point()

logistic

library(nnet)
LR<-multinom(Y ~ X01, data=Data)
Data2 <- cbind(Data,LR$fitted.values)
ggplot(Data2, aes(x=X01,y=Data2[,3])) + geom_line() + geom_point()+ylab("probability")

logistic

多項ロジスティック回帰分析

カテゴリが3つ以上ある場合です。

結果のグラフを作る部分以外は、2値の時と同じ手順でできます。

ここでは、以下のデータを使っています。
logistic

setwd("C:/Rtest")
Data <- read.csv("Data.csv", header=T)
library(ggplot2)
ggplot(Data, aes(x=X01, y=Y)) + geom_point()

logistic

library(nnet)
LR<-multinom(Y ~ X01, data=Data)
Data2 <- cbind(Data,LR$fitted.values)
Data2$Y <- NULL
library(tidyr)
Data_long <- tidyr::gather(Data2, key="Y_name", value = probability, -X01)
ggplot(Data_long, aes(x=X01,y=probability, colour=Y_name)) + geom_line() + geom_point()

logistic

順序ロジスティック回帰分析

カテゴリが3つ以上あって、カテゴリの順番に意味がある場合です。

ここでは、以下のデータを使っています。
logistic

setwd("C:/Rtest")
Data <- read.csv("Data.csv", header=T)
library(ggplot2)
ggplot(Data, aes(x=X01, y=Y)) + geom_point()

logistic

library(MASS)
Data$Y <- as.factor(Data$Y)
LR<-polr(Y ~ X01, data=Data)
library(tidyr)
Data_long <- tidyr::gather(Data2, key="Y_name", value = probability, -X01)
ggplot(Data_long, aes(x=X01,y=probability, colour=Y_name)) + geom_line() + geom_point()

logistic

クラスター高次元化ロジスティック回帰分析

ベクトル量子化 で説明変数を1次元の質的変数に圧縮してから、 ダミー変換 で多次元にします。 これを新しい説明変数として、普通のロジスティック回帰分析をします。

ここでは、以下のデータを使っています。
logistic

library(MASS)
library(dummies)
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Y <- Data$Y
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,10)
# k-means法で分類。これは10個のグループ分けの場合
cluster <- km$cluster
# 分類結果の抽出
cluster <- as.character(cluster)
# 文字列に変換
cluster <- as.data.frame(cluster)
# データフレームに変換
Data5 <-cbind(Data,cluster)
# データセットの作成
cluster <- dummy.data.frame(cluster)
# ダミー変換
Data4 <-cbind(Y,cluster)
# データセットの作成
gm <- step(glm(Y~., data=Data4, family= binomial(link = "logit")))
library(ggplot2)
predicted_Y <- predict(gm,Data4,type="response")
Data2s2 <- cbind(Data5,predicted_Y)# データを読み込み
ggplot(Data2s2, aes(x=X01, y=X02)) + geom_point(aes(colour=predicted_Y)) + scale_color_viridis_c(option = "D")

logistic
完璧に予測できていることがわかります。

下記で、クラスターがどのように作られたのかが、わかります。
ggplot(Data2s2, aes(x=X01, y=X02)) + geom_point(aes(colour=cluster))

logistic



参考文献

CRAN
https://cran.r-project.org/web/packages/MASS/MASS.pdf
MASSのマニュアルです。


CRAN
https://cran.r-project.org/web/packages/nnet/nnet.pdf
nnetのマニュアルです。


機械学習のための特徴量エンジニアリング」 Alice Zheng・Amanda Casari 著 オライリー・ジャパン 2019
名前はついていないのですが、クラスター高次元化回帰分析と同じ内容の方法が、ベクトル量子化の解説の後に、紹介されています。



Tweet データサイエンス教室