From f9165c0f9fc483be994867baa6f048197847d359 Mon Sep 17 00:00:00 2001
From: dj44vuri <julian.sagebiel@idiv.de>
Date: Sat, 25 Nov 2023 01:07:55 +0100
Subject: [PATCH] with option tto use different utility functions for different
 respondents

---
 .gitignore                                   | 15 ++---
 Projects/Agora/parameters_agora.R            |  4 +-
 Projects/IP2/parameters_ip2.R                |  4 +-
 Projects/Parks/parameters_ip2_parks.R        |  4 +-
 Projects/SE_AGRI/parameters_SE Design-Agri.R |  6 +-
 Projects/SE_DRIVE/parameters_SE_DRIVE.R      | 12 +++-
 Projects/ValuGaps/parameters_valugaps.R      |  4 +-
 functions.R                                  | 62 ++++++++++++++------
 generatemd.R                                 |  2 +-
 9 files changed, 77 insertions(+), 36 deletions(-)

diff --git a/.gitignore b/.gitignore
index 6ea6506..6fd03d4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,8 @@
-.Rproj.user
-.Rhistory
-.RData
-.Ruserdata
-dce_simulation_tool.Rproj
-modeloutput/
-*.html
\ No newline at end of file
+.Rproj.user
+.Rhistory
+.RData
+.Ruserdata
+dce_simulation_tool.Rproj
+modeloutput/
+*.html
+simulation_output_files/
\ No newline at end of file
diff --git a/Projects/Agora/parameters_agora.R b/Projects/Agora/parameters_agora.R
index 230833d..fb6d198 100644
--- a/Projects/Agora/parameters_agora.R
+++ b/Projects/Agora/parameters_agora.R
@@ -28,7 +28,9 @@ bcomp = 0.02
 
 
 #place your utility functions here
-u<-list(
+u<-list( u1 =
+  list(
   v1=V.1 ~ basc + baction*alt1.b + badvisory * alt1.c + bpartner * alt1.d + bcomp * alt1.p , #Utility of alternative 1
   v2=V.2 ~ basc2 + baction*alt2.b + badvisory * alt2.c + bpartner * alt2.d + bcomp * alt2.p ,  #Utility of alternative 2
   v3=V.3 ~ 0)
+)
\ No newline at end of file
diff --git a/Projects/IP2/parameters_ip2.R b/Projects/IP2/parameters_ip2.R
index 865da17..4b1758e 100644
--- a/Projects/IP2/parameters_ip2.R
+++ b/Projects/IP2/parameters_ip2.R
@@ -16,7 +16,9 @@ for (ano in 1:length(priors)) {
 }
 
 #place your utility functions here
-u<-list(
+u<- list(u1=
+  list(
   v1 =V.1~  bascgemeinschaft +bgroesse*alt1.groesse+ bentfernung * alt1.entfernung + bgemeinschaft * alt1.gemeinschaft + bkultur * alt1.kultur + bumweltbildung*alt1.umweltbildung + bzugang * alt1.zugang+ bgestaltung*alt1.gestaltung + bbeitrag*alt1.beitrag  ,
   v2 =V.2~  bascklein        +bgroesse*alt2.groesse+ bentfernung * alt2.entfernung + bgemeinschaft * alt2.gemeinschaft + bkultur * alt2.kultur + bumweltbildung*alt2.umweltbildung + bzugang * alt2.zugang+ bgestaltung*alt2.gestaltung + bbeitrag*alt2.beitrag,
   v3 =V.3~ 0)
+)
\ No newline at end of file
diff --git a/Projects/Parks/parameters_ip2_parks.R b/Projects/Parks/parameters_ip2_parks.R
index 9d3f52b..38f84bb 100644
--- a/Projects/Parks/parameters_ip2_parks.R
+++ b/Projects/Parks/parameters_ip2_parks.R
@@ -16,9 +16,9 @@ for (ano in 1:length(priors)) {
 }
 
 #place your utility functions here
-u<-list(
+u<-list( u1 =list(
   v1 =V.1~  basc        +bgroesse*alt1.groesse+ bentfernung * alt1.entfernung + bgemeinschaft * alt1.gemeinschaft + bkultur * alt1.kultur + bumweltbildung*alt1.umweltbildung + btoiletten * alt1.toiletten+ bspiel*alt1.spiel + bpflegeint*alt1.pflegeint+bpflegeziele*alt1.pflegeziele+ bbeitrag*alt1.beitrag  ,
   v2 =V.2~  basc        +bgroesse*alt2.groesse+ bentfernung * alt2.entfernung + bgemeinschaft * alt2.gemeinschaft + bkultur * alt2.kultur + bumweltbildung*alt2.umweltbildung + btoiletten * alt2.toiletten+ bspiel*alt2.spiel + bpflegeint*alt2.pflegeint+bpflegeziele*alt2.pflegeziele+ bbeitrag*alt2.beitrag,
   v3 =V.3~ 0)
-
+)
 
diff --git a/Projects/SE_AGRI/parameters_SE Design-Agri.R b/Projects/SE_AGRI/parameters_SE Design-Agri.R
index 4942c18..4ecf79a 100644
--- a/Projects/SE_AGRI/parameters_SE Design-Agri.R	
+++ b/Projects/SE_AGRI/parameters_SE Design-Agri.R	
@@ -31,9 +31,9 @@ manipulations = list(alt1.professional=     expr(alt1.initiator==1),
 
 
 #place your utility functions here
-u<-list(
+u<- list(u1= 
+  list(
   v1 =V.1 ~  bprof*alt1.professional+ bexp * alt1.expert + bdomestic * alt1.domestic + bforeign * alt1.foreign + bdamage*alt1.damage + bprice * alt1.compensation,
   v2 =V.2 ~  bprof*alt2.professional + bexp * alt2.expert + bdomestic * alt2.domestic + bforeign * alt2.foreign + bdamage*alt2.damage + bprice * alt2.compensation,
   v3 =V.3 ~ basc)
-
-remotes::
\ No newline at end of file
+)
diff --git a/Projects/SE_DRIVE/parameters_SE_DRIVE.R b/Projects/SE_DRIVE/parameters_SE_DRIVE.R
index c372cfd..2672dc0 100644
--- a/Projects/SE_DRIVE/parameters_SE_DRIVE.R
+++ b/Projects/SE_DRIVE/parameters_SE_DRIVE.R
@@ -17,6 +17,8 @@ nosim= 2 # number of simulations to run (about 500 is minimum)
 # bwarte = -0.049
 
 
+decisiongroups=c(0,0.7,1)
+
 # wrong parameters
 
 # 
@@ -32,7 +34,15 @@ manipulations = list(alt1.x2=     expr(alt1.x2/10),
 
 
 #place your utility functions here
-u<-list(
+u<-list( u1 =
+  
+  list(
   v1 =V.1~  bpreis * alt1.x1 + blade*alt1.x2 + bwarte*alt1.x3   ,
   v2 =V.2~  bpreis * alt2.x1 + blade*alt2.x2 + bwarte*alt2.x3  
 )
+
+,
+u2 = list(  v1 =V.1~  bpreis * alt1.x1    ,
+             v2 =V.2~  bpreis * alt2.x1)
+
+)
diff --git a/Projects/ValuGaps/parameters_valugaps.R b/Projects/ValuGaps/parameters_valugaps.R
index 5ad0969..8e3e7fc 100644
--- a/Projects/ValuGaps/parameters_valugaps.R
+++ b/Projects/ValuGaps/parameters_valugaps.R
@@ -113,11 +113,11 @@ expr(across(.cols=matches("HNV|protected"),.fns =  ~.x^2, .names = "{.col}{'sq'}
 
 #place your utility functions here
 
-u<-list(
+u<-list( u1= list(
   v1 =V.1~ basc + bb * alt1.protected +  bb2 * alt1.protectedsq + bc * alt1.HNV + bc2 * alt1.HNVsq + bp * alt1.p , 
   v2 =V.2~ basc + bb * alt2.protected +  bb2 * alt2.protectedsq + bc * alt2.HNV + bc2 * alt2.HNVsq + bp * alt2.p ,
   v3 =V.3~        bb * alt3.protected +  bb2 * alt3.protectedsq + bc * alt3.HNV + bc2 * alt3.HNVsq )
-
+)
 
 
 
diff --git a/functions.R b/functions.R
index 9302e8d..0f2ce8c 100644
--- a/functions.R
+++ b/functions.R
@@ -1,4 +1,4 @@
-sim_choice <- function(designfile, no_sim=10, respondents=330, mnl_U,utils=u ) {
+sim_choice <- function(designfile, no_sim=10, respondents=330, mnl_U,utils=u[[1]] ) {
  
   
   require("tictoc")
@@ -18,7 +18,7 @@ sim_choice <- function(designfile, no_sim=10, respondents=330, mnl_U,utils=u ) {
   require("rlang")
    
   
-  mnl_U <-paste(map_chr(u,as.character,keep.source.attr = TRUE),collapse = "",";") %>%
+  mnl_U <-paste(map_chr(utils,as.character,keep.source.attr = TRUE),collapse = "",";") %>%
     str_replace_all( c( "priors\\[\"" = "" , "\"\\]" = "" ,  "~" = "=", "\\." = "_" , " b" = " @b"  , "V_"="U_", " alt"="$alt"))
   
  cat("mixl \n") 
@@ -42,14 +42,12 @@ sim_choice <- function(designfile, no_sim=10, respondents=330, mnl_U,utils=u ) {
 
   
   simulate_choices <- function(data=datadet) {  #the part in dataset that needs to be repeated in each run
-cat("does sou_gis exist: ")
-   print( exists("sou_gis"))
-   # browser()    
- 
+cat(" \n does sou_gis exist: ", exists("sou_gis"), "\n")
+
     if (exists("sou_gis") && is.function(sou_gis)) {
       sou_gis()
       
-      cat("source of gis has been done")
+      cat("\n source of gis has been done \n")
     }    
        
    # source("Projects/ValuGaps/code/GIS_data.R")
@@ -59,29 +57,57 @@ cat("does sou_gis exist: ")
     n=seq_along(1:length(utils))    # number of utility functions
 
     
-    
+#browser()    
 
 
-    print(exists("final_set"))
+    cat("\n dataset final_set exists: ",exists("final_set"), "\n")
+    
+    if(exists("final_set")) data = left_join(data,final_set, by = "ID")   
     
-    if(exists("final_set")) data = left_join(data,final_set, by = "ID")     
+    cat("\n decisiongroups exists: " ,exists("decisiongroups"))  
     
-      data <-  data %>% 
+    if(exists("decisiongroups"))  {     ### create a new variable to classify decision groups.
+      data = mutate(data,group = as.numeric(cut(row_number(), 
+                                 breaks = decisiongroups * n(), 
+                                 labels = seq_along(decisiongroups[-length(decisiongroups)]),
+                                 include.lowest = TRUE)))
+      
+      print(table(data$group))
+    } else {
+      
+      data$group=1
+    }
+   
+
+       data<- data %>% 
       group_by(ID) %>% 
-      mutate(!!! manipulations ,
-             map_dfc(utils,by_formula)) %>%    #our functions to create utility variables. They need to be entered as a formula list as an argument
-      rename_with(~ stringr::str_replace(.,pattern = "\\.","_"), everything()) %>% 
+      mutate(!!! manipulations) 
+             
+
+          
+subsets<- split(data,data$group)     
+   
+subsets <-  map2(.x = seq_along(u),.y = subsets,
+                 ~ mutate(.y,map_dfc(u[[.x]],by_formula)))
+ 
+data <-bind_rows(subsets)           
+ 
+   data<- data %>%       
+     rename_with(~ stringr::str_replace(.,pattern = "\\.","_"), everything()) %>% 
         mutate(across(.cols=n,.fns = ~ rgumbel(setpp,loc=0, scale=1), .names = "{'e'}_{n}" ), 
          across(starts_with("V_"), .names = "{'U'}_{n}") + across(starts_with("e_")) ) %>% ungroup() %>% 
          mutate(CHOICE=max.col(.[,grep("U_",names(.))])
       )   %>% 
       as.data.frame()
 
+       
+       
     
-print("data has been made")
+print("\n data has been made \n")
 
-cat(head(data$CHOICE))
-    
+cat("\n First few observations \n ") 
+print(head(data))
+ cat("\n \n ")   
     return(data)
     
   } 
@@ -107,7 +133,7 @@ cat(head(data$CHOICE))
                        escape_double = FALSE,
                        trim_ws = TRUE  , 
                        col_select = c(-Design, -starts_with("...")) ,
-                       name_repair = "universal") %>% 
+                       name_repair = "universal" , show_col_types = FALSE) %>% 
     filter(!is.na(Choice.situation)) 
   
   
diff --git a/generatemd.R b/generatemd.R
index 76d97fc..5808e8b 100644
--- a/generatemd.R
+++ b/generatemd.R
@@ -2,7 +2,7 @@
 rm(list=ls())
 
 #file <- "Projects/ValuGaps/parameters_valugaps.R"
-  file <- "Projects/SE_DRIVE/parameters_SE_DRIVE.R"
+  file <- "Projects/SE_AGRI/parameters_SE Design-Agri.R"
 
 
 rmarkdown::render("simulation_output.rmd",
-- 
GitLab