#------------------------------------練習問題8-4の解答例 推定したパラメータとデータを用いて確率を計算

#------Rの出力8-2-ブランドへの属性評価とブランド定数で説明したモデルで推定したパラメータとデータを用いて確率を計算
#------Rの出力8-2の実行直後に実行すること。

beta<-beta.estimated
#3つのβの推定値
beta1 <- beta[1]
beta2 <- beta[2]
beta3 <- beta[3]

#ブランド定数の推定値
bc01<- beta[4]
bc02<- beta[5]
bc03<- beta[6]
bc04<- beta[7]
bc05<- beta[8]
bc06<- beta[9]
#確定的効用
V1<- beta1*btaste1+beta2*bfraver1+beta3*bdesign1+bc01
V2<- beta1*btaste2+beta2*bfraver2+beta3*bdesign2+bc02
V3<- beta1*btaste3+beta2*bfraver3+beta3*bdesign3+bc03
V4<- beta1* btaste4+beta2*bfraver4+beta3*bdesign4+bc04
V5<- beta1* btaste5+beta2*bfraver5+beta3*bdesign5+bc05
V6<- beta1* btaste6+beta2*bfraver6+beta3*bdesign6+bc06
V7<- beta1* btaste7+beta2*bfraver7+beta3*bdesign7
#ロジットモデルの分母
denom<-exp(V1)+exp(V2)+exp(V3)+exp(V4)+exp(V5)+exp(V6)+exp(V7)
#各ブランドの選択確率
P1<-exp(V1)/denom
P2<-exp(V2)/denom
P3<-exp(V3)/denom
P4<-exp(V4)/denom
P5<-exp(V5)/denom
P6<-exp(V6)/denom
P7<-exp(V7)/denom

#推定値を用いて計算された選択確率
P<-data.frame(P1,P2,P3,P4,P5,P6,P7)

#実際のシェア
s<- mean(data.frame(d1,d2,d3,d4,d5,d6,d7))
s

#予測シェアの計算1 各個人の選択確率を平均
es1<- mean(P)
es1
#誤差の絶対値の平均 Mean Absolute Errorの計算
mae1<-mean(abs(s-es1))
mae1

#(選択毎の)一致率の計算2 各個人が選択確率最大となるブランドを選ぶとする。
#最大の選択確率を行(各回答者)ごとに求める
Pmax<-apply(P,1,max)
#選択確率が最大のものを選ぶとして、選択ダミーを定義。簡単のためタイ(同じ確率)の処理は無視。
ed1<-as.numeric(P1==Pmax)
ed2<-as.numeric(P2==Pmax)
ed3<-as.numeric(P3==Pmax)
ed4<-as.numeric(P4==Pmax)
ed5<-as.numeric(P5==Pmax)
ed6<-as.numeric(P6==Pmax)
ed7<-as.numeric(P7==Pmax)

#一致率(各個人の各選択をどれくらい正しく予測できたかを計算
#上のダミーを用いて、何番のブランドを選んだか番号化
eblikbnr<-ed1+ed2*2+ed3*3+ed4*4+ed5*5+ed6*6+ed7*7

#これと実際の選択ブランド番号をクロス集計。対角項が正しく予測されたオブザベーション。
table(eblikbnr,blikbnr)

#ヒット率 実際に選ばれたブランドと予測が一致した割合。
mean(eblikbnr==blikbnr)

#参考)これらの平均値(ダミー変数の平均なので選択された割合)もシェアと考えることが出来る。
es2<- mean(data.frame(ed1,ed2,ed3,ed4,ed5,ed6,ed7))
es2
mae2<-mean(abs(s-es2))
mae2