Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
transform_dce.R 4.00 KiB
rm(list=ls())

# Load packages 
library(tidyverse)
library(tidylog)

# Read in Data and choice cards 
load("Data/01_renaming.RData")

choice_cards <- readxl::read_excel("Data/Choice_Cards.xlsx", sheet=2)

## QE1a - QE30 choices 
# Transform choice variables 

variable_names <- c("QE1a", paste0("QE", 2:30))

char_to_numeric <- function(x) as.numeric(recode(x, A1 = "1", A2 = "2", A3 = "3"))


data_choice <- data %>%
  mutate(across(all_of(variable_names), ~ char_to_numeric(.)))

# Reshape data to long format such that every choice set is one row 
data_choice <- data_choice %>%
  pivot_longer(cols = all_of(variable_names), names_to = "cset", values_to = "choice")

data_choice <- data_choice %>%
  mutate(cset = as.numeric(gsub("\\D", "", cset)))

# Remove not available choice set for each respondents 
data_choice <- data_choice %>% filter(!is.na(choice))

# Create status quo values 

# Values for the new row
new_row <- c(0, 1, 1, NA, 3)

choice_cards_sq <- do.call(rbind, lapply(unique(choice_cards$cset), function(cset_value) {
  subset_df <- choice_cards[choice_cards$cset == cset_value, ]
  if (nrow(subset_df) == 2) {
    new_row[4] <- cset_value  # Set cset in the new row
    rbind(subset_df, new_row)
  } else {
    subset_df
  }
}))

choice_cards_sq <- choice_cards_sq %>% arrange(cset)

# Merge survey data with choice cards 
data_choice_merged <- left_join(data_choice, choice_cards_sq, by="cset") 

data_choice_merged <- data_choice_merged %>% mutate(Q27W123 = as.numeric(recode(Q27W123,  A1 = "1", A2 = "2", A3 = "3",
                                                                     A4= "4", A5 ="5")))

# Create individual attribute levels and status quo variables 
data_choice_merged <- data_choice_merged %>% mutate(Rent = (Q07W123 + Q08W123)*Miete,
                                                    WalkingDistance = Q22S01W123 *Erreichbarkeit,
                                                    Naturalness = case_when(Naturnähe == 0 ~ Q27W123, 
                                                                            TRUE ~ Naturnähe),
                                                    Rent_SQ = Q07W123 + Q08W123,
                                                    WalkingDistance_SQ = Q22S01W123,
                                                    Naturalness_SQ = Q27W123)

# Remove unnecessary variables 
data_choice_merged <- data_choice_merged %>% select(-Naturnähe, -Erreichbarkeit, -Miete)

# Reshape data for apollo use
database <- pivot_wider(data_choice_merged, names_from = alt,
                              values_from = c("Rent", "WalkingDistance", "Naturalness"))

database <- database %>% arrange(X.U.FEFF.id)

# Recode treatment variables 

database <- database %>% mutate(T01W3 = as.numeric(recode(T01W3, AO02 = "0", AO01 = "1")),
                                T02W3 = as.numeric(recode(T02W3, A1 = "1", A2 = "0")),
                                T03W3 = as.numeric(recode(T03W3, AO02 = "0", AO01 = "1")))

# Create New Treatment Groups

database <- database %>%
  mutate(Treatment_new = case_when(
    T01W3 == 1 ~ 1, # group 1 watched video
    T01W3 == 0 ~ 2, # group 1 no video
    T02W3 == 0 ~ 3, # group 2 no information
    T02W3 == 1 & T03W3 == 0 ~ 4, # group 2 information no video
    T02W3 == 1 & T03W3 == 1 ~ 5, # group 2 information and video
    Treatment == 3 ~ 6, # group 3 no treatment 
    TRUE ~ NA_real_),
    Treatment_name = case_when(
    Treatment_new == 1 ~ 'Video 1',
    Treatment_new == 2 ~ 'No Video 1',
    Treatment_new == 3 ~ 'No Info 2',
    Treatment_new == 4 ~ 'No Video 2',
    Treatment_new == 5 ~ 'Video 2',
    Treatment_new == 6 ~ 'No Treatment 3',
    TRUE ~ NA_character_
  ))

# Only keep DCE relevant variables 
database_full <- database %>% 
  rename(id = "X.U.FEFF.id")

save(database_full, file="Data/database_full.RData")

database <- database %>% select(X.U.FEFF.id, Treatment, Treatment_new, choice, starts_with(c("Rent", "WalkingDistance", "Naturalness"))) %>% 
  rename(id = "X.U.FEFF.id")

save(database, file="Data/database.RData")