#以下を実行したときに表示されるフォルダ名にデータ(v08c4tv.csv)を置いてください.
getwd()
#データの読み込み
c4tv
<-
read.csv("v08c4tv.csv")
#問1
#購入意向は0と1という値を持つ変数.
#jitter()でこの変数に小さな乱数の値を足している.それにより散布図で重なっている部分をばらけさせる.
#0.1の部分を大きくするとより広い範囲に,小さくすると狭い範囲にばらけさせることができる.
c4purchase<-jitter(c4tv$購入意向,0.1)
#散布図の描画.
plot(c4tv$高級志向度,
c4purchase, xlab="高級志向度",
ylab="購入か否か")
#単回帰分析lm(基準変数~予測変数)で分析できる.
c4lm
<- lm(購入意向~ 高級志向度, data
= c4tv)
summary(c4lm)
#abline(回帰分析の結果)で回帰直線を描画できる.散布図に上書き.
abline(c4lm, col = "blue")
#問2
#subset()で高級志向度が4,5,6のいずれかに該当する行のみを取り出すなどをおこなっている.
#%in% c(4,5,6)で,高級志向度が4,5,6なら条件に合うと判定.
c4tv04_06
<- subset(c4tv, 高級志向度 %in% c(4,5,6))
c4tv07_09
<- subset(c4tv, 高級志向度 %in% c(7,8,9))
c4tv10_12
<- subset(c4tv, 高級志向度 %in% c(10,11,12))
c4tv13_15
<- subset(c4tv, 高級志向度 %in% c(13,14,15))
c4tv16_18
<- subset(c4tv, 高級志向度 %in% c(16,17,18))
c4tv19_20
<- subset(c4tv, 高級志向度 %in% c(19,20))
#たとえば高級志向が4,5,6の人の中で,購入すると答えた人の割合を算出.
#購入しない=0,購入する=1なので,sum()部分で合計することで購入する人数を算出.
#nrow()部分は,データの行数=高級志向度4,5,6の人数を算出している.
c4ratio
<- c(sum(c4tv04_06$購入意向)/nrow(c4tv04_06),
sum(c4tv07_09$購入意向)/nrow(c4tv07_09),
sum(c4tv10_12$購入意向)/nrow(c4tv10_12),
sum(c4tv13_15$購入意向)/nrow(c4tv13_15),
sum(c4tv16_18$購入意向)/nrow(c4tv16_18),
sum(c4tv19_20$購入意向)/nrow(c4tv19_20))
#横軸の値の設定.高級志向度4,5,6の場合,横軸の値を5としている.
c4value
<- c(5,8,11,14,17,19.5)
#折れ線グラフの描画,散布図に上書き.
lines(c4value,
c4ratio)
#問3
#ロジスティック回帰分析
c4logireg1<-glm(購入意向 ~ 高級志向度, data = c4tv, family = binomial)
summary(c4logireg1)
#予測変数に4から20までの値を与える.予測変数はデータフレーム化しておく必要がある.
c4newdata1
= data.frame("高級志向度" = c(4:20))
#4から20までの値について確率を計算.predict(回帰分析の結果, 予測変数の値, type).typeはresponseにしておかないと確率を予測できない.
c4predict1
<- predict(c4logireg1, c4newdata1, type = "response")
#折れ線グラフの描画,散布図に上書き.
lines(c4newdata1$"高級志向度",
c4predict1, col = "red")
#問4
#9〜11の確率
predict(c4logireg1,
data.frame("高級志向度" = c(9:11)), type =
"response")
#9〜11のオッズ.predict()でtypeを設定しない(もしくはlinkと設定)とオッズの対数,つまりロジット(5章参照)が求まる.
#オッズの対数なので,指数変換すればオッズが求められる.
(c4odds
<- exp(predict(c4logireg1, data.frame("高級志向度" =
c(9:11)))))
#参考:上記計算でオッズを求められていることの確認.
0.3885635/(1-0.3885635)
#オッズ比,2つのオッズの割り算.c4odds[1]が高級志向度9,2なら10,3なら11.
c4odds[2]/c4odds[1]
c4odds[3]/c4odds[2]
#オッズ比はexp(傾き)になる.
exp(c4logireg1$coefficient[2])
#問5
#ロジスティック回帰分析
c4logireg2<-glm(購入意向 ~ 高級志向度 + 基本性能重視度,
data = c4tv, family = binomial)
summary(c4logireg2)
#高級志向度,基本性能重視度ともに10のデータフレームを作成して予測.
predict(c4logireg2,
data.frame("高級志向度" = 10, "基本性能重視度" = 10), type = "response")
#====================================================
#2022.09.09 齋藤朗宏・荘島宏二郎