R Logistic Regression (ロジスティック回帰)

#ロジスティクス回帰分析は、1つのカテゴリカル変数を目的変数
#とし、その目的変数を説明変数で説明するモデルによる分析方法。

#より実践的なのはこちら ################目的変数が2値の場合################ ##単項多重ロジスティック回帰 #個票データが与えられている場合 library(vcd) head(SpaceShuttle) glm(formula = Fail ~ Temperature, data = SpaceShuttle, family = binomial) #集計データが与えられている場合 library(MASS) head(housing) #集計データ glm(formula = Sat ~ Cont, data = housing, weight = Freq, family = binomial) #カテゴリーごとにYesとNoの人数がわかる場合 dose <- c(1:5) effect <- c(2, 3, 9, 15, 18) effect.prop <- effect/20 plot(dose, effect.prop) glm(cbind(effect, 20 - effect)~dose,family=binomial) ##多重ロジスティック回帰 library(vcd) result <- glm(Fail ~ Temperature + Pressure, data = SpaceShuttle, family=binomial) result summary(result) #係数に関する検定や信頼区間の情報を知りたいとき #Residual Devienceは対数尤度 #1 observation delited due to missingnessは欠損値の数を示す #複数の説明変数が考えられる場合には、どの説明変数を用いたモデルが #良いのか、ということが問題となる。AICがその指標としてよく用いられる。 # AIC = -2(最大対数尤度)+2(モデルに含まれるパラメータ数) ##ステップワイズ法 #多重ロジスティック回帰においてモデルの選択を考える場合には、用いる #変数の組み合わせに対応して統計モデルが決まる。そのため、説明変数の個数が #大きくなる組み合わせが指数関数的に大きくなり、それらをすべて解析して #モデルを選択することは難しい。 #ステップワイズ法には、説明変数の数が0の場合からスタートして、 #だんだん説明変数を増やしていく変数増加法と、すべての説明変数を用いた #モデルからスタートして、だんだん変数を減らしていく変数減少法がある。 step(glm(Fail ~ Temperature + Pressure, data = SpaceShuttle, family = binomial)) #欠損値がある場合は、AICではなくBIC(Bayesian Information Criteria)を #用いることもある。 #BIC = -2(最大対数尤度)+2log(有効データ数)×(パラメータ数) step(glm(Fail ~ Temperature + Pressure, data = SpaceShuttle, family = binomial), k = log(23)) #23は有効データ数 #最後に表示されるAICはAIC、途中のAICはBICとなる ################目的変数がカテゴリカルの場合################ ##カテゴリー間に順序が無い場合 summary(iris) library(nnet) multinom(formula = Species ~ Sepal.Length, data = iris) #あるひとつのカテゴリを基準として、他のカテゴリとの対数オッズ #を推定する。 ##カテゴリー間に順序がある場合 summary(housing) head(housing) Ctable <- xtabs(Freq~Cont+Sat, data=housing) mosaicplot(Ctable,col=TRUE) library(MASS) polr(Sat ~ Cont, data = housing, weight = Freq) #家主の満足度(Sat)をLow+Medium,High/Low,Medium+Highで分けた #場合で、グループ間のオッズを表すパラメータを推定する。 ##条件付きロジスティック回帰分析 head(infert) infert[74,] Ctable <- xtabs(~case+parity+education,data=infert) Ctable library(survival) clogit(case ~ spontaneous+induced+strata(stratum),data=infert) infert head(infert) ################他のデータで練習################ #1 class(Titanic) TN1 <- data.frame(Titanic) TN2 <- data.frame(lapply(TN1, function(i) rep(i, TN1[,5]))) TN3 <- TN2[,-5] head(TN3) TN4 <- glm(Survived ~ Class+Sex+Age, data=TN3, family=binomial) summary(TN4) cbind(TN1, SurviveRate = predict(TN4, Titanic, type ="response")) exp(TN4$coefficient) #2 library(vcd) head(JointSports) nrow(JointSports) xtabs(~opinion+year, data = JointSports) JS <- polr(formula = opinion ~ year + grade + gender, data = JointSports) summary(JS) ##############SASデータを取り込んで実験############## install.packages("sas7bdat") library(sas7bdat) #SASデータはこちらから(http://nakhirot.hatenablog.com/entry/2013/05/01/220451) resp <- read.sas7bdat("resp_score.sas7bdat") names(resp) delete <- c(18:26) resp1 <- resp[,-delete] resp.LR <- glm(resp~.,family=binomial,data=resp1) summary(resp.LR) resp.LR1 <- summary(step(resp.LR)) #説明変数が多すぎるのでstepで回数削減 exp(resp.LR1$coefficients) #オッズを確認