From 36c1a9500a81b3d3d272ad6d33a389859a39b770 Mon Sep 17 00:00:00 2001 From: yhoriuchi Date: Wed, 16 Aug 2023 09:20:00 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20yhoriuch?= =?UTF-8?q?i/projoint@d7c9fa970070bc8a642827fdb3f13fe807367913=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- articles/06-compare.html | 67 +++++++++++++++++- .../figure-html/unnamed-chunk-11-1.png | Bin 0 -> 41877 bytes pkgdown.yml | 2 +- search.json | 2 +- 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 articles/06-compare_files/figure-html/unnamed-chunk-11-1.png diff --git a/articles/06-compare.html b/articles/06-compare.html index 7a60ae6..5ecd531 100644 --- a/articles/06-compare.html +++ b/articles/06-compare.html @@ -224,7 +224,72 @@

Visualize subgroup differences

6.3 Choice-level analysis

-

To be written.

+

We encourage users of our package to make custom figures based on the +estimates of your choice-level analysis. The following is just one +example.

+
+df_D <- exampleData1 %>% 
+  filter(party_1 == "Democrat") %>% 
+  reshape_projoint(.idvar = "ResponseId", 
+                   .outcomes = outcomes,
+                   .outcomes_ids = c("A", "B"),
+                   .alphabet = "K", 
+                   .repeated = TRUE,
+                   .flipped = TRUE)
+
+df_R <- exampleData1 %>% 
+  filter(party_1 == "Republican") %>% 
+  reshape_projoint(.idvar = "ResponseId", 
+                   .outcomes = outcomes,
+                   .outcomes_ids = c("A", "B"),
+                   .alphabet = "K", 
+                   .repeated = TRUE,
+                   .flipped = TRUE)
+
+df_0 <- exampleData1 %>% 
+  filter(party_1 %in% c("Something else", "Independent")) %>% 
+  reshape_projoint(.idvar = "ResponseId", 
+                   .outcomes = outcomes,
+                   .outcomes_ids = c("A", "B"),
+                   .alphabet = "K", 
+                   .repeated = TRUE,
+                   .flipped = TRUE)
+
+qoi <- set_qoi(
+  .structure = "choice_level",
+  .estimand = "mm",
+  .att_choose = "att2", # Presidential Vote (2020)
+  .lev_choose = "level3", # 70% Democrat, 30% Republican 
+  .att_notchoose = "att2", 
+  .lev_notchoose = "level1", # 30% Democrat, 70% Republican
+)
+
+out_D <- projoint(df_D, qoi, .structure = "choice_level", .ignore_position = TRUE)
+out_R <- projoint(df_R, qoi, .structure = "choice_level", .ignore_position = TRUE)
+out_0 <- projoint(df_0, qoi, .structure = "choice_level", .ignore_position = TRUE)
+
+out_merged <- bind_rows(
+  out_D@estimates %>% mutate(party = "Democrat"),
+  out_R@estimates %>% mutate(party = "Republican"),
+  out_0@estimates %>% mutate(party = "Independent")
+) %>% 
+  filter(estimand == "mm_corrected")
+
+ggplot(out_merged, 
+       aes(y = party,
+           x = estimate)) +
+  geom_vline(xintercept = 0.5,
+             linetype = "dashed", 
+             color = "gray") +
+  geom_pointrange(aes(xmin = conf.low,
+                      xmax = conf.high)) +
+  geom_text(aes(label = format(round(estimate, digits = 2), nsmall = 2)),
+            vjust = -1) +
+  labs(y = NULL,
+       x = "Choice-level marginal mean", 
+       title = "Choose an area with 70% Democrat as opposed to an area with 30% Democrat") +
+  theme_classic()
+

diff --git a/articles/06-compare_files/figure-html/unnamed-chunk-11-1.png b/articles/06-compare_files/figure-html/unnamed-chunk-11-1.png new file mode 100644 index 0000000000000000000000000000000000000000..357b8091301b1047c3d53d642e11774da73b0239 GIT binary patch literal 41877 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 literal 0 HcmV?d00001 diff --git a/pkgdown.yml b/pkgdown.yml index 8293701..b040bf0 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -12,7 +12,7 @@ articles: correction: correction.html projoint: projoint.html structure: structure.html -last_built: 2023-08-16T08:57Z +last_built: 2023-08-16T09:17Z urls: reference: https://yhoriuchi.github.io/projoint/reference article: https://yhoriuchi.github.io/projoint/articles diff --git a/search.json b/search.json index 0b08674..79a251d 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement yusaku.horiuchi@dartmouth.edu. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired [Mozilla’s code conduct enforcement ladder][https://github.com/mozilla/inclusion]. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"generate-a-javascript-or-php-randomizer","dir":"Articles","previous_headings":"","what":"1.1 Generate a JavaScript or PHP randomizer","title":"1. Setting up your Qualtrics survey","text":"Strezhnev’s guide designing implementing conjoint surveys Qualtrics excellent reiterate . summarize: researchers first use ConjointSDT produce JavaScript PHP randomizer.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"javascript","dir":"Articles","previous_headings":"1.1 Generate a JavaScript or PHP randomizer","what":"JavaScript","title":"1. Setting up your Qualtrics survey","text":"JavaScript randomizer can inputted first screen Qualtrics survey, using Edit Question Javascript functionality. See following screenshot example: Javascript available . JavaScript produced ConjointSDT run internally within Qualtrics automatically creates values embedded fields. attributes levels constitute profile pairs conjoint task. example, embedded field “K-1-1-7” contains value (level) seventh attribute first profile (two) first task, “K-5-2-5” contains level fifth attribute second profile (two) fifth task.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"php","dir":"Articles","previous_headings":"1.1 Generate a JavaScript or PHP randomizer","what":"PHP","title":"1. Setting up your Qualtrics survey","text":"PHP randomizer must hosted server. following example hosted server: https://www.horiuchi.org/php/ACHR_Modified_2.php. (PHP file available .) PHP randomizer used Agadjanian, Carey, Horiuchi, Ryan (2023).","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"modify-your-javascript-or-php-randomizer","dir":"Articles","previous_headings":"","what":"1.2 Modify your Javascript or PHP randomizer","title":"1. Setting up your Qualtrics survey","text":"add additional constraints, removing ties two profiles, need revise PHP scripts Javascript manually. future release package, add additional feature make step easier. now, recommend use resources, including Open AI’s GPT-4), learn modify code. PHP example following manually added component end race one profile (candidate) always “White” another always “Black,” “Asian,” “Hispanic.” examples adding additional constraints, please send email package maintainer, Yusaku Horiuchi Thank !","code":"$treat_profile_one = \"B-\" . (string)$p . \"-1-\" . (string)$treat_number; $treat_profile_two = \"B-\" . (string)$p . \"-2-\" . (string)$treat_number; $cond1 = $returnarray[$treat_profile_one] == \"White\" && $returnarray[$treat_profile_two] == $type; $cond2 = $returnarray[$treat_profile_two] == \"White\" && $returnarray[$treat_profile_one] == $type; if ($cond1 or $cond2){$complete = True;}"},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"add-conjoint-tables-with-embedded-fields-in-qualtrics","dir":"Articles","previous_headings":"","what":"1.3 Add conjoint tables with embedded fields in Qualtrics","title":"1. Setting up your Qualtrics survey","text":"set JavaScript PHP randomizer, next step design, task, table using HTML insert embedded fiels. following screenshot first task example. complete HTML first conjoint task survey available . typical conjoint study include 5-10 tasks. number questions HTML pages correspond number tasks. embedded fields task different: first digit “K” increment 1 10 tasks progress.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"adding-a-repeated-task-recommended","dir":"Articles","previous_headings":"1.3 Add conjoint tables with embedded fields in Qualtrics","what":"Adding a repeated task (recommended!)","title":"1. Setting up your Qualtrics survey","text":"wish implement repeated task, , need copy task repeated (say, first task) later point survey (say, fifth task). recommend researchers flip order two profiles well. Therefore, Profile 1 original task becomes Profile 2 new task. , simply swap middle digit embedded fields . repeated task look like following: complete HTML repeated conjoint task survey available . Importantly,repeated task, researchers can use measure intra-respondent reliability (IRR).","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"a-sample-qualtrics-survey","dir":"Articles","previous_headings":"","what":"1.4 A sample Qualtrics survey","title":"1. Setting up your Qualtrics survey","text":"want copy Qualtric survey designed exmaple, download QSF file import Qualtrics account. can use template design conjoint survey experiment!","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"load-the-projoint-package","dir":"Articles","previous_headings":"","what":"2.1 Load the projoint package","title":"2. Read and wrangle your data for conjoint analysis","text":"","code":"library(projoint)"},{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"with-the-flipped-repeated-tasks","dir":"Articles","previous_headings":"2.2 Read and wrangle data","what":"With the flipped repeated tasks","title":"2. Read and wrangle your data for conjoint analysis","text":"Let’s look simple example. expand arguments clarity: Let’s walk arguments specified. .dataframe data frame, ideally read Qualtrics using read_Qualtrics() necessarily. .idvar argument, character, indicates exampleData1, column ResponseId indicates unique survey respondents. .outcomes variable lists columns outcomes; last element vector repeated task (conducted). .outcomes_ids indicates possible options outcome; specifically, vector characters two elements, last characters names first second profiles. example, c(“”, “B”) profile names “Candidate ” “Candidate B”. character vector can anything, c(“1”, “2”), c(“”, “b”), etc. multiple tasks design, use profile names across tasks. .alphabet defaults “K” conjoint survey conducted using either tool Strezhnev’s Conjoint Survey Design Tool. final two arguments, .repeated .flipped, relate repeated task. .repeated set TRUE, last element .outcomes vector taken repetition first task; .flipped indicates whether profiles reversed order. See Section 2.3 .fill.","code":"outcomes1 <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes1 <- c(outcomes1, \"choice1_repeated_flipped\") out1 <- reshape_projoint(.dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes1, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .fill = FALSE)"},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"with-the-not-flipped-repeated-tasks","dir":"Articles","previous_headings":"2.2 Read and wrangle data","what":"With the not-flipped repeated tasks","title":"2. Read and wrangle your data for conjoint analysis","text":"slight variation, cases repeated task flipped – , repeated task, original Profile 1 still Profile 1, rather flipping positions Profile 2. specify changing .flipped FALSE.","code":"outcomes2 <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes2 <- c(outcomes2, \"choice1_repeated_notflipped\") out2 <- reshape_projoint(.dataframe = exampleData2, .idvar = \"ResponseId\", .outcomes = outcomes2, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = FALSE, .fill = FALSE)"},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"without-the-repeated-tasks","dir":"Articles","previous_headings":"2.2 Read and wrangle data","what":"Without the repeated tasks","title":"2. Read and wrangle your data for conjoint analysis","text":"cases repeated task , set .repeated FALSE .flipped NULL:","code":"outcomes3 <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) out3 <- reshape_projoint(.dataframe = exampleData3, .idvar = \"ResponseId\", .outcomes = outcomes3, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = FALSE, .flipped = NULL, .fill = FALSE)"},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"the--fill-argument","dir":"Articles","previous_headings":"","what":"2.3 The .fill argument","title":"2. Read and wrangle your data for conjoint analysis","text":".fill argument logical: TRUE want use information whether respondent chose profile repeated task “fill” (using ‘tidyr’ package) missing values non-repeated tasks, FALSE (otherwise). can see difference comparing following two: just select essential variables . first data frame includes values agree variable (whether profile chosen ) repeated task. second data frame fills missing values non-repeated tasks. number respondents small, number specific profile pairs interest small, /number specific respondent subgroups want study small, worth changing option TRUE. please note .fill = TRUE based assumption IRR independent information contained conjoint tables. Although empirical tests suggest validity assumption, unsure , better use default value (FALSE).","code":"fill_FALSE <- reshape_projoint(.dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes1, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .fill = FALSE) fill_TRUE <- reshape_projoint(.dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes1, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .fill = TRUE) selected_vars <- c(\"id\", \"task\", \"profile\", \"selected\", \"selected_repeated\", \"agree\") fill_FALSE@data[selected_vars] ## # A tibble: 6,400 × 6 ## id task profile selected selected_repeated agree ## ## 1 R_00zYHdY1te1Qlrz 1 1 1 1 1 ## 2 R_00zYHdY1te1Qlrz 1 2 0 0 1 ## 3 R_00zYHdY1te1Qlrz 2 1 1 NA NA ## 4 R_00zYHdY1te1Qlrz 2 2 0 NA NA ## 5 R_00zYHdY1te1Qlrz 3 1 1 NA NA ## 6 R_00zYHdY1te1Qlrz 3 2 0 NA NA ## 7 R_00zYHdY1te1Qlrz 4 1 0 NA NA ## 8 R_00zYHdY1te1Qlrz 4 2 1 NA NA ## 9 R_00zYHdY1te1Qlrz 5 1 1 NA NA ## 10 R_00zYHdY1te1Qlrz 5 2 0 NA NA ## # ℹ 6,390 more rows fill_TRUE@data[selected_vars] ## # A tibble: 6,400 × 6 ## id task profile selected selected_repeated agree ## ## 1 R_00zYHdY1te1Qlrz 1 1 1 1 1 ## 2 R_00zYHdY1te1Qlrz 1 2 0 0 1 ## 3 R_00zYHdY1te1Qlrz 2 1 1 NA 1 ## 4 R_00zYHdY1te1Qlrz 2 2 0 NA 1 ## 5 R_00zYHdY1te1Qlrz 3 1 1 NA 1 ## 6 R_00zYHdY1te1Qlrz 3 2 0 NA 1 ## 7 R_00zYHdY1te1Qlrz 4 1 0 NA 1 ## 8 R_00zYHdY1te1Qlrz 4 2 1 NA 1 ## 9 R_00zYHdY1te1Qlrz 5 1 1 NA 1 ## 10 R_00zYHdY1te1Qlrz 5 2 0 NA 1 ## # ℹ 6,390 more rows"},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"read-your-already-wrangled-tibble","dir":"Articles","previous_headings":"","what":"2.4 Read your already-wrangled tibble","title":"2. Read and wrangle your data for conjoint analysis","text":"may already read original data downloaded Qualtrics, load R, wrangle data make data frame (tibble) ready analysis. case, use make_projoint_data() save data “projoint_data” class object necessary use projoint(). example. First, load data frame. looks like following. row correspond two profiles task respondent. data frame columns indicating (1) respondent’s ID, (2) task number, (3) profile number, (4) column recording response (0, 1) task. design includes repeated task, also include column recording response repeated task. Next, make character vector attributes. , make suitable object next steps using make_projoint_data(). default variable names shown . data frame uses different names, can change . output output fill_FALSE previous section.","code":"data <- exampleData1_labelled_tibble data ## # A tibble: 6,400 × 14 ## id task profile selected selected_repeated `School Quality` ## ## 1 R_00zYHdY1te1Qlrz 1 1 1 1 9 out of 10 ## 2 R_00zYHdY1te1Qlrz 1 2 0 0 5 out of 10 ## 3 R_00zYHdY1te1Qlrz 2 1 1 NA 9 out of 10 ## 4 R_00zYHdY1te1Qlrz 2 2 0 NA 9 out of 10 ## 5 R_00zYHdY1te1Qlrz 3 1 1 NA 5 out of 10 ## 6 R_00zYHdY1te1Qlrz 3 2 0 NA 9 out of 10 ## 7 R_00zYHdY1te1Qlrz 4 1 0 NA 5 out of 10 ## 8 R_00zYHdY1te1Qlrz 4 2 1 NA 9 out of 10 ## 9 R_00zYHdY1te1Qlrz 5 1 1 NA 5 out of 10 ## 10 R_00zYHdY1te1Qlrz 5 2 0 NA 5 out of 10 ## # ℹ 6,390 more rows ## # ℹ 8 more variables: `Violent Crime Rate (Vs National Rate)` , ## # `Racial Composition` , `Housing Cost` , ## # `Presidential Vote (2020)` , ## # `Total Daily Driving Time for Commuting and Errands` , ## # `Type of Place` , race , ideology attributes <- c(\"School Quality\", \"Violent Crime Rate (Vs National Rate)\", \"Racial Composition\", \"Housing Cost\", \"Presidential Vote (2020)\", \"Total Daily Driving Time for Commuting and Errands\", \"Type of Place\") out4 <- make_projoint_data(.dataframe = data, .attribute_vars = attributes, .id_var = \"id\", # the default name .task_var = \"task\", # the default name .profile_var = \"profile\", # the default name .selected_var = \"selected\", # the default name .selected_repeated_var = \"selected_repeated\", # the default is NULL .fill = TRUE) out4 ## An object of class \"projoint_data\" ## Slot \"labels\": ## # A tibble: 24 × 4 ## attribute_id level level_id attribute ## ## 1 att1 15% of pre-tax income att1:lev1 Housing Cost ## 2 att1 30% of pre-tax income att1:lev2 Housing Cost ## 3 att1 40% of pre-tax income att1:lev3 Housing Cost ## 4 att2 30% Democrat, 70% Republican att2:lev1 Presidential Vote (2020) ## 5 att2 50% Democrat, 50% Republican att2:lev2 Presidential Vote (2020) ## 6 att2 70% Democrat, 30% Republican att2:lev3 Presidential Vote (2020) ## 7 att3 50% White, 50% Nonwhite att3:lev1 Racial Composition ## 8 att3 75% White, 25% Nonwhite att3:lev2 Racial Composition ## 9 att3 90% White, 10% Nonwhite att3:lev3 Racial Composition ## 10 att3 96% White, 4% Nonwhite att3:lev4 Racial Composition ## # ℹ 14 more rows ## ## Slot \"data\": ## # A tibble: 6,400 × 13 ## id task profile selected selected_repeated agree att4 att7 att3 att1 ## ## 1 R_00z… 1 1 1 1 1 att4… att7… att3… att1… ## 2 R_00z… 1 2 0 0 1 att4… att7… att3… att1… ## 3 R_00z… 2 1 1 NA 1 att4… att7… att3… att1… ## 4 R_00z… 2 2 0 NA 1 att4… att7… att3… att1… ## 5 R_00z… 3 1 1 NA 1 att4… att7… att3… att1… ## 6 R_00z… 3 2 0 NA 1 att4… att7… att3… att1… ## 7 R_00z… 4 1 0 NA 1 att4… att7… att3… att1… ## 8 R_00z… 4 2 1 NA 1 att4… att7… att3… att1… ## 9 R_00z… 5 1 1 NA 1 att4… att7… att3… att1… ## 10 R_00z… 5 2 0 NA 1 att4… att7… att3… att1… ## # ℹ 6,390 more rows ## # ℹ 3 more variables: att2 , att5 , att6 "},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"arrange-the-order-and-labels-of-attributes-and-levels","dir":"Articles","previous_headings":"","what":"2.5 Arrange the order and labels of attributes and levels","title":"2. Read and wrangle your data for conjoint analysis","text":"reshaped data attributes levels sorted alphabetically. Often, however, want reorder attributes /order levels particular attribute. may also prefer use actual labels attributes levels used conjoint experiments; example, purpose presentation, may want make shorter. process challenging applied scholars using packages. make process easy. first save labels using save_labels(). CSV file save local computer, revise column named order specify order attributes levels want display figure. can also revise labels attributes levels way like. make change first column named level_id. saving updated CSV file, use read_labels() read save object suitable next step (.e., use projoint()). can find data set GitHub: labels_original.csv labels_arranged.csv. figure based original order labels alphabetical order: labels order attribute-levels second figure Figure 2 Mummolo Nall (2017).","code":"save_labels(out1, \"temp/labels_original.csv\") out1_arranged <- read_labels(out1, \"temp/labels_arranged.csv\") mm <- projoint(out1, .estimand = \"mm\") plot(mm) mm <- projoint(out1_arranged, .estimand = \"mm\") plot(mm)"},{"path":"https://yhoriuchi.github.io/projoint/articles/03-predict.html","id":"load-the-projoint-package","dir":"Articles","previous_headings":"","what":"3.1 Load the projoint package","title":"3. Predict the intra-respondent reliability (IRR)","text":"","code":"library(projoint)"},{"path":"https://yhoriuchi.github.io/projoint/articles/03-predict.html","id":"predict-irr-based-on-the-extrapolation-method","dir":"Articles","previous_headings":"","what":"3.2 Predict IRR based on the extrapolation method","title":"3. Predict the intra-respondent reliability (IRR)","text":", start reading Qualtrics file reshaping using reshape_projiont(). See 2.2 Read wrangle data, flipped repeated tasks. skip step instruction use already wrangled data named “out1_arranged” (See 2.5 Arrange order labels attributes levels. pass data set predict_tau function, calculates IRR produces figure showing extrapolation method visually. (see 2.3 Arrange order labels attributes levels). flipped repeated tasks projoint_tau object, created predict_tau, can explored using usual tools. print method explains estimate tau produced via extrapolation rather assumed calculated using repeated task presents estimate: summary method returns tibble IRR profiles become dissimilar. x=7, example, attributes different two profiles see IRR 0.503. extrapolate x=0, IRR profiles identical: plot method renders plot showing extrapolated value tau:","code":"predicted_irr <- predict_tau(out1_arranged) print(predicted_irr) ## [1] \"Tau estimated using the extrapolation method: 0.743\" summary(predicted_irr) ## # A tibble: 8 × 2 ## x predicted ## ## 1 0 0.743 ## 2 1 0.709 ## 3 2 0.675 ## 4 3 0.640 ## 5 4 0.606 ## 6 5 0.572 ## 7 6 0.537 ## 8 7 0.503 plot(predicted_irr)"},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"load-the-projoint-package-and-set-up-the-data","dir":"Articles","previous_headings":"","what":"4.1 Load the projoint package and set up the data","title":"4. Estimate corrected MMs or AMCEs","text":"Important: estimate visualize quantities interest using package (least current version), need set attributes levels using IDs, rather actual labels. think approach prone error applications may include foreign characters (e.g., 2-byte Japanese characters) special characters. check IDs correspond attributes levels, can type following line script: can also save_labels() save CSV file reference.","code":"library(projoint) outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") out1 <- reshape_projoint(.dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) out1@labels ## # A tibble: 24 × 4 ## attribute level attribute_id level_id ## ## 1 Housing Cost 15% of pre-tax income att1 att1:leve… ## 2 Housing Cost 30% of pre-tax income att1 att1:leve… ## 3 Housing Cost 40% of pre-tax income att1 att1:leve… ## 4 Presidential Vote (2020) 30% Democrat, 70% Republican att2 att2:leve… ## 5 Presidential Vote (2020) 50% Democrat, 50% Republican att2 att2:leve… ## 6 Presidential Vote (2020) 70% Democrat, 30% Republican att2 att2:leve… ## 7 Racial Composition 50% White, 50% Nonwhite att3 att3:leve… ## 8 Racial Composition 75% White, 25% Nonwhite att3 att3:leve… ## 9 Racial Composition 90% White, 10% Nonwhite att3 att3:leve… ## 10 Racial Composition 96% White, 4% Nonwhite att3 att3:leve… ## # ℹ 14 more rows"},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"estimate-mms","dir":"Articles","previous_headings":"","what":"4.2 Estimate MMs","title":"4. Estimate corrected MMs or AMCEs","text":"two main setups projoint can produce estimates. profile-level common approach literature, choice-level flexible powerful.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"mm-profile-level-all-levels","dir":"Articles","previous_headings":"4.2 Estimate MMs","what":"MM (profile-level) – all levels","title":"4. Estimate corrected MMs or AMCEs","text":"default method projoint estimate marginal means (MMs) profile-level. run projoint(out1), conduct analysis. expand arguments clarity:","code":"mm0 <- projoint(.data = out1, .qoi = NULL, .by_var = NULL, .structure = \"profile_level\", .estimand = \"mm\", .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\") print(mm0) ## [A projoint output] ## Estimand: mm ## Structure: profile_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(mm0) ## # A tibble: 48 × 6 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.574 0.0134 0.548 0.601 att1:level1 ## 2 mm_corrected 0.614 0.0207 0.573 0.654 att1:level1 ## 3 mm_uncorrected 0.485 0.0134 0.458 0.511 att1:level2 ## 4 mm_corrected 0.477 0.0204 0.437 0.517 att1:level2 ## 5 mm_uncorrected 0.445 0.0131 0.419 0.470 att1:level3 ## 6 mm_corrected 0.416 0.0203 0.376 0.455 att1:level3 ## 7 mm_uncorrected 0.489 0.0133 0.463 0.515 att2:level1 ## 8 mm_corrected 0.483 0.0202 0.443 0.522 att2:level1 ## 9 mm_uncorrected 0.524 0.0130 0.498 0.549 att2:level2 ## 10 mm_corrected 0.536 0.0200 0.497 0.575 att2:level2 ## # ℹ 38 more rows"},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"mm-profile-level-specific-level","dir":"Articles","previous_headings":"4.2 Estimate MMs","what":"MM (profile-level) – specific level","title":"4. Estimate corrected MMs or AMCEs","text":"However, also possible specify precise attributes, attribute levels, interest using set_qoi function . set_qoi function main way users specify complex estimands conjoint analysis. Al arguments qoi() expanded clarity, default arguments projoint() dropped simplicity:","code":"qoi_1 <- set_qoi( .structure = \"profile_level\", .estimand = \"mm\", .att_choose = \"att1\", .lev_choose = \"level1\") mm1 <- projoint(.data = out1, .qoi = qoi_1) print(mm1) ## [A projoint output] ## Estimand: mm ## Structure: profile_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(mm1) ## # A tibble: 2 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.574 0.0134 0.548 0.601 att1:level1 ## 2 mm_corrected 0.614 0.0207 0.573 0.654 att1:level1 ## # ℹ 1 more variable: att_level_notchoose "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"mm-profile-level-specific-level-using-the-predicted-irr","dir":"Articles","previous_headings":"4.2 Estimate MMs","what":"MM (profile-level) – specific level, using the predicted IRR","title":"4. Estimate corrected MMs or AMCEs","text":"conjoint survey design include recommended repeated task, can use specific value .irr, can estimate using predict_tau() function specify value based prior knowledge. following, use 0.75, likely IRR find test data sets. default arguments set_qoi() projoint() dropped hereafter.","code":"mm1b <- projoint(.data = out1, .qoi = qoi_1, .irr = 0.75) print(mm1b) ## [A projoint output] ## Estimand: mm ## Structure: profile_level ## IRR: Assumed (0.75) ## Tau: 0.1464466 ## Remove ties: TRUE ## SE methods: analytical summary(mm1b) ## # A tibble: 2 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.574 0.0134 0.548 0.601 att1:level1 ## 2 mm_corrected 0.605 0.0190 0.568 0.643 att1:level1 ## # ℹ 1 more variable: att_level_notchoose "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"mm-choice-level-specific-level","dir":"Articles","previous_headings":"4.2 Estimate MMs","what":"MM (choice-level) – specific level","title":"4. Estimate corrected MMs or AMCEs","text":"soon users wish switch profile-level choice-level analysis, set_qoi function required. exponentially choice-level estimands profile-level estimands, impractical view . specify want return marginal mean attribute 1, levels 1 3 choice-level.","code":"qoi_2 <- set_qoi( .structure = \"choice_level\", .att_choose = \"att1\", .lev_choose = \"level3\", .att_notchoose = \"att1\", .lev_notchoose = \"level1\" ) mm2 <- projoint(.data = out1, .qoi = qoi_2, .structure = \"choice_level\", .ignore_position = FALSE) print(mm2) ## [A projoint output] ## Estimand: mm ## Structure: choice_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(mm2) ## # A tibble: 2 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.402 0.0258 0.352 0.453 att1:level3 ## 2 mm_corrected 0.351 0.0408 0.271 0.431 att1:level3 ## # ℹ 1 more variable: att_level_notchoose "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"estimate-amces","dir":"Articles","previous_headings":"","what":"4.3 Estimate AMCEs","title":"4. Estimate corrected MMs or AMCEs","text":"Note can replicate analyses using AMCE instead MM just specifying .estimand = \"amce\" rather default \"mm\".","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"amce-profile-level-all-levels","dir":"Articles","previous_headings":"4.3 Estimate AMCEs","what":"AMCE (profile-level) – all levels","title":"4. Estimate corrected MMs or AMCEs","text":"","code":"amce0 <- projoint(.data = out1, .estimand = \"amce\") print(amce0) ## [A projoint output] ## Estimand: amce ## Structure: profile_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(amce0) ## # A tibble: 34 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 amce_uncorrected -0.0899 0.0190 -0.127 -0.0527 att1:level2 ## 2 amce_corrected -0.137 0.0290 -0.194 -0.0801 att1:level2 ## 3 amce_uncorrected -0.130 0.0188 -0.167 -0.0931 att1:level3 ## 4 amce_corrected -0.198 0.0294 -0.256 -0.140 att1:level3 ## 5 amce_uncorrected 0.0348 0.0186 -0.00170 0.0713 att2:level2 ## 6 amce_corrected 0.0530 0.0284 -0.00258 0.109 att2:level2 ## 7 amce_uncorrected -0.00177 0.0188 -0.0386 0.0350 att2:level3 ## 8 amce_corrected -0.00270 0.0286 -0.0589 0.0535 att2:level3 ## 9 amce_uncorrected 0.0240 0.0204 -0.0159 0.0640 att3:level2 ## 10 amce_corrected 0.0366 0.0312 -0.0246 0.0979 att3:level2 ## # ℹ 24 more rows ## # ℹ 1 more variable: att_level_choose_baseline "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"amce-profile-level-specific-level","dir":"Articles","previous_headings":"4.3 Estimate AMCEs","what":"AMCE (profile-level) – specific level","title":"4. Estimate corrected MMs or AMCEs","text":"","code":"qoi_3 <- set_qoi( .structure = \"profile_level\", .estimand = \"amce\", .att_choose = \"att1\", .lev_choose = \"level3\", .att_choose_b = \"att1\", .lev_choose_b = \"level1\" ) amce1 <- projoint(.data = out1, .qoi = qoi_3, .estimand = \"amce\") print(amce1) ## [A projoint output] ## Estimand: amce ## Structure: profile_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(amce1) ## # A tibble: 2 × 9 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 amce_uncorrected -0.130 0.0188 -0.167 -0.0931 att1:level3 ## 2 amce_corrected -0.198 0.0294 -0.256 -0.140 att1:level3 ## # ℹ 3 more variables: att_level_notchoose , ## # att_level_choose_baseline , att_level_notchoose_baseline "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"amce-profile-level-specific-level-using-the-predicted-irr","dir":"Articles","previous_headings":"4.3 Estimate AMCEs","what":"AMCE (profile-level) – specific level, using the predicted IRR","title":"4. Estimate corrected MMs or AMCEs","text":"","code":"amce1b <- projoint(.data = out1, .qoi = qoi_3, .estimand = \"amce\", .irr = 0.75) print(amce1b) ## [A projoint output] ## Estimand: amce ## Structure: profile_level ## IRR: Assumed (0.75) ## Tau: 0.1464466 ## Remove ties: TRUE ## SE methods: analytical summary(amce1b) ## # A tibble: 2 × 9 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 amce_uncorrected -0.130 0.0188 -0.167 -0.0931 att1:level3 ## 2 amce_corrected -0.184 0.0266 -0.236 -0.132 att1:level3 ## # ℹ 3 more variables: att_level_notchoose , ## # att_level_choose_baseline , att_level_notchoose_baseline "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"amce-choice-level-specific-level","dir":"Articles","previous_headings":"4.3 Estimate AMCEs","what":"AMCE (choice-level) – specific level","title":"4. Estimate corrected MMs or AMCEs","text":"","code":"qoi_4 <- set_qoi( .structure = \"choice_level\", .estimand = \"amce\", .att_choose = \"att1\", .lev_choose = \"level3\", .att_notchoose = \"att1\", .lev_notchoose = \"level1\", .att_choose_b = \"att1\", .lev_choose_b = \"level2\", .att_notchoose_b = \"att1\", .lev_notchoose_b = \"level1\" ) amce2 <- projoint(.data = out1, .qoi = qoi_4, .structure = \"choice_level\", .estimand = \"amce\", .ignore_position = TRUE) print(amce2) ## [A projoint output] ## Estimand: amce ## Structure: choice_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(amce2) ## # A tibble: 2 × 9 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 amce_uncorrected -0.0484 0.0270 -0.101 0.00448 att1:level3 ## 2 amce_corrected -0.0739 0.0414 -0.155 0.00727 att1:level3 ## # ℹ 3 more variables: att_level_notchoose , ## # att_level_choose_baseline , att_level_notchoose_baseline "},{"path":"https://yhoriuchi.github.io/projoint/articles/05-visualize.html","id":"load-the-projoint-package-and-the-other-necessary-package","dir":"Articles","previous_headings":"","what":"5.1 Load the projoint package and the other necessary package","title":"5. Visualize MMs or AMCEs","text":"","code":"library(projoint) library(ggplot2)"},{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/articles/05-visualize.html","id":"estimate-mms-and-amces-","dir":"Articles","previous_headings":"5.2 Profile-level analysis","what":"Estimate MMs and AMCEs.","title":"5. Visualize MMs or AMCEs","text":"","code":"mm <- projoint(out1_arranged) amce <- projoint(out1_arranged, .estimand = \"amce\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/05-visualize.html","id":"visualize-mms-and-amces","dir":"Articles","previous_headings":"5.2 Profile-level analysis","what":"Visualize MMs and AMCEs","title":"5. Visualize MMs or AMCEs","text":"default, researchers prefer view corrected estimates either MMs AMCEs. Researchers can, however, choose instead visualize uncorrected estimates, view together.","code":"plot(mm) plot(mm, .estimates = \"uncorrected\") plot(mm, .estimates = \"both\") plot(amce) plot(amce, .estimates = \"uncorrected\") plot(amce, .estimates = \"both\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/05-visualize.html","id":"choice-level-analysis","dir":"Articles","previous_headings":"","what":"5.3 Choice-level analysis","title":"5. Visualize MMs or AMCEs","text":"undertake choice-level analysis, first need specify quantity interest using set_qoi(). can estimate choice-level marginal means: Since many estimates, encourage make plots based objectives research. default plot choice-level marginal means basic ggplot object, compares marginal mean two options. sum two percenntages 100, thus may think redundant information presented figure. think figure effectivey way show results head--head (choice-level) comparison. can polish adding layers : Note: current version projoint package function plot choice-level average marginal compoennt effects. Stay tuned!","code":"qoi_mm <- set_qoi(.structure = \"choice_level\", .att_choose = \"att1\", .lev_choose = \"level1\", .att_notchoose = \"att1\", .lev_notchoose = \"level3\") choice_mm <- projoint(.data = out1_arranged, .structure = \"choice_level\", .qoi = qoi_mm, .ignore_position = TRUE) print(choice_mm) ## [A projoint output] ## Estimand: mm ## Structure: choice_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(choice_mm) ## # A tibble: 2 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.581 0.0187 0.544 0.618 att1:level1 ## 2 mm_corrected 0.624 0.0288 0.567 0.680 att1:level1 ## # ℹ 1 more variable: att_level_notchoose plot(choice_mm) plot(choice_mm, .labels = c(\"15% of pre-tax income\", \"30% of pre-tax income\")) + labs(y = \"Marginal mean\", x = \"Housing Cost\") + coord_cartesian(ylim = c(0, 1)) + geom_hline(yintercept = 0.5, linetype = \"dashed\", color = \"darkgray\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"load-the-projoint-package-","dir":"Articles","previous_headings":"","what":"6.1 Load the projoint package.","title":"6. Compare MMs or AMCEs between the subgroups","text":"Also load additional packages required vignette","code":"library(projoint) library(dplyr) library(ggplot2)"},{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"read-and-wrangle-data","dir":"Articles","previous_headings":"6.2 Profile-level analysis","what":"Read and Wrangle data","title":"6. Compare MMs or AMCEs between the subgroups","text":"begin, define outcome questions original dataset. Let’s make three data frames – first data frame baseline group (example, respondents report race “white”); second data frame comparison group (example, respondents reported race “white”), third data frame groups. Note .covariates argument specified reshape_conjoint() function third group. , add re-order labels (see 2.3 Arrange order labels attributes levels).","code":"outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") # Pre-processing df <- exampleData1 %>% mutate(white = ifelse(race == \"White\", 1, 0)) df_0 <- df %>% filter(white == 0) %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) df_1 <- df %>% filter(white == 1) %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) df_d <- df %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .covariates = \"white\") df_0 <- read_labels(df_0, \"temp/labels_arranged.csv\") df_1 <- read_labels(df_1, \"temp/labels_arranged.csv\") df_d <- read_labels(df_d, \"temp/labels_arranged.csv\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"estimate-mms-or-amces-and-the-difference-in-the-estimates","dir":"Articles","previous_headings":"6.2 Profile-level analysis","what":"Estimate MMs or AMCEs and the difference in the estimates","title":"6. Compare MMs or AMCEs between the subgroups","text":"three data frames, estimate MMs, AMCEs, differences estimates. following example estimate profile-level marginal means (default). Importantly, conjoint design includes repeated task, projoint() function applied subgroup estimate IRR corresponding subgroup. output out_d includes data differences can also check tau subgroup: , make save three ggplot objects.","code":"out_0 <- projoint(df_0) out_1 <- projoint(df_1) out_d <- projoint(df_d, .by_var = \"white\") out_d@estimates ## # A tibble: 48 × 11 ## estimand att_level_choose estimate_1 se_1 tau estimate_0 se_0 estimate ## ## 1 mm_uncor… att1:level1 0.586 0.0157 0.158 0.545 0.0258 0.0401 ## 2 mm_corre… att1:level1 0.625 0.0236 0.158 0.579 0.0433 0.0464 ## 3 mm_uncor… att1:level2 0.480 0.0158 0.158 0.496 0.0250 -0.0163 ## 4 mm_corre… att1:level2 0.471 0.0233 0.158 0.494 0.0432 -0.0229 ## 5 mm_uncor… att1:level3 0.439 0.0153 0.158 0.460 0.0254 -0.0210 ## 6 mm_corre… att1:level3 0.411 0.0227 0.158 0.431 0.0446 -0.0200 ## 7 mm_uncor… att2:level1 0.529 0.0154 0.158 0.510 0.0245 0.0195 ## 8 mm_corre… att2:level1 0.543 0.0226 0.158 0.517 0.0425 0.0260 ## 9 mm_uncor… att2:level2 0.500 0.0157 0.158 0.461 0.0248 0.0394 ## 10 mm_corre… att2:level2 0.500 0.0230 0.158 0.432 0.0417 0.0683 ## # ℹ 38 more rows ## # ℹ 3 more variables: se , conf.low , conf.high out_d@tau ## tau1 tau0 ## 1 0.1582662 0.2113249 plot_0 <- plot(out_0) plot_1 <- plot(out_1) plot_d <- plot(out_d, .by_var = TRUE)"},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"visualize-subgroup-differences","dir":"Articles","previous_headings":"6.2 Profile-level analysis","what":"Visualize subgroup differences","title":"6. Compare MMs or AMCEs between the subgroups","text":", make plot using patchwork package. Researchers can add/modify layers ggplot. default horizontal axis label “Difference” .by_var = TRUE specified plot() function.","code":"g_0 <- plot_0 + coord_cartesian(xlim = c(0.2, 0.8)) + scale_x_continuous(breaks = c(0.3, 0.5, 0.7)) + theme(plot.title = element_text(hjust = 0.5)) + labs(title = \"Non-white\", x = \"AMCE\") g_1 <- plot_1 + coord_cartesian(xlim = c(0.2, 0.8)) + scale_x_continuous(breaks = c(0.3, 0.5, 0.7)) + theme(axis.text.y = element_blank(), plot.title = element_text(hjust = 0.5)) + labs(title = \"White\", x = \"AMCE\") g_d <- plot_d + coord_cartesian(xlim = c(-0.4, 0.4)) + scale_x_continuous(breaks = c(-0.25, 0, 0.25)) + theme(axis.text.y = element_blank(), plot.title = element_text(hjust = 0.5)) + labs(title = \"Difference\") library(patchwork) g_0 + g_1 + g_d"},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"choice-level-analysis","dir":"Articles","previous_headings":"","what":"6.3 Choice-level analysis","title":"6. Compare MMs or AMCEs between the subgroups","text":"written.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/07-explore.html","id":"load-the-projoint-package-and-the-other-necessary-package","dir":"Articles","previous_headings":"","what":"7.1 Load the projoint package and the other necessary package","title":"7. Explore further","text":"previous articles, use already wrangled cleaned data named “out1_reshaped.” see attribute IDs level IDs means, can type:","code":"library(projoint) library(ggplot2) out1_arranged@labels ## # A tibble: 24 × 4 ## attribute level attribute_id level_id ## ## 1 Housing Cost 15% of pre-tax income att1 att1:leve… ## 2 Housing Cost 30% of pre-tax income att1 att1:leve… ## 3 Housing Cost 40% of pre-tax income att1 att1:leve… ## 4 Presidential Vote (2020) 50% Democrat, 50% Republican att2 att2:leve… ## 5 Presidential Vote (2020) 30% Democrat, 70% Republican att2 att2:leve… ## 6 Presidential Vote (2020) 70% Democrat, 30% Republican att2 att2:leve… ## 7 Racial Composition 50% White, 50% Nonwhite att3 att3:leve… ## 8 Racial Composition 75% White, 25% Nonwhite att3 att3:leve… ## 9 Racial Composition 90% White, 10% Nonwhite att3 att3:leve… ## 10 Racial Composition 96% White, 4% Nonwhite att3 att3:leve… ## # ℹ 14 more rows"},{"path":"https://yhoriuchi.github.io/projoint/articles/07-explore.html","id":"examine-trade-offs","dir":"Articles","previous_headings":"","what":"7.1 Examine trade-offs","title":"7. Explore further","text":"may interested people make choice face trade-options. example, one hand, may want live inexpensive house. hand, may prefer avoid living area high crime rate. two options prefer? can compare two options directly. customization figure, see Visualize MMs AMCEs, Choice-level analysis","code":"qoi_1 <- set_qoi( .structure = \"choice_level\", .att_choose = \"att1\", .lev_choose = \"level1\", .att_notchoose = \"att6\", .lev_notchoose = \"level2\" ) mm1 <- projoint(.data = out1_arranged, .qoi = qoi_1, .structure = \"choice_level\", .ignore_position = TRUE) plot(mm1, .labels = c(\"Housing Cost\\n(15% of pre-tax income)\", \"Violent Crime Rate\\n(20% > National Average)\")) + labs(y = \"Marginal mean\", x = NULL) + coord_cartesian(ylim = c(0, 1)) + geom_hline(yintercept = 0.5, linetype = \"dashed\", color = \"darkgray\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/07-explore.html","id":"set-multiple-levels-for-the-attribute-of-interest","dir":"Articles","previous_headings":"","what":"6.1 Set multiple levels for the attribute of interest","title":"7. Explore further","text":"may interested measuring marginal means choosing one level. example, may want estimate marginal mean choosing “City, residential area” “City, downtown area” opposed “Suburban, houses” “Suburban, downtown area”. , can run following code:","code":"qoi_2 <- set_qoi( .structure = \"choice_level\", .att_choose = \"att7\", .lev_choose = c(\"level2\", \"level3\"), .att_notchoose = \"att7\", .lev_notchoose = c(\"level5\", \"level6\") ) mm2 <- projoint(.data = out1_arranged, .qoi = qoi_2, .structure = \"choice_level\", .ignore_position = TRUE) plot(mm2, .labels = c(\"City\", \"Suburban\")) + labs(y = \"Marginal mean\", x = \"Type of place\") + coord_cartesian(ylim = c(0, 1)) + geom_hline(yintercept = 0.5, linetype = \"dashed\", color = \"darkgray\")"},{"path":"https://yhoriuchi.github.io/projoint/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Yusaku Horiuchi. Author, maintainer. Aaron Kaufman. Author.","code":""},{"path":"https://yhoriuchi.github.io/projoint/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Katherine Clayton, Yusaku Horiuchi, Aaron R. Kaufman, Gary King, Mayya Komisarchik (2023). Correcting Measurement Error Bias Conjoint Survey Experiments. Working Paper. URL https://gking.harvard.edu/files/gking/files/conerr.pdf Yusaku Horiuchi Aaron R. Kaufman (2023). projoint: One Stop Conjoint Shop. URL https://github.com/yhoriuchi/projoint","code":"@Article{, title = {Correcting Measurement Error Bias in Conjoint Survey Experiments}, author = {Katherine Clayton and Yusaku Horiuchi and Aaron Kaufman and Gary King and Mayya Komisarchik}, journal = {Working Paper}, year = {2023}, url = {https://gking.harvard.edu/files/gking/files/conerr.pdf}, } @Misc{, title = {projoint: The One Stop Conjoint Shop}, author = {Yusaku Horiuchi and Aaron Kaufman}, year = {2023}, publisher = {GitHub repository}, url = {https://github.com/yhoriuchi/projoint}, }"},{"path":[]},{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"the-one-stop-conjoint-shop","dir":"","previous_headings":"","what":"The One-Stop Conjoint Shop","title":"The One Stop Conjoint Shop","text":"projoint package general, straightforward, creative conjoint analysis. estimates—either profile-level choice-level—Marginal Means (MMs) Average Marginal Component Effects (AMCEs) based conjoint survey experiment. produces reliable estimates correcting measurement error bias problems known literature (e.g., levels attribute interest). Furthermore, presents general framework researchers can answer range substantively important questions straightforwardly. notes: current version assumes outcome variable binary forced choice. package still construction. Forthcoming features include following: Add article explaining set Qualtrics survey Add function subgroup comparisons. Allow researchers use weights features respondents. Allow researchers use outcome variables, rating.","code":""},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"installation","dir":"","previous_headings":"The One-Stop Conjoint Shop","what":"Installation","title":"The One Stop Conjoint Shop","text":"can install development version projoint GitHub :","code":"# install.packages(\"devtools\") devtools::install_github(\"yhoriuchi/projoint\")"},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"why-projoint","dir":"","previous_headings":"The One-Stop Conjoint Shop","what":"Why projoint?","title":"The One Stop Conjoint Shop","text":"excellent R packages conjoint analysis, including cjoint (Version: 2.1.0, Published: 2018-10-19) cregg (Version: 0.4.0, Published: 2020-06-28). important advantages using package: importantly, unlike packages, researchers can fix measurement error bias (Clayton et al., working paper). cjoint cregg packages assume unit analysis profile even researchers design binary choice experiment. define straightforward choice-level MMs AMCEs allow users estimate (Clayton et al., working paper). profile-level MMs (cregg) always attenuated toward 0.5 conjoint design includes “ties” attribute interest (Gander 2021). Consider, example, attribute interest candidate’s party, two levels, {Republican, Democrat}. levels randomly assigned profile, 50% profile-pairs include ties. Therefore, even strongly partisan respondents care candidate’s party always prefer one party another, choose one two tied profiles randomly. Therefore, (profile-level) marginal mean Republican Republican supporters Democrat Democrat supporters 0.75 (= 1 * 0.5 + 0.5 * 0.5). remove ties calculate MMs. profile-level AMCEs (cjoint) may produce counter-intuitive estimates (Abramson, Kocak, Magazinni, Strezhnev, working paper). example, suppose attribute interest candidate’s race, three levels, {white, Black, Asian American}. Specifically, interested whether white respondents prefer Black Asian American candidate. case head--head comparison, suppose 75% white respondents choose Black candidate rather Asian American candidate. (example choice-level marginal mean.) profile-level AMCE choosing Black candidate using Asian American candidate may larger smaller 75%, surprisingly. AMCE’s calculation includes indirect comparisons combinations. set assumptions, profile-level AMCEs can still researchers’ substantive quantities interest (Bansak, Hainmueller, Hopkins, Yamamoto, forthcoming) quantities interest applied researchers. Therefore, provide option estimate alternative intuitive quantities interest, choice-level MMs AMCEs. Researchers often assume profile within profile-pair needs independent. critical assumption conjoint analysis. fact, researchers consider variety research questions cross-attribute constraints, profile pair one incumbent one challenger, profile pair sum values one (e.g., expected chance winning seat two candidates). framework software allow researchers examine variety questions flexible innovative manners. Last least, package provides easiest possible way re-label re-order attributes levels.","code":""},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"relevant-article","dir":"","previous_headings":"The One-Stop Conjoint Shop","what":"Relevant Article","title":"The One Stop Conjoint Shop","text":"framework methods, please read cite following article: Abstract: Conjoint survey designs spreading across social sciences due unusual capacity estimate many causal effects single randomized experiment. Unfortunately, ability mirror complicated real-world choices, designs often generate substantial measurement errors thus bias. replicate data collection analysis eight prominent conjoint studies, closely reproduce published results, show large proportion observed variation answers conjoint questions effectively random noise. discover common empirical pattern measurement error appears conjoint studies , , introduce easy--use statistical method correct bias.","code":""},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"The One Stop Conjoint Shop","text":"Please note project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1.html","id":null,"dir":"Reference","previous_headings":"","what":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","title":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","text":"cleaned Qualtrics output conjoint study compares two potential new building developments. 8 standard tasks well repeat first task, used calculate response instability.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","text":"","code":"exampleData1"},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","text":"## `exampleData1` data frame 201 rows 186 columns: ResponseId Unique respondent ID race Respondent race: 6 categories party_1 Respondent party: Democrat, Republican, Independent, Something else party_2 party_1 D R: closer Democrats closer Republicans? party_3 party_1 R: strong R strong R party_4 party_1 D: strong D strong D ideology Respondent ideology Extremely liberal Extremely conservative honesty Attention check: respondents select \"never\" choice1, choice2, ..., choice8 Respondent selections initial 8 conjoint tasks choice1_repeated_flipped Respondent choice task repeats choice1 flipped","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1_labelled_tibble.html","id":null,"dir":"Reference","previous_headings":"","what":"Projoint Example Data Set 1: ","title":"Projoint Example Data Set 1: ","text":"already cleaned data frame (tibble) attribute corresponds column proper attribute name. unit observation must unit observation must two profiles task respondent.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1_labelled_tibble.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projoint Example Data Set 1: ","text":"","code":"exampleData1_labelled_tibble"},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1_labelled_tibble.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Projoint Example Data Set 1: ","text":"## `exampleData1_labelled_tibble` data frame 6,400 rows 14 columns: id Unique respondent ID task Task number profile Profile number = 1,2 selected Whether profile selected selected_repeated Whether profile selected repeated task School Quality, ... Type Place attributes race Respondent race: 6 categories ideology Respondent ideology Extremely liberal Extremely conservative","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1_labelled_tibble.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Projoint Example Data Set 1: ","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData2.html","id":null,"dir":"Reference","previous_headings":"","what":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","title":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","text":"cleaned Qualtrics output conjoint study compares two potential new building developments. 8 standard tasks well repeat first task, used calculate response instability.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","text":"","code":"exampleData2"},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","text":"## `exampleData2` data frame 199 rows 186 columns: ResponseId Unique respondent ID choice1, choice2, ..., choice8 Respondent selections initial 8 conjoint tasks choice1_repeated_notflipped Respondent choice task repeats choice1, unflipped race Respondent race: 5 categories party1 Respondent party party2 party1 D R: closer Democrats closer Republicans? party3 party1 R: strong R strong R party4 party1 D: strong D strong D ideology Respondent ideology Extremely liberal Extremely conservative honesty Attention check: respondents select \"never\" K-1-1, K-1-2, ..., K-8-5 K-X-Y indicates name attribute Yth position table Xth task K-1-1-1, K-1-1-2, ..., K-8-2-7 K-X-Y-Z indicates value attribute Zth position Yth profile (either 1 2 left right profiles) Xth task","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData2.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData3.html","id":null,"dir":"Reference","previous_headings":"","what":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","title":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","text":"cleaned Qualtrics output conjoint study compares two potential new building developments. 8 standard tasks.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData3.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","text":"","code":"exampleData3"},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData3.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","text":"## `exampleData3` data frame 201 rows 185 columns: ResponseId Unique respondent ID choice1, choice2, ..., choice8 Respondent selections initial 8 conjoint tasks race Respondent race: 5 categories party1 Respondent party party2 party1 D R: closer Democrats closer Republicans? party3 party1 R: strong R strong R party4 party1 D: strong D strong D ideology Respondent ideology Extremely liberal Extremely conservative honesty Attention check: respondents select \"never\" K-1-1, K-1-2, ..., K-8-5 K-X-Y indicates name attribute Yth position table Xth task K-1-1-1, K-1-1-2, ..., K-8-2-7 K-X-Y-Z indicates value attribute Zth position Yth profile (either 1 2 left right profiles) Xth task","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData3.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/make_projoint_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","title":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","text":"function converts labelled tibble (data frame) \"projoint_data\" class object necessary projoint.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/make_projoint_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","text":"","code":"make_projoint_data( .dataframe, .attribute_vars, .id_var = \"id\", .task_var = \"task\", .profile_var = \"profile\", .selected_var = \"selected\", .selected_repeated_var = NULL, .fill = FALSE )"},{"path":"https://yhoriuchi.github.io/projoint/reference/make_projoint_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","text":".dataframe data frame. unit observation must two profiles task respondent. .attribute_vars character vector identifying names attributes .id_var character identifying name column containing respondent IDs (default: \"id\") .task_var character identifying name column containing task numbers (default: \"task\") .profile_var character identifying name column containing profile numbers IDs (default: \"profile\") .selected_var character identifying name column containing dichotomous response (0, 1) task (default: \"selected\") .selected_repeated_var character identifying name column containing dichotomous response (0, 1) repeated task (default: NULL) .fill logical vector: TRUE want use information whether respondent chose profile repeated task \"fill\" (using `tidyr` package) missing values non-repeated tasks, FALSE (otherwise). number respondents small, number specific profile pairs interest small, /number specific respondent subgroups want study small, worth changing option TRUE. please note `.fill = TRUE` based assumption IRR independent information contained conjoint tables. Although empirical tests suggest validity assumption, unsure , better use default value (FALSE).","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/make_projoint_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","text":"projoint object class projoint_data ready pass projoint.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/organize_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Organize data before estimation — organize_data","title":"Organize data before estimation — organize_data","text":"function converts full conjoint data set data set structured analyzing specific attribute interest specific level(s) interest. function receives input reshape_data() output feeds pj_estimate().","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/organize_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Organize data before estimation — organize_data","text":"","code":"organize_data( .dataframe, .structure, .estimand, .remove_ties, .att_choose, .lev_choose, .att_notchoose, .lev_notchoose )"},{"path":"https://yhoriuchi.github.io/projoint/reference/organize_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Organize data before estimation — organize_data","text":".dataframe data frame reorganize -- second element list generated reshape_conjoint() .structure either \"choice_level\" \"profile_level\" .remove_ties TRUE want remove ties attribute interest (profile-level analysis) .att_choose character column name identifying attribute interest (.e., attribute-level attribute-levels *chosen*). .lev_choose character vector identifying level levels interest (.e., attribute-level attribute-levels *chosen*). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose character column name identifying attribute interest (.e., attribute-level attribute-levels *chosen*). argument specified `.structure` argument \"choice-level\". .lev_notchoose character vector identifying level levels interest (.e., attribute-level attribute-levels *chosen*). length 1 profile-level analysis 1+ choice-level analysis. argument specified `.structure` argument \"choice-level\".","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/out1_arranged.html","id":null,"dir":"Reference","previous_headings":"","what":"Reorganized Projoint Example Data Set 1 — out1_arranged","title":"Reorganized Projoint Example Data Set 1 — out1_arranged","text":"data set identical Example Data Set 1, except attributes levels manually relabeled reordered.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/out1_arranged.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reorganized Projoint Example Data Set 1 — out1_arranged","text":"","code":"out1_arranged"},{"path":"https://yhoriuchi.github.io/projoint/reference/out1_arranged.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Reorganized Projoint Example Data Set 1 — out1_arranged","text":"## `exampleData1` data frame 201 rows 186 columns: ResponseId Unique respondent ID race Respondent race: 6 categories party_1 Respondent party: Democrat, Republican, Independent, Something else party_2 party_1 D R: closer Democrats closer Republicans? party_3 party_1 R: strong R strong R party_4 party_1 D: strong D strong D ideology Respondent ideology Extremely liberal Extremely conservative honesty Attention check: respondents select \"never\" choice1, choice2, ..., choice8 Respondent selections initial 8 conjoint tasks choice1_repeated_flipped Respondent choice task repeats choice1 flipped","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/out1_arranged.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Reorganized Projoint Example Data Set 1 — out1_arranged","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/pj_estimate.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate and correct MMs or AMCEs — pj_estimate","title":"Estimate and correct MMs or AMCEs — pj_estimate","text":"internal function used calculate correct marginal means average marginal component effects conjoint design.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/pj_estimate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate and correct MMs or AMCEs — pj_estimate","text":"","code":"pj_estimate( .data, .structure = \"profile_level\", .estimand = \"mm\", .att_choose, .lev_choose, .att_notchoose = NULL, .lev_notchoose = NULL, .att_choose_b = NULL, .lev_choose_b = NULL, .att_notchoose_b = NULL, .lev_notchoose_b = NULL, .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\" )"},{"path":"https://yhoriuchi.github.io/projoint/reference/pj_estimate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate and correct MMs or AMCEs — pj_estimate","text":".data projoint_data object .structure Either \"profile_level\" (default) \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .att_choose character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). .lev_choose character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). argument specified .structure argument \"choice-level\". .lev_notchoose character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis. argument specified .structure argument \"choice-level\". .att_choose_b [baseline AMCE] character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). .lev_choose_b [baseline AMCE] character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose_b [baseline AMCE] character column name identifying attribute interest (.e., attribute-level attribute-levels chosen*). argument specified .structure argument \"choice-level\". .lev_notchoose_b [baseline AMCE] character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis. argument specified .structure argument \"choice-level\". .se_method default, c(\"analytic\", \"simulation\", \"bootstrap\") description .irr NULL (default) IRR calculated using repeated task. Otherwise, numerical value .remove_ties Logical: ties removed estimation? Defaults TRUE. .ignore_position TRUE (default) ignore location profile (left right). Relevant analyzed choice level .n_sims number simulations. Relevant .se_method == \"simulation\" .n_boot number bootstrapped samples. Relevant .se_method == \"bootstrap\" .weights_1 weight estimate IRR (see lm_robust): NULL (default) .clusters_1 clusters estimate IRR (see lm_robust): NULL (default) .se_type_1 standard error type estimate IRR (see lm_robust): \"classical\" (default) .weights_2 weight estimate MM AMCE (see lm_robust): NULL (default) .clusters_2 clusters estimate MM AMCE (see lm_robust): NULL (default) .se_type_2 standard error type estimate MM AMCE (see lm_robust): \"classical\" (default)","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/pj_estimate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate and correct MMs or AMCEs — pj_estimate","text":"data frame estimates","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_results.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot all MMs or AMCEs — plot.projoint_results","title":"Plot all MMs or AMCEs — plot.projoint_results","text":"method produces MM AMCE plots given projoint_results object, output projoint function.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_results.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot all MMs or AMCEs — plot.projoint_results","text":"","code":"# S3 method for projoint_results plot( x, .estimates = \"corrected\", .by_var = FALSE, .labels = NULL, .base_size = 12, .base_family = \"\", ... )"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_results.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot all MMs or AMCEs — plot.projoint_results","text":"x projoint_results object .estimates estimates plotted, either \"corrected\" (default), \"uncorrected\", \"\" .by_var (structure profile-level) TRUE plot difference estimates two subgroups, FALSE (default) otherwise .labels (structure choice-level) chaarcter vector x-axis labels .base_size base font size, given pts. .base_family base font family ... Additional optional arguments","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_results.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot all MMs or AMCEs — plot.projoint_results","text":"ggplot object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_tau.html","id":null,"dir":"Reference","previous_headings":"","what":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","title":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","text":"Visualize results extrapolation method estimating tau.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_tau.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","text":"","code":"# S3 method for projoint_tau plot(x, ...)"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_tau.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","text":"x object class projoint_tau derived predict_tau ... Optional arguments; currently none accepted","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_tau.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","text":"","code":"library(projoint) library(stringr) ## Example 1: repeated, flipped task data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) tau1 <- predict_tau(reshaped_data) plot(tau1)"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_choice_level_mm.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot all ","title":"Plot all ","text":"method produces profile-level MM AMCE plots given projoint_results object, output projoint function. structure must profile-level use function.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_choice_level_mm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot all ","text":"","code":"plot_projoint_choice_level_mm( x, .estimates = \"corrected\", .labels = NULL, .base_size = 12, .base_family = \"\", ... )"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_choice_level_mm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot all ","text":"x projoint_results object .estimates estimates plotted, either \"corrected\" (default) \"uncorrected\" .labels character vector x-axis labels .base_size base font size, given pts. .base_family base font family ... Additional optional arguments","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_choice_level_mm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot all ","text":"ggplot object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_profile_level.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot all ","title":"Plot all ","text":"method produces profile-level MM AMCE plots given projoint_results object, output projoint function. structure must profile-level use function.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_profile_level.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot all ","text":"","code":"plot_projoint_profile_level( x, .estimates = \"corrected\", .by_var = FALSE, .base_size = 12, .base_family = \"\", ... )"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_profile_level.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot all ","text":"x projoint_results object .estimates estimates plotted, either \"corrected\" (default), \"uncorrected\", \"\" .by_var TRUE plot difference estimates two subgroups, FALSE (default) otherwise .base_size base font size, given pts. .base_family base font family ... Additional optional arguments","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_profile_level.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot all ","text":"ggplot object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate tau when there is no repeated task. — predict_tau","title":"Estimate tau when there is no repeated task. — predict_tau","text":"Given output projoint_data, function uses extrapolation method produce estimate intra-coder reliability (IRR).","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate tau when there is no repeated task. — predict_tau","text":"","code":"predict_tau(.data, .title = NULL) # S3 method for projoint_tau print(x, ...) # S3 method for projoint_tau summary(object, ...)"},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate tau when there is no repeated task. — predict_tau","text":".data projoint_data object, outputted reshape_projoint .title title figure x object class projoint_tau derived predict_tau ... Optional arguments; currently none accepted object object class projoint_tau derived predict_tau","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate tau when there is no repeated task. — predict_tau","text":"projoint_tau object containing estimate tau figure visualizing extrapolation method. tibble showing IRR profile similarity changes. value predicted x=0 estimated IRR.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate tau when there is no repeated task. — predict_tau","text":"","code":"library(projoint) library(stringr) ## Example 1: repeated, flipped task data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) tau1 <- predict_tau(reshaped_data) tau1 #> [1] \"Tau estimated using the extrapolation method: 0.743\" ## Example 2: repeated, unflipped task data(\"exampleData2\") head(exampleData2) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_not…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community A Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community A Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community A Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community A Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community B Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community B Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_notflipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_notflipped\") reshaped_data <- reshape_projoint( .dataframe = exampleData2, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = FALSE) tau2 <- predict_tau(reshaped_data) tau2 #> [1] \"Tau estimated using the extrapolation method: 0.743\" ## Example 3: no repeated task data(\"exampleData3\") head(exampleData3) #> # A tibble: 6 × 184 #> ResponseId choice1 choice2 choice3 choice4 choice5 choice6 choice7 choice8 #> #> 1 R_1M3TDihZzq9… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlf… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTO… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWY… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRK… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> # ℹ 175 more variables: race , party_1 , party_2 , #> # party_3 , party_4 , ideology , honesty , `K-1-1` , #> # `K-1-1-1` , `K-1-2` , `K-1-1-2` , `K-1-3` , #> # `K-1-1-3` , `K-1-4` , `K-1-1-4` , `K-1-5` , #> # `K-1-1-5` , `K-1-6` , `K-1-1-6` , `K-1-7` , #> # `K-1-1-7` , `K-1-2-1` , `K-1-2-2` , `K-1-2-3` , #> # `K-1-2-4` , `K-1-2-5` , `K-1-2-6` , `K-1-2-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes) reshaped_data <- reshape_projoint( .dataframe = exampleData3, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = FALSE) tau3 <- predict_tau(reshaped_data) tau3 #> [1] \"Tau estimated using the extrapolation method: 0.743\""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":null,"dir":"Reference","previous_headings":"","what":"Analyze a conjoint data set and correct for measurement error — projoint","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":"main function analyzes conjoint data set produces measurement error-corrected estimates either marginal means average marginal component effects, ready plotting. accepts `projoint_data` object, optionally `projoint_qoi` object users wish specify complex quantities interest.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":"","code":"projoint( .data, .qoi = NULL, .by_var = NULL, .structure = \"profile_level\", .estimand = \"mm\", .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\" ) # S3 method for projoint_results print(x, ...) # S3 method for projoint_results summary(object, ...)"},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":".data projoint_data object .qoi projoint_qoi object. NULL, defaults producing MMs AMCEs. .by_var dichotomous variable (character) used subgroup analysis .structure Either \"profile_level\" (default) \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .se_method default, c(\"analytic\", \"simulation\", \"bootstrap\") description .irr NULL (default) IRR calculated using repeated task. Otherwise, numerical value .remove_ties Logical: ties removed estimation? Defaults TRUE. .ignore_position TRUE (default) ignore location profile (left right). Relevant analyzed choice level .n_sims number simulations. Relevant .se_method == \"simulation\" .n_boot number bootstrapped samples. Relevant .se_method == \"bootstrap\" .weights_1 weight estimate IRR (see lm_robust): NULL (default) .clusters_1 clusters estimate IRR (see lm_robust): NULL (default) .se_type_1 standard error type estimate IRR (see lm_robust): \"classical\" (default) .weights_2 weight estimate MM AMCE (see lm_robust): NULL (default) .clusters_2 clusters estimate MM AMCE (see lm_robust): NULL (default) .se_type_2 standard error type estimate MM AMCE (see lm_robust): \"classical\" (default) x projoint_results object ... Optional arguments; currently none accepted object projoint_results object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":"projoint_results object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":"","code":"library(projoint) data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) projoint(reshaped_data) #> [A projoint output] #> Estimand: mm #> Structure: profile_level #> IRR: Estimated #> Tau: 0.1721281 #> Remove ties: TRUE #> SE methods: analytical"},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_data-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class generator for projoint_data — projoint_data-class","title":"Class generator for projoint_data — projoint_data-class","text":"Class generator projoint_data","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_diff.html","id":null,"dir":"Reference","previous_headings":"","what":"Analyze a conjoint data set and correct for measurement error — projoint_diff","title":"Analyze a conjoint data set and correct for measurement error — projoint_diff","text":"internal function used calculate correct marginal means average marginal component effects conjoint design.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_diff.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analyze a conjoint data set and correct for measurement error — projoint_diff","text":"","code":"projoint_diff( .data, .qoi = NULL, .by_var, .structure = \"profile_level\", .estimand = \"mm\", .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\" )"},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_diff.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analyze a conjoint data set and correct for measurement error — projoint_diff","text":".data projoint_data object .qoi projoint_qoi object. NULL, defaults producing MMs AMCEs. .by_var dichotomous variable (character) used subgroup analysis .structure Either \"profile_level\" (default) \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .se_method default, c(\"analytic\", \"simulation\", \"bootstrap\") description .irr NULL (default) IRR calculated using repeated task. Otherwise, numerical value .remove_ties Logical: ties removed estimation? Defaults TRUE. .ignore_position TRUE (default) ignore location profile (left right). Relevant analyzed choice level .n_sims number simulations. Relevant .se_method == \"simulation\" .n_boot number bootstrapped samples. Relevant .se_method == \"bootstrap\" .weights_1 weight estimate IRR (see lm_robust): NULL (default) .clusters_1 clusters estimate IRR (see lm_robust): NULL (default) .se_type_1 standard error type estimate IRR (see lm_robust): \"classical\" (default) .weights_2 weight estimate MM AMCE (see lm_robust): NULL (default) .clusters_2 clusters estimate MM AMCE (see lm_robust): NULL (default) .se_type_2 standard error type estimate MM AMCE (see lm_robust): \"classical\" (default)","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_diff.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Analyze a conjoint data set and correct for measurement error — projoint_diff","text":"projoint_results object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_level.html","id":null,"dir":"Reference","previous_headings":"","what":"Analyze a conjoint data set and correct for measurement error — projoint_level","title":"Analyze a conjoint data set and correct for measurement error — projoint_level","text":"internal function used calculate correct marginal means average marginal component effects conjoint design.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_level.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analyze a conjoint data set and correct for measurement error — projoint_level","text":"","code":"projoint_level( .data, .qoi = NULL, .structure = \"profile_level\", .estimand = \"mm\", .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\" )"},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_level.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analyze a conjoint data set and correct for measurement error — projoint_level","text":".data projoint_data object .qoi projoint_qoi object. NULL, defaults producing MMs AMCEs. .structure Either \"profile_level\" (default) \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .se_method default, c(\"analytic\", \"simulation\", \"bootstrap\") description .irr NULL (default) IRR calculated using repeated task. Otherwise, numerical value .remove_ties Logical: ties removed estimation? Defaults TRUE. .ignore_position TRUE (default) ignore location profile (left right). Relevant analyzed choice level .n_sims number simulations. Relevant .se_method == \"simulation\" .n_boot number bootstrapped samples. Relevant .se_method == \"bootstrap\" .weights_1 weight estimate IRR (see lm_robust): NULL (default) .clusters_1 clusters estimate IRR (see lm_robust): NULL (default) .se_type_1 standard error type estimate IRR (see lm_robust): \"classical\" (default) .weights_2 weight estimate MM AMCE (see lm_robust): NULL (default) .clusters_2 clusters estimate MM AMCE (see lm_robust): NULL (default) .se_type_2 standard error type estimate MM AMCE (see lm_robust): \"classical\" (default)","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_level.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Analyze a conjoint data set and correct for measurement error — projoint_level","text":"projoint_results object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_qoi-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class generator for projoint_qoi — projoint_qoi-class","title":"Class generator for projoint_qoi — projoint_qoi-class","text":"Class generator projoint_qoi","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_qoi-class.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Class generator for projoint_qoi — projoint_qoi-class","text":"slots Takes four MMs eight AMCEs","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_results-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class generators for projoint_results — projoint_results-class","title":"Class generators for projoint_results — projoint_results-class","text":"Class generators projoint_results","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_results-class.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Class generators for projoint_results — projoint_results-class","text":"slots Takes 16 slots. See documentation projoint. contains Inherits slots projoint_data","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_tau-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class generator for projoint_tau objects — projoint_tau-class","title":"Class generator for projoint_tau objects — projoint_tau-class","text":"Class generator projoint_tau objects","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_tau-class.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Class generator for projoint_tau objects — projoint_tau-class","text":"slots Takes two slots: irr figure contains Inherits slots projoint_data","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":"Read re-format Qualtrics csv (choice text)","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":"","code":"read_Qualtrics(.file)"},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":".file file name corresponding csv downloaded Qualtrics.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":"data frame suitable reshape_projoint","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":"","code":"library(projoint) # Not run: # dat <- read_Qualtrics(\"mummolo_nall_replication_cleaned.csv\") # head(dat)"},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":null,"dir":"Reference","previous_headings":"","what":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":"users interested reordering attributes levels conjoint data set. First save existing order CSV using save_labels, manually reorder CSV. Finally, use function read modified CSV automatically apply new order existing projoint_data.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":"","code":"read_labels(.data, .filename)"},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":".data `projoint_data` object .filename name revised CSV file, originally derived save_labels, manual arrangement","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":"projoint object class projoint_data ready pass projoint.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":"","code":"library(projoint) library(readr) data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … # Write outcome column names outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") # Reshape the data reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) # Save a CSV file (Not Run) # save_labels(reshaped_data, \"data-raw/labels_original.csv\") # Not Run: Read a revised CSV file # reshaped_data_arranged <- read_labels(reshaped_data, \"data-raw/labels_arranged.csv\")"},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":null,"dir":"Reference","previous_headings":"","what":"Reshapes survey response data for conjoint analysis — reshape_projoint","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":"function takes data frame, preferably read_Qualtrics, reshapes wide long row distinct conjoint task rather respondent.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":"","code":"reshape_projoint( .dataframe, .idvar, .outcomes, .outcomes_ids = c(\"1\", \"2\"), .alphabet = \"F\", .repeated = FALSE, .flipped = NULL, .covariates = NULL, .fill = FALSE )"},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":".dataframe data frame, preferably read_Qualtrics .idvar character identifying column name containing respondent IDs .outcomes character vector identifying column names contain outcomes. repeated task, LAST element vector. .outcomes_ids vector identifying possibilities outcome variables -- e.g., c(\"Candidate \", \"Candidate B\") .alphabet letter indicating conjoint attributes. using Strezhnev's package (https://github.com/astrezhnev/conjointsdt) Qualtrics, default F. .repeated TRUE repeated task (recommended). repeated task first task. .flipped TRUE profiles repeated task flipped (recommended) .covariates character vector identifying respondents' covariates used subgroup analysis .fill logical vector: TRUE want use information whether respondent chose profile repeated task \"fill\" (using `tidyr` package) missing values non-repeated tasks, FALSE (otherwise). number respondents small, number specific profile pairs interest small, /number specific respondent subgroups want study small, worth changing option TRUE. please note `.fill = TRUE` based assumption IRR independent information contained conjoint tables. Although empirical tests suggest validity assumption, unsure , better use default value (FALSE).","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":"projoint object class `projoint_data` ready pass `projoint()`. projoint object class projoint_data ready pass projoint.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":"","code":"library(projoint) library(stringr) data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … # Write outcome column names outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") # Reshape the data reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .fill = FALSE)"},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":null,"dir":"Reference","previous_headings":"","what":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":"function saves labels attributes levels, generated reshape_projoint, CSV file. important step reorganizing labels.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":"","code":"save_labels(.data, .filename)"},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":".data projoint_data object .filename name CSV file saved","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":"None","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":"","code":"library(projoint) library(readr) data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … # Write outcome column names outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") # Reshape the data reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) # Not Run: Save a CSV file # save_labels(reshaped_data, \"data-raw/labels_original.csv\")"},{"path":"https://yhoriuchi.github.io/projoint/reference/set_qoi.html","id":null,"dir":"Reference","previous_headings":"","what":"Set the quantities of interest — set_qoi","title":"Set the quantities of interest — set_qoi","text":"function allows users specify fine-tuned details conjoint analysis. particular, users can set specific quantities interest aside simple AMCEs MMs.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/set_qoi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set the quantities of interest — set_qoi","text":"","code":"set_qoi( .structure = \"profile_level\", .estimand = \"mm\", .att_choose, .lev_choose, .att_notchoose = NULL, .lev_notchoose = NULL, .att_choose_b = NULL, .lev_choose_b = NULL, .att_notchoose_b = NULL, .lev_notchoose_b = NULL )"},{"path":"https://yhoriuchi.github.io/projoint/reference/set_qoi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set the quantities of interest — set_qoi","text":".structure Either \"profile_level\" \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .att_choose character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). .lev_choose character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). argument specified .structure argument \"choice-level\". .lev_notchoose character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis. argument specified .structure argument \"choice-level\". .att_choose_b [baseline AMCE] character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). .lev_choose_b [baseline AMCE] character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose_b [baseline AMCE] character column name identifying attribute interest (.e., attribute-level attribute-levels chosen*). argument specified .structure argument \"choice-level\". .lev_notchoose_b [baseline AMCE] character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis. argument specified .structure argument \"choice-level\".","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/set_qoi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set the quantities of interest — set_qoi","text":"projoint_qoi object","code":""},{"path":"https://yhoriuchi.github.io/projoint/news/index.html","id":"projoint-development-version","dir":"Changelog","previous_headings":"","what":"projoint (development version)","title":"projoint (development version)","text":"written","code":""}] +[{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement yusaku.horiuchi@dartmouth.edu. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://yhoriuchi.github.io/projoint/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired [Mozilla’s code conduct enforcement ladder][https://github.com/mozilla/inclusion]. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"generate-a-javascript-or-php-randomizer","dir":"Articles","previous_headings":"","what":"1.1 Generate a JavaScript or PHP randomizer","title":"1. Setting up your Qualtrics survey","text":"Strezhnev’s guide designing implementing conjoint surveys Qualtrics excellent reiterate . summarize: researchers first use ConjointSDT produce JavaScript PHP randomizer.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"javascript","dir":"Articles","previous_headings":"1.1 Generate a JavaScript or PHP randomizer","what":"JavaScript","title":"1. Setting up your Qualtrics survey","text":"JavaScript randomizer can inputted first screen Qualtrics survey, using Edit Question Javascript functionality. See following screenshot example: Javascript available . JavaScript produced ConjointSDT run internally within Qualtrics automatically creates values embedded fields. attributes levels constitute profile pairs conjoint task. example, embedded field “K-1-1-7” contains value (level) seventh attribute first profile (two) first task, “K-5-2-5” contains level fifth attribute second profile (two) fifth task.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"php","dir":"Articles","previous_headings":"1.1 Generate a JavaScript or PHP randomizer","what":"PHP","title":"1. Setting up your Qualtrics survey","text":"PHP randomizer must hosted server. following example hosted server: https://www.horiuchi.org/php/ACHR_Modified_2.php. (PHP file available .) PHP randomizer used Agadjanian, Carey, Horiuchi, Ryan (2023).","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"modify-your-javascript-or-php-randomizer","dir":"Articles","previous_headings":"","what":"1.2 Modify your Javascript or PHP randomizer","title":"1. Setting up your Qualtrics survey","text":"add additional constraints, removing ties two profiles, need revise PHP scripts Javascript manually. future release package, add additional feature make step easier. now, recommend use resources, including Open AI’s GPT-4), learn modify code. PHP example following manually added component end race one profile (candidate) always “White” another always “Black,” “Asian,” “Hispanic.” examples adding additional constraints, please send email package maintainer, Yusaku Horiuchi Thank !","code":"$treat_profile_one = \"B-\" . (string)$p . \"-1-\" . (string)$treat_number; $treat_profile_two = \"B-\" . (string)$p . \"-2-\" . (string)$treat_number; $cond1 = $returnarray[$treat_profile_one] == \"White\" && $returnarray[$treat_profile_two] == $type; $cond2 = $returnarray[$treat_profile_two] == \"White\" && $returnarray[$treat_profile_one] == $type; if ($cond1 or $cond2){$complete = True;}"},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"add-conjoint-tables-with-embedded-fields-in-qualtrics","dir":"Articles","previous_headings":"","what":"1.3 Add conjoint tables with embedded fields in Qualtrics","title":"1. Setting up your Qualtrics survey","text":"set JavaScript PHP randomizer, next step design, task, table using HTML insert embedded fiels. following screenshot first task example. complete HTML first conjoint task survey available . typical conjoint study include 5-10 tasks. number questions HTML pages correspond number tasks. embedded fields task different: first digit “K” increment 1 10 tasks progress.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"adding-a-repeated-task-recommended","dir":"Articles","previous_headings":"1.3 Add conjoint tables with embedded fields in Qualtrics","what":"Adding a repeated task (recommended!)","title":"1. Setting up your Qualtrics survey","text":"wish implement repeated task, , need copy task repeated (say, first task) later point survey (say, fifth task). recommend researchers flip order two profiles well. Therefore, Profile 1 original task becomes Profile 2 new task. , simply swap middle digit embedded fields . repeated task look like following: complete HTML repeated conjoint task survey available . Importantly,repeated task, researchers can use measure intra-respondent reliability (IRR).","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/01-setup.html","id":"a-sample-qualtrics-survey","dir":"Articles","previous_headings":"","what":"1.4 A sample Qualtrics survey","title":"1. Setting up your Qualtrics survey","text":"want copy Qualtric survey designed exmaple, download QSF file import Qualtrics account. can use template design conjoint survey experiment!","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"load-the-projoint-package","dir":"Articles","previous_headings":"","what":"2.1 Load the projoint package","title":"2. Read and wrangle your data for conjoint analysis","text":"","code":"library(projoint)"},{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"with-the-flipped-repeated-tasks","dir":"Articles","previous_headings":"2.2 Read and wrangle data","what":"With the flipped repeated tasks","title":"2. Read and wrangle your data for conjoint analysis","text":"Let’s look simple example. expand arguments clarity: Let’s walk arguments specified. .dataframe data frame, ideally read Qualtrics using read_Qualtrics() necessarily. .idvar argument, character, indicates exampleData1, column ResponseId indicates unique survey respondents. .outcomes variable lists columns outcomes; last element vector repeated task (conducted). .outcomes_ids indicates possible options outcome; specifically, vector characters two elements, last characters names first second profiles. example, c(“”, “B”) profile names “Candidate ” “Candidate B”. character vector can anything, c(“1”, “2”), c(“”, “b”), etc. multiple tasks design, use profile names across tasks. .alphabet defaults “K” conjoint survey conducted using either tool Strezhnev’s Conjoint Survey Design Tool. final two arguments, .repeated .flipped, relate repeated task. .repeated set TRUE, last element .outcomes vector taken repetition first task; .flipped indicates whether profiles reversed order. See Section 2.3 .fill.","code":"outcomes1 <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes1 <- c(outcomes1, \"choice1_repeated_flipped\") out1 <- reshape_projoint(.dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes1, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .fill = FALSE)"},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"with-the-not-flipped-repeated-tasks","dir":"Articles","previous_headings":"2.2 Read and wrangle data","what":"With the not-flipped repeated tasks","title":"2. Read and wrangle your data for conjoint analysis","text":"slight variation, cases repeated task flipped – , repeated task, original Profile 1 still Profile 1, rather flipping positions Profile 2. specify changing .flipped FALSE.","code":"outcomes2 <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes2 <- c(outcomes2, \"choice1_repeated_notflipped\") out2 <- reshape_projoint(.dataframe = exampleData2, .idvar = \"ResponseId\", .outcomes = outcomes2, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = FALSE, .fill = FALSE)"},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"without-the-repeated-tasks","dir":"Articles","previous_headings":"2.2 Read and wrangle data","what":"Without the repeated tasks","title":"2. Read and wrangle your data for conjoint analysis","text":"cases repeated task , set .repeated FALSE .flipped NULL:","code":"outcomes3 <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) out3 <- reshape_projoint(.dataframe = exampleData3, .idvar = \"ResponseId\", .outcomes = outcomes3, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = FALSE, .flipped = NULL, .fill = FALSE)"},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"the--fill-argument","dir":"Articles","previous_headings":"","what":"2.3 The .fill argument","title":"2. Read and wrangle your data for conjoint analysis","text":".fill argument logical: TRUE want use information whether respondent chose profile repeated task “fill” (using ‘tidyr’ package) missing values non-repeated tasks, FALSE (otherwise). can see difference comparing following two: just select essential variables . first data frame includes values agree variable (whether profile chosen ) repeated task. second data frame fills missing values non-repeated tasks. number respondents small, number specific profile pairs interest small, /number specific respondent subgroups want study small, worth changing option TRUE. please note .fill = TRUE based assumption IRR independent information contained conjoint tables. Although empirical tests suggest validity assumption, unsure , better use default value (FALSE).","code":"fill_FALSE <- reshape_projoint(.dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes1, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .fill = FALSE) fill_TRUE <- reshape_projoint(.dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes1, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .fill = TRUE) selected_vars <- c(\"id\", \"task\", \"profile\", \"selected\", \"selected_repeated\", \"agree\") fill_FALSE@data[selected_vars] ## # A tibble: 6,400 × 6 ## id task profile selected selected_repeated agree ## ## 1 R_00zYHdY1te1Qlrz 1 1 1 1 1 ## 2 R_00zYHdY1te1Qlrz 1 2 0 0 1 ## 3 R_00zYHdY1te1Qlrz 2 1 1 NA NA ## 4 R_00zYHdY1te1Qlrz 2 2 0 NA NA ## 5 R_00zYHdY1te1Qlrz 3 1 1 NA NA ## 6 R_00zYHdY1te1Qlrz 3 2 0 NA NA ## 7 R_00zYHdY1te1Qlrz 4 1 0 NA NA ## 8 R_00zYHdY1te1Qlrz 4 2 1 NA NA ## 9 R_00zYHdY1te1Qlrz 5 1 1 NA NA ## 10 R_00zYHdY1te1Qlrz 5 2 0 NA NA ## # ℹ 6,390 more rows fill_TRUE@data[selected_vars] ## # A tibble: 6,400 × 6 ## id task profile selected selected_repeated agree ## ## 1 R_00zYHdY1te1Qlrz 1 1 1 1 1 ## 2 R_00zYHdY1te1Qlrz 1 2 0 0 1 ## 3 R_00zYHdY1te1Qlrz 2 1 1 NA 1 ## 4 R_00zYHdY1te1Qlrz 2 2 0 NA 1 ## 5 R_00zYHdY1te1Qlrz 3 1 1 NA 1 ## 6 R_00zYHdY1te1Qlrz 3 2 0 NA 1 ## 7 R_00zYHdY1te1Qlrz 4 1 0 NA 1 ## 8 R_00zYHdY1te1Qlrz 4 2 1 NA 1 ## 9 R_00zYHdY1te1Qlrz 5 1 1 NA 1 ## 10 R_00zYHdY1te1Qlrz 5 2 0 NA 1 ## # ℹ 6,390 more rows"},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"read-your-already-wrangled-tibble","dir":"Articles","previous_headings":"","what":"2.4 Read your already-wrangled tibble","title":"2. Read and wrangle your data for conjoint analysis","text":"may already read original data downloaded Qualtrics, load R, wrangle data make data frame (tibble) ready analysis. case, use make_projoint_data() save data “projoint_data” class object necessary use projoint(). example. First, load data frame. looks like following. row correspond two profiles task respondent. data frame columns indicating (1) respondent’s ID, (2) task number, (3) profile number, (4) column recording response (0, 1) task. design includes repeated task, also include column recording response repeated task. Next, make character vector attributes. , make suitable object next steps using make_projoint_data(). default variable names shown . data frame uses different names, can change . output output fill_FALSE previous section.","code":"data <- exampleData1_labelled_tibble data ## # A tibble: 6,400 × 14 ## id task profile selected selected_repeated `School Quality` ## ## 1 R_00zYHdY1te1Qlrz 1 1 1 1 9 out of 10 ## 2 R_00zYHdY1te1Qlrz 1 2 0 0 5 out of 10 ## 3 R_00zYHdY1te1Qlrz 2 1 1 NA 9 out of 10 ## 4 R_00zYHdY1te1Qlrz 2 2 0 NA 9 out of 10 ## 5 R_00zYHdY1te1Qlrz 3 1 1 NA 5 out of 10 ## 6 R_00zYHdY1te1Qlrz 3 2 0 NA 9 out of 10 ## 7 R_00zYHdY1te1Qlrz 4 1 0 NA 5 out of 10 ## 8 R_00zYHdY1te1Qlrz 4 2 1 NA 9 out of 10 ## 9 R_00zYHdY1te1Qlrz 5 1 1 NA 5 out of 10 ## 10 R_00zYHdY1te1Qlrz 5 2 0 NA 5 out of 10 ## # ℹ 6,390 more rows ## # ℹ 8 more variables: `Violent Crime Rate (Vs National Rate)` , ## # `Racial Composition` , `Housing Cost` , ## # `Presidential Vote (2020)` , ## # `Total Daily Driving Time for Commuting and Errands` , ## # `Type of Place` , race , ideology attributes <- c(\"School Quality\", \"Violent Crime Rate (Vs National Rate)\", \"Racial Composition\", \"Housing Cost\", \"Presidential Vote (2020)\", \"Total Daily Driving Time for Commuting and Errands\", \"Type of Place\") out4 <- make_projoint_data(.dataframe = data, .attribute_vars = attributes, .id_var = \"id\", # the default name .task_var = \"task\", # the default name .profile_var = \"profile\", # the default name .selected_var = \"selected\", # the default name .selected_repeated_var = \"selected_repeated\", # the default is NULL .fill = TRUE) out4 ## An object of class \"projoint_data\" ## Slot \"labels\": ## # A tibble: 24 × 4 ## attribute_id level level_id attribute ## ## 1 att1 15% of pre-tax income att1:lev1 Housing Cost ## 2 att1 30% of pre-tax income att1:lev2 Housing Cost ## 3 att1 40% of pre-tax income att1:lev3 Housing Cost ## 4 att2 30% Democrat, 70% Republican att2:lev1 Presidential Vote (2020) ## 5 att2 50% Democrat, 50% Republican att2:lev2 Presidential Vote (2020) ## 6 att2 70% Democrat, 30% Republican att2:lev3 Presidential Vote (2020) ## 7 att3 50% White, 50% Nonwhite att3:lev1 Racial Composition ## 8 att3 75% White, 25% Nonwhite att3:lev2 Racial Composition ## 9 att3 90% White, 10% Nonwhite att3:lev3 Racial Composition ## 10 att3 96% White, 4% Nonwhite att3:lev4 Racial Composition ## # ℹ 14 more rows ## ## Slot \"data\": ## # A tibble: 6,400 × 13 ## id task profile selected selected_repeated agree att4 att7 att3 att1 ## ## 1 R_00z… 1 1 1 1 1 att4… att7… att3… att1… ## 2 R_00z… 1 2 0 0 1 att4… att7… att3… att1… ## 3 R_00z… 2 1 1 NA 1 att4… att7… att3… att1… ## 4 R_00z… 2 2 0 NA 1 att4… att7… att3… att1… ## 5 R_00z… 3 1 1 NA 1 att4… att7… att3… att1… ## 6 R_00z… 3 2 0 NA 1 att4… att7… att3… att1… ## 7 R_00z… 4 1 0 NA 1 att4… att7… att3… att1… ## 8 R_00z… 4 2 1 NA 1 att4… att7… att3… att1… ## 9 R_00z… 5 1 1 NA 1 att4… att7… att3… att1… ## 10 R_00z… 5 2 0 NA 1 att4… att7… att3… att1… ## # ℹ 6,390 more rows ## # ℹ 3 more variables: att2 , att5 , att6 "},{"path":"https://yhoriuchi.github.io/projoint/articles/02-wrangle.html","id":"arrange-the-order-and-labels-of-attributes-and-levels","dir":"Articles","previous_headings":"","what":"2.5 Arrange the order and labels of attributes and levels","title":"2. Read and wrangle your data for conjoint analysis","text":"reshaped data attributes levels sorted alphabetically. Often, however, want reorder attributes /order levels particular attribute. may also prefer use actual labels attributes levels used conjoint experiments; example, purpose presentation, may want make shorter. process challenging applied scholars using packages. make process easy. first save labels using save_labels(). CSV file save local computer, revise column named order specify order attributes levels want display figure. can also revise labels attributes levels way like. make change first column named level_id. saving updated CSV file, use read_labels() read save object suitable next step (.e., use projoint()). can find data set GitHub: labels_original.csv labels_arranged.csv. figure based original order labels alphabetical order: labels order attribute-levels second figure Figure 2 Mummolo Nall (2017).","code":"save_labels(out1, \"temp/labels_original.csv\") out1_arranged <- read_labels(out1, \"temp/labels_arranged.csv\") mm <- projoint(out1, .estimand = \"mm\") plot(mm) mm <- projoint(out1_arranged, .estimand = \"mm\") plot(mm)"},{"path":"https://yhoriuchi.github.io/projoint/articles/03-predict.html","id":"load-the-projoint-package","dir":"Articles","previous_headings":"","what":"3.1 Load the projoint package","title":"3. Predict the intra-respondent reliability (IRR)","text":"","code":"library(projoint)"},{"path":"https://yhoriuchi.github.io/projoint/articles/03-predict.html","id":"predict-irr-based-on-the-extrapolation-method","dir":"Articles","previous_headings":"","what":"3.2 Predict IRR based on the extrapolation method","title":"3. Predict the intra-respondent reliability (IRR)","text":", start reading Qualtrics file reshaping using reshape_projiont(). See 2.2 Read wrangle data, flipped repeated tasks. skip step instruction use already wrangled data named “out1_arranged” (See 2.5 Arrange order labels attributes levels. pass data set predict_tau function, calculates IRR produces figure showing extrapolation method visually. (see 2.3 Arrange order labels attributes levels). flipped repeated tasks projoint_tau object, created predict_tau, can explored using usual tools. print method explains estimate tau produced via extrapolation rather assumed calculated using repeated task presents estimate: summary method returns tibble IRR profiles become dissimilar. x=7, example, attributes different two profiles see IRR 0.503. extrapolate x=0, IRR profiles identical: plot method renders plot showing extrapolated value tau:","code":"predicted_irr <- predict_tau(out1_arranged) print(predicted_irr) ## [1] \"Tau estimated using the extrapolation method: 0.743\" summary(predicted_irr) ## # A tibble: 8 × 2 ## x predicted ## ## 1 0 0.743 ## 2 1 0.709 ## 3 2 0.675 ## 4 3 0.640 ## 5 4 0.606 ## 6 5 0.572 ## 7 6 0.537 ## 8 7 0.503 plot(predicted_irr)"},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"load-the-projoint-package-and-set-up-the-data","dir":"Articles","previous_headings":"","what":"4.1 Load the projoint package and set up the data","title":"4. Estimate corrected MMs or AMCEs","text":"Important: estimate visualize quantities interest using package (least current version), need set attributes levels using IDs, rather actual labels. think approach prone error applications may include foreign characters (e.g., 2-byte Japanese characters) special characters. check IDs correspond attributes levels, can type following line script: can also save_labels() save CSV file reference.","code":"library(projoint) outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") out1 <- reshape_projoint(.dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) out1@labels ## # A tibble: 24 × 4 ## attribute level attribute_id level_id ## ## 1 Housing Cost 15% of pre-tax income att1 att1:leve… ## 2 Housing Cost 30% of pre-tax income att1 att1:leve… ## 3 Housing Cost 40% of pre-tax income att1 att1:leve… ## 4 Presidential Vote (2020) 30% Democrat, 70% Republican att2 att2:leve… ## 5 Presidential Vote (2020) 50% Democrat, 50% Republican att2 att2:leve… ## 6 Presidential Vote (2020) 70% Democrat, 30% Republican att2 att2:leve… ## 7 Racial Composition 50% White, 50% Nonwhite att3 att3:leve… ## 8 Racial Composition 75% White, 25% Nonwhite att3 att3:leve… ## 9 Racial Composition 90% White, 10% Nonwhite att3 att3:leve… ## 10 Racial Composition 96% White, 4% Nonwhite att3 att3:leve… ## # ℹ 14 more rows"},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"estimate-mms","dir":"Articles","previous_headings":"","what":"4.2 Estimate MMs","title":"4. Estimate corrected MMs or AMCEs","text":"two main setups projoint can produce estimates. profile-level common approach literature, choice-level flexible powerful.","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"mm-profile-level-all-levels","dir":"Articles","previous_headings":"4.2 Estimate MMs","what":"MM (profile-level) – all levels","title":"4. Estimate corrected MMs or AMCEs","text":"default method projoint estimate marginal means (MMs) profile-level. run projoint(out1), conduct analysis. expand arguments clarity:","code":"mm0 <- projoint(.data = out1, .qoi = NULL, .by_var = NULL, .structure = \"profile_level\", .estimand = \"mm\", .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\") print(mm0) ## [A projoint output] ## Estimand: mm ## Structure: profile_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(mm0) ## # A tibble: 48 × 6 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.574 0.0134 0.548 0.601 att1:level1 ## 2 mm_corrected 0.614 0.0207 0.573 0.654 att1:level1 ## 3 mm_uncorrected 0.485 0.0134 0.458 0.511 att1:level2 ## 4 mm_corrected 0.477 0.0204 0.437 0.517 att1:level2 ## 5 mm_uncorrected 0.445 0.0131 0.419 0.470 att1:level3 ## 6 mm_corrected 0.416 0.0203 0.376 0.455 att1:level3 ## 7 mm_uncorrected 0.489 0.0133 0.463 0.515 att2:level1 ## 8 mm_corrected 0.483 0.0202 0.443 0.522 att2:level1 ## 9 mm_uncorrected 0.524 0.0130 0.498 0.549 att2:level2 ## 10 mm_corrected 0.536 0.0200 0.497 0.575 att2:level2 ## # ℹ 38 more rows"},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"mm-profile-level-specific-level","dir":"Articles","previous_headings":"4.2 Estimate MMs","what":"MM (profile-level) – specific level","title":"4. Estimate corrected MMs or AMCEs","text":"However, also possible specify precise attributes, attribute levels, interest using set_qoi function . set_qoi function main way users specify complex estimands conjoint analysis. Al arguments qoi() expanded clarity, default arguments projoint() dropped simplicity:","code":"qoi_1 <- set_qoi( .structure = \"profile_level\", .estimand = \"mm\", .att_choose = \"att1\", .lev_choose = \"level1\") mm1 <- projoint(.data = out1, .qoi = qoi_1) print(mm1) ## [A projoint output] ## Estimand: mm ## Structure: profile_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(mm1) ## # A tibble: 2 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.574 0.0134 0.548 0.601 att1:level1 ## 2 mm_corrected 0.614 0.0207 0.573 0.654 att1:level1 ## # ℹ 1 more variable: att_level_notchoose "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"mm-profile-level-specific-level-using-the-predicted-irr","dir":"Articles","previous_headings":"4.2 Estimate MMs","what":"MM (profile-level) – specific level, using the predicted IRR","title":"4. Estimate corrected MMs or AMCEs","text":"conjoint survey design include recommended repeated task, can use specific value .irr, can estimate using predict_tau() function specify value based prior knowledge. following, use 0.75, likely IRR find test data sets. default arguments set_qoi() projoint() dropped hereafter.","code":"mm1b <- projoint(.data = out1, .qoi = qoi_1, .irr = 0.75) print(mm1b) ## [A projoint output] ## Estimand: mm ## Structure: profile_level ## IRR: Assumed (0.75) ## Tau: 0.1464466 ## Remove ties: TRUE ## SE methods: analytical summary(mm1b) ## # A tibble: 2 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.574 0.0134 0.548 0.601 att1:level1 ## 2 mm_corrected 0.605 0.0190 0.568 0.643 att1:level1 ## # ℹ 1 more variable: att_level_notchoose "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"mm-choice-level-specific-level","dir":"Articles","previous_headings":"4.2 Estimate MMs","what":"MM (choice-level) – specific level","title":"4. Estimate corrected MMs or AMCEs","text":"soon users wish switch profile-level choice-level analysis, set_qoi function required. exponentially choice-level estimands profile-level estimands, impractical view . specify want return marginal mean attribute 1, levels 1 3 choice-level.","code":"qoi_2 <- set_qoi( .structure = \"choice_level\", .att_choose = \"att1\", .lev_choose = \"level3\", .att_notchoose = \"att1\", .lev_notchoose = \"level1\" ) mm2 <- projoint(.data = out1, .qoi = qoi_2, .structure = \"choice_level\", .ignore_position = FALSE) print(mm2) ## [A projoint output] ## Estimand: mm ## Structure: choice_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(mm2) ## # A tibble: 2 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.402 0.0258 0.352 0.453 att1:level3 ## 2 mm_corrected 0.351 0.0408 0.271 0.431 att1:level3 ## # ℹ 1 more variable: att_level_notchoose "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"estimate-amces","dir":"Articles","previous_headings":"","what":"4.3 Estimate AMCEs","title":"4. Estimate corrected MMs or AMCEs","text":"Note can replicate analyses using AMCE instead MM just specifying .estimand = \"amce\" rather default \"mm\".","code":""},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"amce-profile-level-all-levels","dir":"Articles","previous_headings":"4.3 Estimate AMCEs","what":"AMCE (profile-level) – all levels","title":"4. Estimate corrected MMs or AMCEs","text":"","code":"amce0 <- projoint(.data = out1, .estimand = \"amce\") print(amce0) ## [A projoint output] ## Estimand: amce ## Structure: profile_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(amce0) ## # A tibble: 34 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 amce_uncorrected -0.0899 0.0190 -0.127 -0.0527 att1:level2 ## 2 amce_corrected -0.137 0.0290 -0.194 -0.0801 att1:level2 ## 3 amce_uncorrected -0.130 0.0188 -0.167 -0.0931 att1:level3 ## 4 amce_corrected -0.198 0.0294 -0.256 -0.140 att1:level3 ## 5 amce_uncorrected 0.0348 0.0186 -0.00170 0.0713 att2:level2 ## 6 amce_corrected 0.0530 0.0284 -0.00258 0.109 att2:level2 ## 7 amce_uncorrected -0.00177 0.0188 -0.0386 0.0350 att2:level3 ## 8 amce_corrected -0.00270 0.0286 -0.0589 0.0535 att2:level3 ## 9 amce_uncorrected 0.0240 0.0204 -0.0159 0.0640 att3:level2 ## 10 amce_corrected 0.0366 0.0312 -0.0246 0.0979 att3:level2 ## # ℹ 24 more rows ## # ℹ 1 more variable: att_level_choose_baseline "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"amce-profile-level-specific-level","dir":"Articles","previous_headings":"4.3 Estimate AMCEs","what":"AMCE (profile-level) – specific level","title":"4. Estimate corrected MMs or AMCEs","text":"","code":"qoi_3 <- set_qoi( .structure = \"profile_level\", .estimand = \"amce\", .att_choose = \"att1\", .lev_choose = \"level3\", .att_choose_b = \"att1\", .lev_choose_b = \"level1\" ) amce1 <- projoint(.data = out1, .qoi = qoi_3, .estimand = \"amce\") print(amce1) ## [A projoint output] ## Estimand: amce ## Structure: profile_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(amce1) ## # A tibble: 2 × 9 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 amce_uncorrected -0.130 0.0188 -0.167 -0.0931 att1:level3 ## 2 amce_corrected -0.198 0.0294 -0.256 -0.140 att1:level3 ## # ℹ 3 more variables: att_level_notchoose , ## # att_level_choose_baseline , att_level_notchoose_baseline "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"amce-profile-level-specific-level-using-the-predicted-irr","dir":"Articles","previous_headings":"4.3 Estimate AMCEs","what":"AMCE (profile-level) – specific level, using the predicted IRR","title":"4. Estimate corrected MMs or AMCEs","text":"","code":"amce1b <- projoint(.data = out1, .qoi = qoi_3, .estimand = \"amce\", .irr = 0.75) print(amce1b) ## [A projoint output] ## Estimand: amce ## Structure: profile_level ## IRR: Assumed (0.75) ## Tau: 0.1464466 ## Remove ties: TRUE ## SE methods: analytical summary(amce1b) ## # A tibble: 2 × 9 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 amce_uncorrected -0.130 0.0188 -0.167 -0.0931 att1:level3 ## 2 amce_corrected -0.184 0.0266 -0.236 -0.132 att1:level3 ## # ℹ 3 more variables: att_level_notchoose , ## # att_level_choose_baseline , att_level_notchoose_baseline "},{"path":"https://yhoriuchi.github.io/projoint/articles/04-estimate.html","id":"amce-choice-level-specific-level","dir":"Articles","previous_headings":"4.3 Estimate AMCEs","what":"AMCE (choice-level) – specific level","title":"4. Estimate corrected MMs or AMCEs","text":"","code":"qoi_4 <- set_qoi( .structure = \"choice_level\", .estimand = \"amce\", .att_choose = \"att1\", .lev_choose = \"level3\", .att_notchoose = \"att1\", .lev_notchoose = \"level1\", .att_choose_b = \"att1\", .lev_choose_b = \"level2\", .att_notchoose_b = \"att1\", .lev_notchoose_b = \"level1\" ) amce2 <- projoint(.data = out1, .qoi = qoi_4, .structure = \"choice_level\", .estimand = \"amce\", .ignore_position = TRUE) print(amce2) ## [A projoint output] ## Estimand: amce ## Structure: choice_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(amce2) ## # A tibble: 2 × 9 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 amce_uncorrected -0.0484 0.0270 -0.101 0.00448 att1:level3 ## 2 amce_corrected -0.0739 0.0414 -0.155 0.00727 att1:level3 ## # ℹ 3 more variables: att_level_notchoose , ## # att_level_choose_baseline , att_level_notchoose_baseline "},{"path":"https://yhoriuchi.github.io/projoint/articles/05-visualize.html","id":"load-the-projoint-package-and-the-other-necessary-package","dir":"Articles","previous_headings":"","what":"5.1 Load the projoint package and the other necessary package","title":"5. Visualize MMs or AMCEs","text":"","code":"library(projoint) library(ggplot2)"},{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/articles/05-visualize.html","id":"estimate-mms-and-amces-","dir":"Articles","previous_headings":"5.2 Profile-level analysis","what":"Estimate MMs and AMCEs.","title":"5. Visualize MMs or AMCEs","text":"","code":"mm <- projoint(out1_arranged) amce <- projoint(out1_arranged, .estimand = \"amce\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/05-visualize.html","id":"visualize-mms-and-amces","dir":"Articles","previous_headings":"5.2 Profile-level analysis","what":"Visualize MMs and AMCEs","title":"5. Visualize MMs or AMCEs","text":"default, researchers prefer view corrected estimates either MMs AMCEs. Researchers can, however, choose instead visualize uncorrected estimates, view together.","code":"plot(mm) plot(mm, .estimates = \"uncorrected\") plot(mm, .estimates = \"both\") plot(amce) plot(amce, .estimates = \"uncorrected\") plot(amce, .estimates = \"both\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/05-visualize.html","id":"choice-level-analysis","dir":"Articles","previous_headings":"","what":"5.3 Choice-level analysis","title":"5. Visualize MMs or AMCEs","text":"undertake choice-level analysis, first need specify quantity interest using set_qoi(). can estimate choice-level marginal means: Since many estimates, encourage make plots based objectives research. default plot choice-level marginal means basic ggplot object, compares marginal mean two options. sum two percenntages 100, thus may think redundant information presented figure. think figure effectivey way show results head--head (choice-level) comparison. can polish adding layers : Note: current version projoint package function plot choice-level average marginal compoennt effects. Stay tuned!","code":"qoi_mm <- set_qoi(.structure = \"choice_level\", .att_choose = \"att1\", .lev_choose = \"level1\", .att_notchoose = \"att1\", .lev_notchoose = \"level3\") choice_mm <- projoint(.data = out1_arranged, .structure = \"choice_level\", .qoi = qoi_mm, .ignore_position = TRUE) print(choice_mm) ## [A projoint output] ## Estimand: mm ## Structure: choice_level ## IRR: Estimated ## Tau: 0.1721281 ## Remove ties: TRUE ## SE methods: analytical summary(choice_mm) ## # A tibble: 2 × 7 ## estimand estimate se conf.low conf.high att_level_choose ## ## 1 mm_uncorrected 0.581 0.0187 0.544 0.618 att1:level1 ## 2 mm_corrected 0.624 0.0288 0.567 0.680 att1:level1 ## # ℹ 1 more variable: att_level_notchoose plot(choice_mm) plot(choice_mm, .labels = c(\"15% of pre-tax income\", \"30% of pre-tax income\")) + labs(y = \"Marginal mean\", x = \"Housing Cost\") + coord_cartesian(ylim = c(0, 1)) + geom_hline(yintercept = 0.5, linetype = \"dashed\", color = \"darkgray\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"load-the-projoint-package-","dir":"Articles","previous_headings":"","what":"6.1 Load the projoint package.","title":"6. Compare MMs or AMCEs between the subgroups","text":"Also load additional packages required vignette","code":"library(projoint) library(dplyr) library(ggplot2)"},{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"read-and-wrangle-data","dir":"Articles","previous_headings":"6.2 Profile-level analysis","what":"Read and Wrangle data","title":"6. Compare MMs or AMCEs between the subgroups","text":"begin, define outcome questions original dataset. Let’s make three data frames – first data frame baseline group (example, respondents report race “white”); second data frame comparison group (example, respondents reported race “white”), third data frame groups. Note .covariates argument specified reshape_conjoint() function third group. , add re-order labels (see 2.3 Arrange order labels attributes levels).","code":"outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") # Pre-processing df <- exampleData1 %>% mutate(white = ifelse(race == \"White\", 1, 0)) df_0 <- df %>% filter(white == 0) %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) df_1 <- df %>% filter(white == 1) %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) df_d <- df %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .covariates = \"white\") df_0 <- read_labels(df_0, \"temp/labels_arranged.csv\") df_1 <- read_labels(df_1, \"temp/labels_arranged.csv\") df_d <- read_labels(df_d, \"temp/labels_arranged.csv\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"estimate-mms-or-amces-and-the-difference-in-the-estimates","dir":"Articles","previous_headings":"6.2 Profile-level analysis","what":"Estimate MMs or AMCEs and the difference in the estimates","title":"6. Compare MMs or AMCEs between the subgroups","text":"three data frames, estimate MMs, AMCEs, differences estimates. following example estimate profile-level marginal means (default). Importantly, conjoint design includes repeated task, projoint() function applied subgroup estimate IRR corresponding subgroup. output out_d includes data differences can also check tau subgroup: , make save three ggplot objects.","code":"out_0 <- projoint(df_0) out_1 <- projoint(df_1) out_d <- projoint(df_d, .by_var = \"white\") out_d@estimates ## # A tibble: 48 × 11 ## estimand att_level_choose estimate_1 se_1 tau estimate_0 se_0 estimate ## ## 1 mm_uncor… att1:level1 0.586 0.0157 0.158 0.545 0.0258 0.0401 ## 2 mm_corre… att1:level1 0.625 0.0236 0.158 0.579 0.0433 0.0464 ## 3 mm_uncor… att1:level2 0.480 0.0158 0.158 0.496 0.0250 -0.0163 ## 4 mm_corre… att1:level2 0.471 0.0233 0.158 0.494 0.0432 -0.0229 ## 5 mm_uncor… att1:level3 0.439 0.0153 0.158 0.460 0.0254 -0.0210 ## 6 mm_corre… att1:level3 0.411 0.0227 0.158 0.431 0.0446 -0.0200 ## 7 mm_uncor… att2:level1 0.529 0.0154 0.158 0.510 0.0245 0.0195 ## 8 mm_corre… att2:level1 0.543 0.0226 0.158 0.517 0.0425 0.0260 ## 9 mm_uncor… att2:level2 0.500 0.0157 0.158 0.461 0.0248 0.0394 ## 10 mm_corre… att2:level2 0.500 0.0230 0.158 0.432 0.0417 0.0683 ## # ℹ 38 more rows ## # ℹ 3 more variables: se , conf.low , conf.high out_d@tau ## tau1 tau0 ## 1 0.1582662 0.2113249 plot_0 <- plot(out_0) plot_1 <- plot(out_1) plot_d <- plot(out_d, .by_var = TRUE)"},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"visualize-subgroup-differences","dir":"Articles","previous_headings":"6.2 Profile-level analysis","what":"Visualize subgroup differences","title":"6. Compare MMs or AMCEs between the subgroups","text":", make plot using patchwork package. Researchers can add/modify layers ggplot. default horizontal axis label “Difference” .by_var = TRUE specified plot() function.","code":"g_0 <- plot_0 + coord_cartesian(xlim = c(0.2, 0.8)) + scale_x_continuous(breaks = c(0.3, 0.5, 0.7)) + theme(plot.title = element_text(hjust = 0.5)) + labs(title = \"Non-white\", x = \"AMCE\") g_1 <- plot_1 + coord_cartesian(xlim = c(0.2, 0.8)) + scale_x_continuous(breaks = c(0.3, 0.5, 0.7)) + theme(axis.text.y = element_blank(), plot.title = element_text(hjust = 0.5)) + labs(title = \"White\", x = \"AMCE\") g_d <- plot_d + coord_cartesian(xlim = c(-0.4, 0.4)) + scale_x_continuous(breaks = c(-0.25, 0, 0.25)) + theme(axis.text.y = element_blank(), plot.title = element_text(hjust = 0.5)) + labs(title = \"Difference\") library(patchwork) g_0 + g_1 + g_d"},{"path":"https://yhoriuchi.github.io/projoint/articles/06-compare.html","id":"choice-level-analysis","dir":"Articles","previous_headings":"","what":"6.3 Choice-level analysis","title":"6. Compare MMs or AMCEs between the subgroups","text":"encourage users package make custom figures based estimates choice-level analysis. following just one example.","code":"df_D <- exampleData1 %>% filter(party_1 == \"Democrat\") %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) df_R <- exampleData1 %>% filter(party_1 == \"Republican\") %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) df_0 <- exampleData1 %>% filter(party_1 %in% c(\"Something else\", \"Independent\")) %>% reshape_projoint(.idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) qoi <- set_qoi( .structure = \"choice_level\", .estimand = \"mm\", .att_choose = \"att2\", # Presidential Vote (2020) .lev_choose = \"level3\", # 70% Democrat, 30% Republican .att_notchoose = \"att2\", .lev_notchoose = \"level1\", # 30% Democrat, 70% Republican ) out_D <- projoint(df_D, qoi, .structure = \"choice_level\", .ignore_position = TRUE) out_R <- projoint(df_R, qoi, .structure = \"choice_level\", .ignore_position = TRUE) out_0 <- projoint(df_0, qoi, .structure = \"choice_level\", .ignore_position = TRUE) out_merged <- bind_rows( out_D@estimates %>% mutate(party = \"Democrat\"), out_R@estimates %>% mutate(party = \"Republican\"), out_0@estimates %>% mutate(party = \"Independent\") ) %>% filter(estimand == \"mm_corrected\") ggplot(out_merged, aes(y = party, x = estimate)) + geom_vline(xintercept = 0.5, linetype = \"dashed\", color = \"gray\") + geom_pointrange(aes(xmin = conf.low, xmax = conf.high)) + geom_text(aes(label = format(round(estimate, digits = 2), nsmall = 2)), vjust = -1) + labs(y = NULL, x = \"Choice-level marginal mean\", title = \"Choose an area with 70% Democrat as opposed to an area with 30% Democrat\") + theme_classic()"},{"path":"https://yhoriuchi.github.io/projoint/articles/07-explore.html","id":"load-the-projoint-package-and-the-other-necessary-package","dir":"Articles","previous_headings":"","what":"7.1 Load the projoint package and the other necessary package","title":"7. Explore further","text":"previous articles, use already wrangled cleaned data named “out1_reshaped.” see attribute IDs level IDs means, can type:","code":"library(projoint) library(ggplot2) out1_arranged@labels ## # A tibble: 24 × 4 ## attribute level attribute_id level_id ## ## 1 Housing Cost 15% of pre-tax income att1 att1:leve… ## 2 Housing Cost 30% of pre-tax income att1 att1:leve… ## 3 Housing Cost 40% of pre-tax income att1 att1:leve… ## 4 Presidential Vote (2020) 50% Democrat, 50% Republican att2 att2:leve… ## 5 Presidential Vote (2020) 30% Democrat, 70% Republican att2 att2:leve… ## 6 Presidential Vote (2020) 70% Democrat, 30% Republican att2 att2:leve… ## 7 Racial Composition 50% White, 50% Nonwhite att3 att3:leve… ## 8 Racial Composition 75% White, 25% Nonwhite att3 att3:leve… ## 9 Racial Composition 90% White, 10% Nonwhite att3 att3:leve… ## 10 Racial Composition 96% White, 4% Nonwhite att3 att3:leve… ## # ℹ 14 more rows"},{"path":"https://yhoriuchi.github.io/projoint/articles/07-explore.html","id":"examine-trade-offs","dir":"Articles","previous_headings":"","what":"7.1 Examine trade-offs","title":"7. Explore further","text":"may interested people make choice face trade-options. example, one hand, may want live inexpensive house. hand, may prefer avoid living area high crime rate. two options prefer? can compare two options directly. customization figure, see Visualize MMs AMCEs, Choice-level analysis","code":"qoi_1 <- set_qoi( .structure = \"choice_level\", .att_choose = \"att1\", .lev_choose = \"level1\", .att_notchoose = \"att6\", .lev_notchoose = \"level2\" ) mm1 <- projoint(.data = out1_arranged, .qoi = qoi_1, .structure = \"choice_level\", .ignore_position = TRUE) plot(mm1, .labels = c(\"Housing Cost\\n(15% of pre-tax income)\", \"Violent Crime Rate\\n(20% > National Average)\")) + labs(y = \"Marginal mean\", x = NULL) + coord_cartesian(ylim = c(0, 1)) + geom_hline(yintercept = 0.5, linetype = \"dashed\", color = \"darkgray\")"},{"path":"https://yhoriuchi.github.io/projoint/articles/07-explore.html","id":"set-multiple-levels-for-the-attribute-of-interest","dir":"Articles","previous_headings":"","what":"6.1 Set multiple levels for the attribute of interest","title":"7. Explore further","text":"may interested measuring marginal means choosing one level. example, may want estimate marginal mean choosing “City, residential area” “City, downtown area” opposed “Suburban, houses” “Suburban, downtown area”. , can run following code:","code":"qoi_2 <- set_qoi( .structure = \"choice_level\", .att_choose = \"att7\", .lev_choose = c(\"level2\", \"level3\"), .att_notchoose = \"att7\", .lev_notchoose = c(\"level5\", \"level6\") ) mm2 <- projoint(.data = out1_arranged, .qoi = qoi_2, .structure = \"choice_level\", .ignore_position = TRUE) plot(mm2, .labels = c(\"City\", \"Suburban\")) + labs(y = \"Marginal mean\", x = \"Type of place\") + coord_cartesian(ylim = c(0, 1)) + geom_hline(yintercept = 0.5, linetype = \"dashed\", color = \"darkgray\")"},{"path":"https://yhoriuchi.github.io/projoint/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Yusaku Horiuchi. Author, maintainer. Aaron Kaufman. Author.","code":""},{"path":"https://yhoriuchi.github.io/projoint/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Katherine Clayton, Yusaku Horiuchi, Aaron R. Kaufman, Gary King, Mayya Komisarchik (2023). Correcting Measurement Error Bias Conjoint Survey Experiments. Working Paper. URL https://gking.harvard.edu/files/gking/files/conerr.pdf Yusaku Horiuchi Aaron R. Kaufman (2023). projoint: One Stop Conjoint Shop. URL https://github.com/yhoriuchi/projoint","code":"@Article{, title = {Correcting Measurement Error Bias in Conjoint Survey Experiments}, author = {Katherine Clayton and Yusaku Horiuchi and Aaron Kaufman and Gary King and Mayya Komisarchik}, journal = {Working Paper}, year = {2023}, url = {https://gking.harvard.edu/files/gking/files/conerr.pdf}, } @Misc{, title = {projoint: The One Stop Conjoint Shop}, author = {Yusaku Horiuchi and Aaron Kaufman}, year = {2023}, publisher = {GitHub repository}, url = {https://github.com/yhoriuchi/projoint}, }"},{"path":[]},{"path":[]},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"the-one-stop-conjoint-shop","dir":"","previous_headings":"","what":"The One-Stop Conjoint Shop","title":"The One Stop Conjoint Shop","text":"projoint package general, straightforward, creative conjoint analysis. estimates—either profile-level choice-level—Marginal Means (MMs) Average Marginal Component Effects (AMCEs) based conjoint survey experiment. produces reliable estimates correcting measurement error bias problems known literature (e.g., levels attribute interest). Furthermore, presents general framework researchers can answer range substantively important questions straightforwardly. notes: current version assumes outcome variable binary forced choice. package still construction. Forthcoming features include following: Add article explaining set Qualtrics survey Add function subgroup comparisons. Allow researchers use weights features respondents. Allow researchers use outcome variables, rating.","code":""},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"installation","dir":"","previous_headings":"The One-Stop Conjoint Shop","what":"Installation","title":"The One Stop Conjoint Shop","text":"can install development version projoint GitHub :","code":"# install.packages(\"devtools\") devtools::install_github(\"yhoriuchi/projoint\")"},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"why-projoint","dir":"","previous_headings":"The One-Stop Conjoint Shop","what":"Why projoint?","title":"The One Stop Conjoint Shop","text":"excellent R packages conjoint analysis, including cjoint (Version: 2.1.0, Published: 2018-10-19) cregg (Version: 0.4.0, Published: 2020-06-28). important advantages using package: importantly, unlike packages, researchers can fix measurement error bias (Clayton et al., working paper). cjoint cregg packages assume unit analysis profile even researchers design binary choice experiment. define straightforward choice-level MMs AMCEs allow users estimate (Clayton et al., working paper). profile-level MMs (cregg) always attenuated toward 0.5 conjoint design includes “ties” attribute interest (Gander 2021). Consider, example, attribute interest candidate’s party, two levels, {Republican, Democrat}. levels randomly assigned profile, 50% profile-pairs include ties. Therefore, even strongly partisan respondents care candidate’s party always prefer one party another, choose one two tied profiles randomly. Therefore, (profile-level) marginal mean Republican Republican supporters Democrat Democrat supporters 0.75 (= 1 * 0.5 + 0.5 * 0.5). remove ties calculate MMs. profile-level AMCEs (cjoint) may produce counter-intuitive estimates (Abramson, Kocak, Magazinni, Strezhnev, working paper). example, suppose attribute interest candidate’s race, three levels, {white, Black, Asian American}. Specifically, interested whether white respondents prefer Black Asian American candidate. case head--head comparison, suppose 75% white respondents choose Black candidate rather Asian American candidate. (example choice-level marginal mean.) profile-level AMCE choosing Black candidate using Asian American candidate may larger smaller 75%, surprisingly. AMCE’s calculation includes indirect comparisons combinations. set assumptions, profile-level AMCEs can still researchers’ substantive quantities interest (Bansak, Hainmueller, Hopkins, Yamamoto, forthcoming) quantities interest applied researchers. Therefore, provide option estimate alternative intuitive quantities interest, choice-level MMs AMCEs. Researchers often assume profile within profile-pair needs independent. critical assumption conjoint analysis. fact, researchers consider variety research questions cross-attribute constraints, profile pair one incumbent one challenger, profile pair sum values one (e.g., expected chance winning seat two candidates). framework software allow researchers examine variety questions flexible innovative manners. Last least, package provides easiest possible way re-label re-order attributes levels.","code":""},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"relevant-article","dir":"","previous_headings":"The One-Stop Conjoint Shop","what":"Relevant Article","title":"The One Stop Conjoint Shop","text":"framework methods, please read cite following article: Abstract: Conjoint survey designs spreading across social sciences due unusual capacity estimate many causal effects single randomized experiment. Unfortunately, ability mirror complicated real-world choices, designs often generate substantial measurement errors thus bias. replicate data collection analysis eight prominent conjoint studies, closely reproduce published results, show large proportion observed variation answers conjoint questions effectively random noise. discover common empirical pattern measurement error appears conjoint studies , , introduce easy--use statistical method correct bias.","code":""},{"path":"https://yhoriuchi.github.io/projoint/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"The One Stop Conjoint Shop","text":"Please note project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1.html","id":null,"dir":"Reference","previous_headings":"","what":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","title":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","text":"cleaned Qualtrics output conjoint study compares two potential new building developments. 8 standard tasks well repeat first task, used calculate response instability.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","text":"","code":"exampleData1"},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","text":"## `exampleData1` data frame 201 rows 186 columns: ResponseId Unique respondent ID race Respondent race: 6 categories party_1 Respondent party: Democrat, Republican, Independent, Something else party_2 party_1 D R: closer Democrats closer Republicans? party_3 party_1 R: strong R strong R party_4 party_1 D: strong D strong D ideology Respondent ideology Extremely liberal Extremely conservative honesty Attention check: respondents select \"never\" choice1, choice2, ..., choice8 Respondent selections initial 8 conjoint tasks choice1_repeated_flipped Respondent choice task repeats choice1 flipped","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Projoint Example Data Set 1: Building Conjoint with a Repeated, Flipped Task — exampleData1","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1_labelled_tibble.html","id":null,"dir":"Reference","previous_headings":"","what":"Projoint Example Data Set 1: ","title":"Projoint Example Data Set 1: ","text":"already cleaned data frame (tibble) attribute corresponds column proper attribute name. unit observation must unit observation must two profiles task respondent.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1_labelled_tibble.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projoint Example Data Set 1: ","text":"","code":"exampleData1_labelled_tibble"},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1_labelled_tibble.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Projoint Example Data Set 1: ","text":"## `exampleData1_labelled_tibble` data frame 6,400 rows 14 columns: id Unique respondent ID task Task number profile Profile number = 1,2 selected Whether profile selected selected_repeated Whether profile selected repeated task School Quality, ... Type Place attributes race Respondent race: 6 categories ideology Respondent ideology Extremely liberal Extremely conservative","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData1_labelled_tibble.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Projoint Example Data Set 1: ","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData2.html","id":null,"dir":"Reference","previous_headings":"","what":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","title":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","text":"cleaned Qualtrics output conjoint study compares two potential new building developments. 8 standard tasks well repeat first task, used calculate response instability.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","text":"","code":"exampleData2"},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","text":"## `exampleData2` data frame 199 rows 186 columns: ResponseId Unique respondent ID choice1, choice2, ..., choice8 Respondent selections initial 8 conjoint tasks choice1_repeated_notflipped Respondent choice task repeats choice1, unflipped race Respondent race: 5 categories party1 Respondent party party2 party1 D R: closer Democrats closer Republicans? party3 party1 R: strong R strong R party4 party1 D: strong D strong D ideology Respondent ideology Extremely liberal Extremely conservative honesty Attention check: respondents select \"never\" K-1-1, K-1-2, ..., K-8-5 K-X-Y indicates name attribute Yth position table Xth task K-1-1-1, K-1-1-2, ..., K-8-2-7 K-X-Y-Z indicates value attribute Zth position Yth profile (either 1 2 left right profiles) Xth task","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData2.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Projoint Example Data Set 2: Building Conjoint with a Repeated, Unflipped Task — exampleData2","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData3.html","id":null,"dir":"Reference","previous_headings":"","what":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","title":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","text":"cleaned Qualtrics output conjoint study compares two potential new building developments. 8 standard tasks.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData3.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","text":"","code":"exampleData3"},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData3.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","text":"## `exampleData3` data frame 201 rows 185 columns: ResponseId Unique respondent ID choice1, choice2, ..., choice8 Respondent selections initial 8 conjoint tasks race Respondent race: 5 categories party1 Respondent party party2 party1 D R: closer Democrats closer Republicans? party3 party1 R: strong R strong R party4 party1 D: strong D strong D ideology Respondent ideology Extremely liberal Extremely conservative honesty Attention check: respondents select \"never\" K-1-1, K-1-2, ..., K-8-5 K-X-Y indicates name attribute Yth position table Xth task K-1-1-1, K-1-1-2, ..., K-8-2-7 K-X-Y-Z indicates value attribute Zth position Yth profile (either 1 2 left right profiles) Xth task","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/exampleData3.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Projoint Example Data Set 3: Building Conjoint without a Repeated Task — exampleData3","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/make_projoint_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","title":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","text":"function converts labelled tibble (data frame) \"projoint_data\" class object necessary projoint.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/make_projoint_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","text":"","code":"make_projoint_data( .dataframe, .attribute_vars, .id_var = \"id\", .task_var = \"task\", .profile_var = \"profile\", .selected_var = \"selected\", .selected_repeated_var = NULL, .fill = FALSE )"},{"path":"https://yhoriuchi.github.io/projoint/reference/make_projoint_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","text":".dataframe data frame. unit observation must two profiles task respondent. .attribute_vars character vector identifying names attributes .id_var character identifying name column containing respondent IDs (default: \"id\") .task_var character identifying name column containing task numbers (default: \"task\") .profile_var character identifying name column containing profile numbers IDs (default: \"profile\") .selected_var character identifying name column containing dichotomous response (0, 1) task (default: \"selected\") .selected_repeated_var character identifying name column containing dichotomous response (0, 1) repeated task (default: NULL) .fill logical vector: TRUE want use information whether respondent chose profile repeated task \"fill\" (using `tidyr` package) missing values non-repeated tasks, FALSE (otherwise). number respondents small, number specific profile pairs interest small, /number specific respondent subgroups want study small, worth changing option TRUE. please note `.fill = TRUE` based assumption IRR independent information contained conjoint tables. Although empirical tests suggest validity assumption, unsure , better use default value (FALSE).","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/make_projoint_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Make a projoint_data object using a labelled tibble (data frame) — make_projoint_data","text":"projoint object class projoint_data ready pass projoint.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/organize_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Organize data before estimation — organize_data","title":"Organize data before estimation — organize_data","text":"function converts full conjoint data set data set structured analyzing specific attribute interest specific level(s) interest. function receives input reshape_data() output feeds pj_estimate().","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/organize_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Organize data before estimation — organize_data","text":"","code":"organize_data( .dataframe, .structure, .estimand, .remove_ties, .att_choose, .lev_choose, .att_notchoose, .lev_notchoose )"},{"path":"https://yhoriuchi.github.io/projoint/reference/organize_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Organize data before estimation — organize_data","text":".dataframe data frame reorganize -- second element list generated reshape_conjoint() .structure either \"choice_level\" \"profile_level\" .remove_ties TRUE want remove ties attribute interest (profile-level analysis) .att_choose character column name identifying attribute interest (.e., attribute-level attribute-levels *chosen*). .lev_choose character vector identifying level levels interest (.e., attribute-level attribute-levels *chosen*). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose character column name identifying attribute interest (.e., attribute-level attribute-levels *chosen*). argument specified `.structure` argument \"choice-level\". .lev_notchoose character vector identifying level levels interest (.e., attribute-level attribute-levels *chosen*). length 1 profile-level analysis 1+ choice-level analysis. argument specified `.structure` argument \"choice-level\".","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/out1_arranged.html","id":null,"dir":"Reference","previous_headings":"","what":"Reorganized Projoint Example Data Set 1 — out1_arranged","title":"Reorganized Projoint Example Data Set 1 — out1_arranged","text":"data set identical Example Data Set 1, except attributes levels manually relabeled reordered.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/out1_arranged.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reorganized Projoint Example Data Set 1 — out1_arranged","text":"","code":"out1_arranged"},{"path":"https://yhoriuchi.github.io/projoint/reference/out1_arranged.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Reorganized Projoint Example Data Set 1 — out1_arranged","text":"## `exampleData1` data frame 201 rows 186 columns: ResponseId Unique respondent ID race Respondent race: 6 categories party_1 Respondent party: Democrat, Republican, Independent, Something else party_2 party_1 D R: closer Democrats closer Republicans? party_3 party_1 R: strong R strong R party_4 party_1 D: strong D strong D ideology Respondent ideology Extremely liberal Extremely conservative honesty Attention check: respondents select \"never\" choice1, choice2, ..., choice8 Respondent selections initial 8 conjoint tasks choice1_repeated_flipped Respondent choice task repeats choice1 flipped","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/out1_arranged.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Reorganized Projoint Example Data Set 1 — out1_arranged","text":"Qualtrics Prolific; see Clayton et al. replication materials.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/pj_estimate.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate and correct MMs or AMCEs — pj_estimate","title":"Estimate and correct MMs or AMCEs — pj_estimate","text":"internal function used calculate correct marginal means average marginal component effects conjoint design.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/pj_estimate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate and correct MMs or AMCEs — pj_estimate","text":"","code":"pj_estimate( .data, .structure = \"profile_level\", .estimand = \"mm\", .att_choose, .lev_choose, .att_notchoose = NULL, .lev_notchoose = NULL, .att_choose_b = NULL, .lev_choose_b = NULL, .att_notchoose_b = NULL, .lev_notchoose_b = NULL, .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\" )"},{"path":"https://yhoriuchi.github.io/projoint/reference/pj_estimate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate and correct MMs or AMCEs — pj_estimate","text":".data projoint_data object .structure Either \"profile_level\" (default) \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .att_choose character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). .lev_choose character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). argument specified .structure argument \"choice-level\". .lev_notchoose character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis. argument specified .structure argument \"choice-level\". .att_choose_b [baseline AMCE] character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). .lev_choose_b [baseline AMCE] character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose_b [baseline AMCE] character column name identifying attribute interest (.e., attribute-level attribute-levels chosen*). argument specified .structure argument \"choice-level\". .lev_notchoose_b [baseline AMCE] character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis. argument specified .structure argument \"choice-level\". .se_method default, c(\"analytic\", \"simulation\", \"bootstrap\") description .irr NULL (default) IRR calculated using repeated task. Otherwise, numerical value .remove_ties Logical: ties removed estimation? Defaults TRUE. .ignore_position TRUE (default) ignore location profile (left right). Relevant analyzed choice level .n_sims number simulations. Relevant .se_method == \"simulation\" .n_boot number bootstrapped samples. Relevant .se_method == \"bootstrap\" .weights_1 weight estimate IRR (see lm_robust): NULL (default) .clusters_1 clusters estimate IRR (see lm_robust): NULL (default) .se_type_1 standard error type estimate IRR (see lm_robust): \"classical\" (default) .weights_2 weight estimate MM AMCE (see lm_robust): NULL (default) .clusters_2 clusters estimate MM AMCE (see lm_robust): NULL (default) .se_type_2 standard error type estimate MM AMCE (see lm_robust): \"classical\" (default)","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/pj_estimate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate and correct MMs or AMCEs — pj_estimate","text":"data frame estimates","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_results.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot all MMs or AMCEs — plot.projoint_results","title":"Plot all MMs or AMCEs — plot.projoint_results","text":"method produces MM AMCE plots given projoint_results object, output projoint function.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_results.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot all MMs or AMCEs — plot.projoint_results","text":"","code":"# S3 method for projoint_results plot( x, .estimates = \"corrected\", .by_var = FALSE, .labels = NULL, .base_size = 12, .base_family = \"\", ... )"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_results.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot all MMs or AMCEs — plot.projoint_results","text":"x projoint_results object .estimates estimates plotted, either \"corrected\" (default), \"uncorrected\", \"\" .by_var (structure profile-level) TRUE plot difference estimates two subgroups, FALSE (default) otherwise .labels (structure choice-level) chaarcter vector x-axis labels .base_size base font size, given pts. .base_family base font family ... Additional optional arguments","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_results.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot all MMs or AMCEs — plot.projoint_results","text":"ggplot object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_tau.html","id":null,"dir":"Reference","previous_headings":"","what":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","title":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","text":"Visualize results extrapolation method estimating tau.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_tau.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","text":"","code":"# S3 method for projoint_tau plot(x, ...)"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_tau.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","text":"x object class projoint_tau derived predict_tau ... Optional arguments; currently none accepted","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot.projoint_tau.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Visualize the results of the extrapolation method for estimating tau. — plot.projoint_tau","text":"","code":"library(projoint) library(stringr) ## Example 1: repeated, flipped task data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) tau1 <- predict_tau(reshaped_data) plot(tau1)"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_choice_level_mm.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot all ","title":"Plot all ","text":"method produces profile-level MM AMCE plots given projoint_results object, output projoint function. structure must profile-level use function.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_choice_level_mm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot all ","text":"","code":"plot_projoint_choice_level_mm( x, .estimates = \"corrected\", .labels = NULL, .base_size = 12, .base_family = \"\", ... )"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_choice_level_mm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot all ","text":"x projoint_results object .estimates estimates plotted, either \"corrected\" (default) \"uncorrected\" .labels character vector x-axis labels .base_size base font size, given pts. .base_family base font family ... Additional optional arguments","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_choice_level_mm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot all ","text":"ggplot object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_profile_level.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot all ","title":"Plot all ","text":"method produces profile-level MM AMCE plots given projoint_results object, output projoint function. structure must profile-level use function.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_profile_level.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot all ","text":"","code":"plot_projoint_profile_level( x, .estimates = \"corrected\", .by_var = FALSE, .base_size = 12, .base_family = \"\", ... )"},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_profile_level.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot all ","text":"x projoint_results object .estimates estimates plotted, either \"corrected\" (default), \"uncorrected\", \"\" .by_var TRUE plot difference estimates two subgroups, FALSE (default) otherwise .base_size base font size, given pts. .base_family base font family ... Additional optional arguments","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/plot_projoint_profile_level.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot all ","text":"ggplot object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate tau when there is no repeated task. — predict_tau","title":"Estimate tau when there is no repeated task. — predict_tau","text":"Given output projoint_data, function uses extrapolation method produce estimate intra-coder reliability (IRR).","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate tau when there is no repeated task. — predict_tau","text":"","code":"predict_tau(.data, .title = NULL) # S3 method for projoint_tau print(x, ...) # S3 method for projoint_tau summary(object, ...)"},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate tau when there is no repeated task. — predict_tau","text":".data projoint_data object, outputted reshape_projoint .title title figure x object class projoint_tau derived predict_tau ... Optional arguments; currently none accepted object object class projoint_tau derived predict_tau","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate tau when there is no repeated task. — predict_tau","text":"projoint_tau object containing estimate tau figure visualizing extrapolation method. tibble showing IRR profile similarity changes. value predicted x=0 estimated IRR.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/predict_tau.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate tau when there is no repeated task. — predict_tau","text":"","code":"library(projoint) library(stringr) ## Example 1: repeated, flipped task data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) tau1 <- predict_tau(reshaped_data) tau1 #> [1] \"Tau estimated using the extrapolation method: 0.743\" ## Example 2: repeated, unflipped task data(\"exampleData2\") head(exampleData2) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_not…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community A Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community A Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community A Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community A Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community B Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community B Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_notflipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_notflipped\") reshaped_data <- reshape_projoint( .dataframe = exampleData2, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = FALSE) tau2 <- predict_tau(reshaped_data) tau2 #> [1] \"Tau estimated using the extrapolation method: 0.743\" ## Example 3: no repeated task data(\"exampleData3\") head(exampleData3) #> # A tibble: 6 × 184 #> ResponseId choice1 choice2 choice3 choice4 choice5 choice6 choice7 choice8 #> #> 1 R_1M3TDihZzq9… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlf… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTO… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWY… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRK… Commun… Commun… Commun… Commun… Commun… Commun… Commun… Commun… #> # ℹ 175 more variables: race , party_1 , party_2 , #> # party_3 , party_4 , ideology , honesty , `K-1-1` , #> # `K-1-1-1` , `K-1-2` , `K-1-1-2` , `K-1-3` , #> # `K-1-1-3` , `K-1-4` , `K-1-1-4` , `K-1-5` , #> # `K-1-1-5` , `K-1-6` , `K-1-1-6` , `K-1-7` , #> # `K-1-1-7` , `K-1-2-1` , `K-1-2-2` , `K-1-2-3` , #> # `K-1-2-4` , `K-1-2-5` , `K-1-2-6` , `K-1-2-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes) reshaped_data <- reshape_projoint( .dataframe = exampleData3, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = FALSE) tau3 <- predict_tau(reshaped_data) tau3 #> [1] \"Tau estimated using the extrapolation method: 0.743\""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":null,"dir":"Reference","previous_headings":"","what":"Analyze a conjoint data set and correct for measurement error — projoint","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":"main function analyzes conjoint data set produces measurement error-corrected estimates either marginal means average marginal component effects, ready plotting. accepts `projoint_data` object, optionally `projoint_qoi` object users wish specify complex quantities interest.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":"","code":"projoint( .data, .qoi = NULL, .by_var = NULL, .structure = \"profile_level\", .estimand = \"mm\", .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\" ) # S3 method for projoint_results print(x, ...) # S3 method for projoint_results summary(object, ...)"},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":".data projoint_data object .qoi projoint_qoi object. NULL, defaults producing MMs AMCEs. .by_var dichotomous variable (character) used subgroup analysis .structure Either \"profile_level\" (default) \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .se_method default, c(\"analytic\", \"simulation\", \"bootstrap\") description .irr NULL (default) IRR calculated using repeated task. Otherwise, numerical value .remove_ties Logical: ties removed estimation? Defaults TRUE. .ignore_position TRUE (default) ignore location profile (left right). Relevant analyzed choice level .n_sims number simulations. Relevant .se_method == \"simulation\" .n_boot number bootstrapped samples. Relevant .se_method == \"bootstrap\" .weights_1 weight estimate IRR (see lm_robust): NULL (default) .clusters_1 clusters estimate IRR (see lm_robust): NULL (default) .se_type_1 standard error type estimate IRR (see lm_robust): \"classical\" (default) .weights_2 weight estimate MM AMCE (see lm_robust): NULL (default) .clusters_2 clusters estimate MM AMCE (see lm_robust): NULL (default) .se_type_2 standard error type estimate MM AMCE (see lm_robust): \"classical\" (default) x projoint_results object ... Optional arguments; currently none accepted object projoint_results object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":"projoint_results object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Analyze a conjoint data set and correct for measurement error — projoint","text":"","code":"library(projoint) data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) projoint(reshaped_data) #> [A projoint output] #> Estimand: mm #> Structure: profile_level #> IRR: Estimated #> Tau: 0.1721281 #> Remove ties: TRUE #> SE methods: analytical"},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_data-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class generator for projoint_data — projoint_data-class","title":"Class generator for projoint_data — projoint_data-class","text":"Class generator projoint_data","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_diff.html","id":null,"dir":"Reference","previous_headings":"","what":"Analyze a conjoint data set and correct for measurement error — projoint_diff","title":"Analyze a conjoint data set and correct for measurement error — projoint_diff","text":"internal function used calculate correct marginal means average marginal component effects conjoint design.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_diff.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analyze a conjoint data set and correct for measurement error — projoint_diff","text":"","code":"projoint_diff( .data, .qoi = NULL, .by_var, .structure = \"profile_level\", .estimand = \"mm\", .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\" )"},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_diff.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analyze a conjoint data set and correct for measurement error — projoint_diff","text":".data projoint_data object .qoi projoint_qoi object. NULL, defaults producing MMs AMCEs. .by_var dichotomous variable (character) used subgroup analysis .structure Either \"profile_level\" (default) \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .se_method default, c(\"analytic\", \"simulation\", \"bootstrap\") description .irr NULL (default) IRR calculated using repeated task. Otherwise, numerical value .remove_ties Logical: ties removed estimation? Defaults TRUE. .ignore_position TRUE (default) ignore location profile (left right). Relevant analyzed choice level .n_sims number simulations. Relevant .se_method == \"simulation\" .n_boot number bootstrapped samples. Relevant .se_method == \"bootstrap\" .weights_1 weight estimate IRR (see lm_robust): NULL (default) .clusters_1 clusters estimate IRR (see lm_robust): NULL (default) .se_type_1 standard error type estimate IRR (see lm_robust): \"classical\" (default) .weights_2 weight estimate MM AMCE (see lm_robust): NULL (default) .clusters_2 clusters estimate MM AMCE (see lm_robust): NULL (default) .se_type_2 standard error type estimate MM AMCE (see lm_robust): \"classical\" (default)","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_diff.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Analyze a conjoint data set and correct for measurement error — projoint_diff","text":"projoint_results object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_level.html","id":null,"dir":"Reference","previous_headings":"","what":"Analyze a conjoint data set and correct for measurement error — projoint_level","title":"Analyze a conjoint data set and correct for measurement error — projoint_level","text":"internal function used calculate correct marginal means average marginal component effects conjoint design.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_level.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analyze a conjoint data set and correct for measurement error — projoint_level","text":"","code":"projoint_level( .data, .qoi = NULL, .structure = \"profile_level\", .estimand = \"mm\", .se_method = \"analytical\", .irr = NULL, .remove_ties = TRUE, .ignore_position = NULL, .n_sims = NULL, .n_boot = NULL, .weights_1 = NULL, .clusters_1 = NULL, .se_type_1 = \"classical\", .weights_2 = NULL, .clusters_2 = NULL, .se_type_2 = \"classical\" )"},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_level.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analyze a conjoint data set and correct for measurement error — projoint_level","text":".data projoint_data object .qoi projoint_qoi object. NULL, defaults producing MMs AMCEs. .structure Either \"profile_level\" (default) \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .se_method default, c(\"analytic\", \"simulation\", \"bootstrap\") description .irr NULL (default) IRR calculated using repeated task. Otherwise, numerical value .remove_ties Logical: ties removed estimation? Defaults TRUE. .ignore_position TRUE (default) ignore location profile (left right). Relevant analyzed choice level .n_sims number simulations. Relevant .se_method == \"simulation\" .n_boot number bootstrapped samples. Relevant .se_method == \"bootstrap\" .weights_1 weight estimate IRR (see lm_robust): NULL (default) .clusters_1 clusters estimate IRR (see lm_robust): NULL (default) .se_type_1 standard error type estimate IRR (see lm_robust): \"classical\" (default) .weights_2 weight estimate MM AMCE (see lm_robust): NULL (default) .clusters_2 clusters estimate MM AMCE (see lm_robust): NULL (default) .se_type_2 standard error type estimate MM AMCE (see lm_robust): \"classical\" (default)","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_level.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Analyze a conjoint data set and correct for measurement error — projoint_level","text":"projoint_results object","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_qoi-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class generator for projoint_qoi — projoint_qoi-class","title":"Class generator for projoint_qoi — projoint_qoi-class","text":"Class generator projoint_qoi","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_qoi-class.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Class generator for projoint_qoi — projoint_qoi-class","text":"slots Takes four MMs eight AMCEs","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_results-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class generators for projoint_results — projoint_results-class","title":"Class generators for projoint_results — projoint_results-class","text":"Class generators projoint_results","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_results-class.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Class generators for projoint_results — projoint_results-class","text":"slots Takes 16 slots. See documentation projoint. contains Inherits slots projoint_data","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_tau-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class generator for projoint_tau objects — projoint_tau-class","title":"Class generator for projoint_tau objects — projoint_tau-class","text":"Class generator projoint_tau objects","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/projoint_tau-class.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Class generator for projoint_tau objects — projoint_tau-class","text":"slots Takes two slots: irr figure contains Inherits slots projoint_data","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":"Read re-format Qualtrics csv (choice text)","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":"","code":"read_Qualtrics(.file)"},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":".file file name corresponding csv downloaded Qualtrics.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":"data frame suitable reshape_projoint","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_Qualtrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Read and re-format a Qualtrics csv (choice text) — read_Qualtrics","text":"","code":"library(projoint) # Not run: # dat <- read_Qualtrics(\"mummolo_nall_replication_cleaned.csv\") # head(dat)"},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":null,"dir":"Reference","previous_headings":"","what":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":"users interested reordering attributes levels conjoint data set. First save existing order CSV using save_labels, manually reorder CSV. Finally, use function read modified CSV automatically apply new order existing projoint_data.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":"","code":"read_labels(.data, .filename)"},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":".data `projoint_data` object .filename name revised CSV file, originally derived save_labels, manual arrangement","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":"projoint object class projoint_data ready pass projoint.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/read_labels.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Reads in a CSV of reordered attributes and levels, and applies it to a projoint_data object. — read_labels","text":"","code":"library(projoint) library(readr) data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … # Write outcome column names outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") # Reshape the data reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) # Save a CSV file (Not Run) # save_labels(reshaped_data, \"data-raw/labels_original.csv\") # Not Run: Read a revised CSV file # reshaped_data_arranged <- read_labels(reshaped_data, \"data-raw/labels_arranged.csv\")"},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":null,"dir":"Reference","previous_headings":"","what":"Reshapes survey response data for conjoint analysis — reshape_projoint","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":"function takes data frame, preferably read_Qualtrics, reshapes wide long row distinct conjoint task rather respondent.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":"","code":"reshape_projoint( .dataframe, .idvar, .outcomes, .outcomes_ids = c(\"1\", \"2\"), .alphabet = \"F\", .repeated = FALSE, .flipped = NULL, .covariates = NULL, .fill = FALSE )"},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":".dataframe data frame, preferably read_Qualtrics .idvar character identifying column name containing respondent IDs .outcomes character vector identifying column names contain outcomes. repeated task, LAST element vector. .outcomes_ids vector identifying possibilities outcome variables -- e.g., c(\"Candidate \", \"Candidate B\") .alphabet letter indicating conjoint attributes. using Strezhnev's package (https://github.com/astrezhnev/conjointsdt) Qualtrics, default F. .repeated TRUE repeated task (recommended). repeated task first task. .flipped TRUE profiles repeated task flipped (recommended) .covariates character vector identifying respondents' covariates used subgroup analysis .fill logical vector: TRUE want use information whether respondent chose profile repeated task \"fill\" (using `tidyr` package) missing values non-repeated tasks, FALSE (otherwise). number respondents small, number specific profile pairs interest small, /number specific respondent subgroups want study small, worth changing option TRUE. please note `.fill = TRUE` based assumption IRR independent information contained conjoint tables. Although empirical tests suggest validity assumption, unsure , better use default value (FALSE).","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":"projoint object class `projoint_data` ready pass `projoint()`. projoint object class projoint_data ready pass projoint.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/reshape_projoint.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Reshapes survey response data for conjoint analysis — reshape_projoint","text":"","code":"library(projoint) library(stringr) data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … # Write outcome column names outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") # Reshape the data reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE, .fill = FALSE)"},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":null,"dir":"Reference","previous_headings":"","what":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":"function saves labels attributes levels, generated reshape_projoint, CSV file. important step reorganizing labels.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":"","code":"save_labels(.data, .filename)"},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":".data projoint_data object .filename name CSV file saved","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":"None","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/save_labels.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Save the attributes and levels, and their order, from a conjoint data set, to a CSV file. — save_labels","text":"","code":"library(projoint) library(readr) data(\"exampleData1\") head(exampleData1) #> # A tibble: 6 × 185 #> ResponseId choice1_repeated_fli…¹ choice1 choice2 choice3 choice4 choice5 #> #> 1 R_1M3TDihZzq9z… Community B Commun… Commun… Commun… Commun… Commun… #> 2 R_3HtXzkcSSlfi… Community B Commun… Commun… Commun… Commun… Commun… #> 3 R_yjYj0jtOY98X… Community B Commun… Commun… Commun… Commun… Commun… #> 4 R_1dKd05O6FTOV… Community B Commun… Commun… Commun… Commun… Commun… #> 5 R_1otDp642wWYl… Community A Commun… Commun… Commun… Commun… Commun… #> 6 R_2BnD3fuJMRKZ… Community A Commun… Commun… Commun… Commun… Commun… #> # ℹ abbreviated name: ¹​choice1_repeated_flipped #> # ℹ 178 more variables: choice6 , choice7 , choice8 , #> # race , party_1 , party_2 , party_3 , party_4 , #> # ideology , honesty , `K-1-1` , `K-1-1-1` , #> # `K-1-2` , `K-1-1-2` , `K-1-3` , `K-1-1-3` , #> # `K-1-4` , `K-1-1-4` , `K-1-5` , `K-1-1-5` , #> # `K-1-6` , `K-1-1-6` , `K-1-7` , `K-1-1-7` , … # Write outcome column names outcomes <- paste0(\"choice\", seq(from = 1, to = 8, by = 1)) outcomes <- c(outcomes, \"choice1_repeated_flipped\") # Reshape the data reshaped_data <- reshape_projoint( .dataframe = exampleData1, .idvar = \"ResponseId\", .outcomes = outcomes, .outcomes_ids = c(\"A\", \"B\"), .alphabet = \"K\", .repeated = TRUE, .flipped = TRUE) # Not Run: Save a CSV file # save_labels(reshaped_data, \"data-raw/labels_original.csv\")"},{"path":"https://yhoriuchi.github.io/projoint/reference/set_qoi.html","id":null,"dir":"Reference","previous_headings":"","what":"Set the quantities of interest — set_qoi","title":"Set the quantities of interest — set_qoi","text":"function allows users specify fine-tuned details conjoint analysis. particular, users can set specific quantities interest aside simple AMCEs MMs.","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/set_qoi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set the quantities of interest — set_qoi","text":"","code":"set_qoi( .structure = \"profile_level\", .estimand = \"mm\", .att_choose, .lev_choose, .att_notchoose = NULL, .lev_notchoose = NULL, .att_choose_b = NULL, .lev_choose_b = NULL, .att_notchoose_b = NULL, .lev_notchoose_b = NULL )"},{"path":"https://yhoriuchi.github.io/projoint/reference/set_qoi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set the quantities of interest — set_qoi","text":".structure Either \"profile_level\" \"choice_level\" .estimand Either \"mm\" marginal mean \"amce\" average marginal component effect .att_choose character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). .lev_choose character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). argument specified .structure argument \"choice-level\". .lev_notchoose character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis. argument specified .structure argument \"choice-level\". .att_choose_b [baseline AMCE] character column name identifying attribute interest (.e., attribute-level attribute-levels chosen). .lev_choose_b [baseline AMCE] character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis .att_notchoose_b [baseline AMCE] character column name identifying attribute interest (.e., attribute-level attribute-levels chosen*). argument specified .structure argument \"choice-level\". .lev_notchoose_b [baseline AMCE] character vector identifying level levels interest (.e., attribute-level attribute-levels chosen). length 1 profile-level analysis 1+ choice-level analysis. argument specified .structure argument \"choice-level\".","code":""},{"path":"https://yhoriuchi.github.io/projoint/reference/set_qoi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set the quantities of interest — set_qoi","text":"projoint_qoi object","code":""},{"path":"https://yhoriuchi.github.io/projoint/news/index.html","id":"projoint-development-version","dir":"Changelog","previous_headings":"","what":"projoint (development version)","title":"projoint (development version)","text":"written","code":""}]