Bring in the current data and necessary packages.

setwd("C:/Work Files/RDA/Consults/Ewa Golebiowska")

######Packages#####
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(haven)
library(cjoint)
## Loading required package: sandwich
## Loading required package: lmtest
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Loading required package: survey
## Loading required package: grid
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## 
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## 
## Loading required package: survival
## 
## Attaching package: 'survey'
## 
## The following object is masked from 'package:graphics':
## 
##     dotchart
## 
## cjoint: AMCE Estimator for Conjoint Experiments
## Version: 2.1.1
## Authors: Soubhik Barari, Elissa Berwick, Jens Hainmueller, Daniel Hopkins, Sean Liu, Anton Strezhnev, Teppei Yamamoto
## 
## 
## Attaching package: 'cjoint'
## 
## The following object is masked from 'package:tibble':
## 
##     view
TESS_Data <-read_sav("TESS conjoint data.sav")

Create a set of new variables for Q9 - Q16 based on the party affiliations for candidates A and B for each comparison. This new variable is named Qn_Partisan_Comp, where n=question number (e.g., Q9, Q10, etc.). This variable is an unordered factor where: 1 = both candidates are democrats 2 = both candidates are republicans 3 = candidate ‘A’ is a democrat and candidate ‘B’ is a republican 4 = candidate ‘A’ is a republican and candidate ‘B’ is a democrat

If this only needs to be a binary choice (0=partisan, 1 = bipartisan), then this variable can be recoded such that if value is 1 or 2, then = 0; if value is 3 or 4, then = 1.

TESS_Data_New <- TESS_Data

TESS_Data_New <- TESS_Data %>%
  mutate(Q9_Partisan_Comp = case_when(
    Q9A_Att7Party == 1 & Q9B_Att7Party == 1 ~ 1,
    Q9A_Att7Party == 2 & Q9B_Att7Party == 2 ~ 2,
    Q9A_Att7Party == 1 & Q9B_Att7Party == 2 ~ 3,
    Q9A_Att7Party == 2 & Q9B_Att7Party == 1 ~ 4
  ))

TESS_Data_New_2<- TESS_Data_New %>%
  mutate(Q10_Partisan_Comp = case_when(
    Q10A_Att7Party == 1 & Q10B_Att7Party == 1 ~ 1,
    Q10A_Att7Party == 2 & Q10B_Att7Party == 2 ~ 2,
    Q10A_Att7Party == 1 & Q10B_Att7Party == 2 ~ 3,
    Q10A_Att7Party == 2 & Q10B_Att7Party == 1 ~ 4
  ))

TESS_Data_New_3 <- TESS_Data_New_2 %>%
  mutate(Q11_Partisan_Comp = case_when(
    Q11A_Att7Party == 1 & Q11B_Att7Party == 1 ~ 1,
    Q11A_Att7Party == 2 & Q11B_Att7Party == 2 ~ 2,
    Q11A_Att7Party == 1 & Q11B_Att7Party == 2 ~ 3,
    Q11A_Att7Party == 2 & Q11B_Att7Party == 1 ~ 4
  ))

TESS_Data_New_4 <- TESS_Data_New_3 %>%
  mutate(Q12_Partisan_Comp = case_when(
    Q12A_Att7Party == 1 & Q12B_Att7Party == 1 ~ 1,
    Q12A_Att7Party == 2 & Q12B_Att7Party == 2 ~ 2,
    Q12A_Att7Party == 1 & Q12B_Att7Party == 2 ~ 3,
    Q12A_Att7Party == 2 & Q12B_Att7Party == 1 ~ 4
  ))

TESS_Data_New_5 <- TESS_Data_New_4 %>%
  mutate(Q13_Partisan_Comp = case_when(
    Q13A_Att7Party == 1 & Q13B_Att7Party == 1 ~ 1,
    Q13A_Att7Party == 2 & Q13B_Att7Party == 2 ~ 2,
    Q13A_Att7Party == 1 & Q13B_Att7Party == 2 ~ 3,
    Q13A_Att7Party == 2 & Q13B_Att7Party == 1 ~ 4
  ))

TESS_Data_New_6 <- TESS_Data_New_5 %>%
  mutate(Q14_Partisan_Comp = case_when(
    Q14A_Att7Party == 1 & Q14B_Att7Party == 1 ~ 1,
    Q14A_Att7Party == 2 & Q14B_Att7Party == 2 ~ 2,
    Q14A_Att7Party == 1 & Q14B_Att7Party == 2 ~ 3,
    Q14A_Att7Party == 2 & Q14B_Att7Party == 1 ~ 4
  ))

TESS_Data_New_7 <- TESS_Data_New_6 %>%
  mutate(Q15_Partisan_Comp = case_when(
    Q15A_Att7Party == 1 & Q15B_Att7Party == 1 ~ 1,
    Q15A_Att7Party == 2 & Q15B_Att7Party == 2 ~ 2,
    Q15A_Att7Party == 1 & Q15B_Att7Party == 2 ~ 3,
    Q15A_Att7Party == 2 & Q15B_Att7Party == 1 ~ 4
  ))

TESS_Data_New_8 <- TESS_Data_New_7 %>%
  mutate(Q16_Partisan_Comp = case_when(
    Q16A_Att7Party == 1 & Q16B_Att7Party == 1 ~ 1,
    Q16A_Att7Party == 2 & Q16B_Att7Party == 2 ~ 2,
    Q16A_Att7Party == 1 & Q16B_Att7Party == 2 ~ 3,
    Q16A_Att7Party == 2 & Q16B_Att7Party == 1 ~ 4
  ))

TESS_Data_Final <- TESS_Data_New_8

In order to makes sure the recoding matches the original data we can compare the frequencies of the 4 categories of the new variable with a crosstabs from the original variables.

table(TESS_Data_Final$Q9_Partisan_Comp)
## 
##   1   2   3   4 
## 351 322 302 299
crosstab <- table(TESS_Data_New$Q9A_Att7Party, TESS_Data_New$Q9B_Att7Party)
print(crosstab)
##    
##       1   2
##   1 351 302
##   2 299 322
table(TESS_Data_Final$Q10_Partisan_Comp)
## 
##   1   2   3   4 
## 358 318 293 305
crosstab <- table(TESS_Data_New$Q10A_Att7Party, TESS_Data_New$Q10B_Att7Party)
print(crosstab)
##    
##       1   2
##   1 358 293
##   2 305 318
table(TESS_Data_Final$Q11_Partisan_Comp)
## 
##   1   2   3   4 
## 354 313 298 309
crosstab <- table(TESS_Data_New$Q11A_Att7Party, TESS_Data_New$Q11B_Att7Party)
print(crosstab)
##    
##       1   2
##   1 354 298
##   2 309 313
table(TESS_Data_Final$Q12_Partisan_Comp)
## 
##   1   2   3   4 
## 354 324 296 300
crosstab <- table(TESS_Data_New$Q12A_Att7Party, TESS_Data_New$Q12B_Att7Party)
print(crosstab)
##    
##       1   2
##   1 354 296
##   2 300 324
table(TESS_Data_Final$Q13_Partisan_Comp)
## 
##   1   2   3   4 
## 357 320 292 305
crosstab <- table(TESS_Data_New$Q13A_Att7Party, TESS_Data_New$Q13B_Att7Party)
print(crosstab)
##    
##       1   2
##   1 357 292
##   2 305 320
table(TESS_Data_Final$Q14_Partisan_Comp)
## 
##   1   2   3   4 
## 349 321 296 308
crosstab <- table(TESS_Data_New$Q14A_Att7Party, TESS_Data_New$Q14B_Att7Party)
print(crosstab)
##    
##       1   2
##   1 349 296
##   2 308 321
table(TESS_Data_Final$Q15_Partisan_Comp)
## 
##   1   2   3   4 
## 355 318 296 305
crosstab <- table(TESS_Data_New$Q15A_Att7Party, TESS_Data_New$Q15B_Att7Party)
print(crosstab)
##    
##       1   2
##   1 355 296
##   2 305 318
table(TESS_Data_Final$Q16_Partisan_Comp)
## 
##   1   2   3   4 
## 356 318 300 300
crosstab <- table(TESS_Data_New$Q16A_Att7Party, TESS_Data_New$Q16B_Att7Party)
print(crosstab)
##    
##       1   2
##   1 356 300
##   2 300 318

Since the cell frequencies for the new variables and the original variables match we can make the new variables unordered facors that can be used in the cjoint design file and as a predictor/control in the AMCE model

TESS_Data_Final$Q9_Partisan_Comp <-factor(TESS_Data_Final$Q9_Partisan_Comp,
                                           levels = c(1,2,3,4),
                                           labels = c("Both Candidates Democrats",
                                                      "Both Candidates Republican",
                                                      "Democrat A Republican B", 
                                                      "Republican A Democrat B" ))

TESS_Data_Final$Q10_Partisan_Comp <-factor(TESS_Data_Final$Q10_Partisan_Comp,
                                           levels = c(1,2,3,4),
                                           labels = c("Both Candidates Democrats",
                                                      "Both Candidates Republican",
                                                      "Democrat A Republican B", 
                                                      "Republican A Democrat B" ))

TESS_Data_Final$Q11_Partisan_Comp <-factor(TESS_Data_Final$Q11_Partisan_Comp,
                                           levels = c(1,2,3,4),
                                           labels = c("Both Candidates Democrats",
                                                      "Both Candidates Republican",
                                                      "Democrat A Republican B", 
                                                      "Republican A Democrat B" ))

TESS_Data_Final$Q12_Partisan_Comp <-factor(TESS_Data_Final$Q12_Partisan_Comp,
                                           levels = c(1,2,3,4),
                                           labels = c("Both Candidates Democrats",
                                                      "Both Candidates Republican",
                                                      "Democrat A Republican B", 
                                                      "Republican A Democrat B" ))

TESS_Data_Final$Q13_Partisan_Comp <-factor(TESS_Data_Final$Q13_Partisan_Comp,
                                           levels = c(1,2,3,4),
                                           labels = c("Both Candidates Democrats",
                                                      "Both Candidates Republican",
                                                      "Democrat A Republican B", 
                                                      "Republican A Democrat B" ))

TESS_Data_Final$Q14_Partisan_Comp <-factor(TESS_Data_Final$Q14_Partisan_Comp,
                                           levels = c(1,2,3,4),
                                           labels = c("Both Candidates Democrats",
                                                      "Both Candidates Republican",
                                                      "Democrat A Republican B", 
                                                      "Republican A Democrat B" ))

TESS_Data_Final$Q15_Partisan_Comp <-factor(TESS_Data_Final$Q15_Partisan_Comp,
                                           levels = c(1,2,3,4),
                                           labels = c("Both Candidates Democrats",
                                                      "Both Candidates Republican",
                                                      "Democrat A Republican B", 
                                                      "Republican A Democrat B" ))

TESS_Data_Final$Q16_Partisan_Comp <-factor(TESS_Data_Final$Q16_Partisan_Comp,
                                           levels = c(1,2,3,4),
                                           labels = c("Both Candidates Democrats",
                                                      "Both Candidates Republican",
                                                      "Democrat A Republican B", 
                                                      "Republican A Democrat B" ))

Finally we can write the new file to both CSV and SPSS formats

write.csv(TESS_Data_Final,"TESS_Data_Final.csv")
write_sav(TESS_Data_Final,"TESS_Data_Final.sav")