Rational-Inattention-Discrete-Choice / Section_3 / 3.4 / RI_scale_mix_comparison_Main.R
RI_scale_mix_comparison_Main.R
Raw
#Scale Mixture RI

rm(list=ls())
setwd("~/GitHub/OWN_LOCAL_PATH/Section3/3.4")

library("RcppArmadillo")
library(bayesm)
source('RIDC2_SIM.R')
Rcpp::sourceCpp('BA.cpp')
Rcpp::sourceCpp('RIDCM_MH_hier_singlecmplx_parallel_scale_mix_one_inside.cpp')


P = 1000#number of individuals
N = 20  #number of choices per individual
lambda = 0.25

#attribute levels
rho_simple=c(2.5,3,3.5,4,4.5) #simple attribute levels
rho_complex=c(0,0.5,1,1.5,2)  #complex attribute levels

#generating heterogenous preferences

# settings RI model
states=rbind(rho_complex,rep(0,length(rho_complex)))
set.seed(1000)
  pricecoefs=rnorm(P,-1,0.2) #drawing price coefficients in population
  beta_price=matrix(c(rnorm(P, 2.5, 0.5), #brand coefficients
                      pricecoefs,
                      -pricecoefs), ncol= 3)
  
  max(pricecoefs) #check if all pricecoefs are negative
  
  loglambda_all=rnorm(P,-1.4,0.3)
  
  #Simulating Data - Version Feb 2022
 # set.seed(1)
  SIM_LIST<-NULL
  for (i in 1:P){
    SIM_LIST[[i]]=RIDC2_Sim(beta_price[i,], exp(loglambda_all[i]), rho_complex, rho_simple,N, complex="price")
  }
  
  #collecting Data in List form
  Data = vector(mode="list",P)
  for(i in 1:P){
    Data[[i]]=vector(mode="list",N)
  }
  
  for(j in 1:P){
    for(i in 1:N){
      Data[[j]][[i]]$X = SIM_LIST[[j]][[i]]$X
      Data[[j]][[i]]$y = SIM_LIST[[j]][[i]]$choice
      Data[[j]][[i]]$v = SIM_LIST[[j]][[i]]$curr_state
    }
  }
  
  

 
  out_RI=RIDC_MH_hier_cpp_parallel_joint(Data=Data, R=10000, lambda=lambda,
                           simp_idx=c(0,1), comp_idx=2, states=states,
                           Bbar=matrix(rep(0,2),ncol=2),
                           Areg=matrix(0.01),NUreg=4,Vreg=diag(1.5,2), 
                           propvar=diag(0.01,2),
                           beta_start=c(2.4,-0.95),
                           hier_beta_start=c(2.4,-0.95),hier_var_start=diag(2))
  
  out_scale_mix=RIDC_MH_hier_scale_mix_joint_cpp(Data=Data, R=10000,
                                          simp_idx=c(0,1), comp_idx=2, states=states,
                                          Bbar=matrix(rep(0,2),ncol=2),
                                          Areg=matrix(0.01),NUreg=4,Vreg=diag(1.5,2), 
                                          propvar=diag(0.1,2),
                                          beta_start=c(2.4,-0.95),#colMeans(beta_price[,1:2]),#c(4,-1.3,1.3),
                                          hier_beta_start=c(2.4,-0.95),hier_var_start=diag(2),
                                          loglambda_start=-1.4, propsdlambda = 0.2, loglambdafix = -1.4)
  
summary.bayesm.mat(t(out_RI$hiermean[,1001:10000]))
summary.bayesm.mat(t(out_scale_mix$hiermean[,1001:10000])) 

plot(out_scale_mix$hiermean[1,])
plot(out_RI$hiermean[1,])
plot(out_RI$hiermean[2,])

plot(colSums(out_RI$lhdraw[,1001:10000]))
logMargDenNR(colSums(out_scale_mix$lhdraw[,2001:10000]))
logMargDenNR(colSums(out_RI$lhdraw[,2001:10000]))  

hiervars_RI<-hiervars_RI_scale_mix<-matrix(nrow=10000, ncol=2)
for (i in 1:10000){
  hiervars_RI[i,]=diag(out_RI$hiervar[,,i])
  hiervars_RI_scale_mix[i,]=diag(out_scale_mix$hiervar[,,i])
  
}

summary.bayesm.mat(hiervars_RI[2001:10000,])
summary.bayesm.mat(hiervars_RI_scale_mix[2001:10000,])