Partworth Utilities Analysis by Condition and Attributes

Author

Jamie C. Lee

Published

April 7, 2026

Overview

This analysis examines mean Partworth Utilities across different conditions and grouping variables. The analysis includes:

  • By Condition: Separate analyses for conditions 1 (low range), 2 (high range), and 3 (full range)
  • By Rank of First (and Only) Review: Grouped by what rank (1-5) was given to the attribute, first (and only) review
  • By Importance Ratings: Grouped based on imp_firstreview (values ranging from 1: Not at all important to 7: Extremely important); in other words, whether the attribute, first (and only) review, was reported to be relatively important (>4) or relatively unimportant (=<4) to the participant.

Data Notes

  • Condition 1 (Low Range): No data for one_s and two_s
  • Condition 2 (High Range): No data for three_s and four_s

Analysis 1: Mean Utilities by Condition Only

Show code
# Define the utility fields
utility_fields <- c("one_s", "two_s", "three_s", "four_s", "five_s")
low_fields <- c("one_s", "two_s", "three_s")
high_fields <- c("three_s", "four_s", "five_s")

# Calculate means by condition
# Condition 1 uses low_fields, Condition 2 uses high_fields, Condition 3 uses all fields
condition1_means <- df_prolific_pd_utilities_combined %>%
  filter(condition == 1) %>%
  summarise(
    condition = 1,
    across(all_of(low_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

condition2_means <- df_prolific_pd_utilities_combined %>%
  filter(condition == 2) %>%
  summarise(
    condition = 2,
    across(all_of(high_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

condition3_means <- df_prolific_pd_utilities_combined %>%
  filter(condition == 3) %>%
  summarise(
    condition = 3,
    across(all_of(utility_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

means_by_condition <- bind_rows(condition1_means, condition2_means, condition3_means)

kable(means_by_condition, digits = 4, caption = "Mean Utilities by Condition")
Mean Utilities by Condition
condition one_s_mean one_s_sd one_s_n two_s_mean two_s_sd two_s_n three_s_mean three_s_sd three_s_n four_s_mean four_s_sd four_s_n five_s_mean five_s_sd five_s_n
1 -3.1163 2.0124 599 0.1476 0.3109 599 2.9687 2.0442 599 NA NA NA NA NA NA
2 NA NA NA NA NA NA -2.4915 1.4763 617 0.3764 0.4274 617 2.1151 1.2790 617
3 -5.3482 2.8796 590 -2.6343 1.4627 590 0.4785 0.4373 590 2.9011 1.5847 590 4.6030 2.6896 590

Differences Between Adjacent Utility Levels

Show code
# Calculate differences between adjacent utility levels
# Condition 1 uses low_fields differences
condition1_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 1) %>%
  summarise(
    condition = 1,
    diff_12 = mean(two_s - one_s, na.rm = TRUE),
    diff_23 = mean(three_s - two_s, na.rm = TRUE)
  )

# Condition 2 uses high_fields differences
condition2_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 2) %>%
  summarise(
    condition = 2,
    diff_34 = mean(four_s - three_s, na.rm = TRUE),
    diff_45 = mean(five_s - four_s, na.rm = TRUE)
  )

# Condition 3 uses all differences
condition3_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 3) %>%
  summarise(
    condition = 3,
    diff_12 = mean(two_s - one_s, na.rm = TRUE),
    diff_23 = mean(three_s - two_s, na.rm = TRUE),
    diff_34 = mean(four_s - three_s, na.rm = TRUE),
    diff_45 = mean(five_s - four_s, na.rm = TRUE)
  )

diffs_by_condition <- bind_rows(condition1_diffs, condition2_diffs, condition3_diffs)

kable(diffs_by_condition, digits = 4, caption = "Mean Differences Between Adjacent Utility Levels by Condition")
Mean Differences Between Adjacent Utility Levels by Condition
condition diff_12 diff_23 diff_34 diff_45
1 3.2639 2.8211 NA NA
2 NA NA 2.8679 1.7387
3 2.7139 3.1128 2.4226 1.7019

Analysis 2: Mean Utilities by Condition and Rank of First Review

Condition 1 - Split by Rank of First Review

Show code
condition1_rank <- df_prolific_pd_utilities_combined %>%
  filter(condition == 1) %>%
  group_by(rank_firstreview) %>%
  summarise(
    across(all_of(low_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition1_rank, digits = 4, 
      caption = "Condition 1: Mean Utilities by Rank of First Review")
Condition 1: Mean Utilities by Rank of First Review
rank_firstreview one_s_mean one_s_sd one_s_n two_s_mean two_s_sd two_s_n three_s_mean three_s_sd three_s_n
1 -4.9959 1.2980 136 0.0981 0.2793 136 4.8978 1.3462 136
2 -3.8803 1.6872 94 0.1783 0.3215 94 3.7019 1.7068 94
3 -3.0794 1.6376 86 0.1238 0.3258 86 2.9556 1.6709 86
4 -2.5477 1.5232 73 0.1901 0.3303 73 2.3576 1.5351 73
5 -1.7698 1.6869 210 0.1608 0.3104 210 1.6090 1.7000 210

Differences Between Adjacent Utility Levels

Show code
condition1_rank_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 1) %>%
  group_by(rank_firstreview) %>%
  summarise(
    diff_12 = mean(two_s - one_s, na.rm = TRUE),
    diff_23 = mean(three_s - two_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition1_rank_diffs, digits = 4, 
      caption = "Condition 1: Mean Differences by Rank First Review")
Condition 1: Mean Differences by Rank First Review
rank_firstreview diff_12 diff_23
1 5.0940 4.7997
2 4.0586 3.5236
3 3.2032 2.8318
4 2.7378 2.1675
5 1.9306 1.4482

Condition 2 - Split by Rank of First Review

Show code
condition2_rank <- df_prolific_pd_utilities_combined %>%
  filter(condition == 2) %>%
  group_by(rank_firstreview) %>%
  summarise(
    across(all_of(high_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition2_rank, digits = 4, 
      caption = "Condition 2: Mean Utilities by Rank of First Review")
Condition 2: Mean Utilities by Rank of First Review
rank_firstreview three_s_mean three_s_sd three_s_n four_s_mean four_s_sd four_s_n five_s_mean five_s_sd five_s_n
1 -4.0727 0.7895 88 0.5008 0.3579 88 3.5718 0.7621 88
2 -3.2930 0.9729 74 0.5343 0.3544 74 2.7587 0.8894 74
3 -2.9447 1.1927 95 0.5162 0.3730 95 2.4285 1.0567 95
4 -2.2919 1.3223 113 0.3456 0.4585 113 1.9463 1.1286 113
5 -1.6050 1.2816 247 0.2451 0.4331 247 1.3599 1.0688 247

Differences Between Adjacent Utility Levels

Show code
condition2_rank_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 2) %>%
  group_by(rank_firstreview) %>%
  summarise(
    diff_34 = mean(four_s - three_s, na.rm = TRUE),
    diff_45 = mean(five_s - four_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition2_rank_diffs, digits = 4, 
      caption = "Condition 2: Mean Differences by Rank First Review")
Condition 2: Mean Differences by Rank First Review
rank_firstreview diff_34 diff_45
1 4.5735 3.0710
2 3.8273 2.2244
3 3.4609 1.9123
4 2.6374 1.6007
5 1.8501 1.1148

Condition 3 - Split by Rank of First Review

Show code
condition3_rank <- df_prolific_pd_utilities_combined %>%
  filter(condition == 3) %>%
  group_by(rank_firstreview) %>%
  summarise(
    across(all_of(utility_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition3_rank, digits = 4, 
      caption = "Condition 3: Mean Utilities by Rank of First Review")
Condition 3: Mean Utilities by Rank of First Review
rank_firstreview one_s_mean one_s_sd one_s_n two_s_mean two_s_sd two_s_n three_s_mean three_s_sd three_s_n four_s_mean four_s_sd four_s_n five_s_mean five_s_sd five_s_n
1 -7.5785 2.1140 160 -3.7222 1.1009 160 0.4715 0.3742 160 4.1145 1.1790 160 6.7147 1.9838 160
2 -6.2307 2.2126 102 -3.0812 1.1837 102 0.4922 0.4352 102 3.3867 1.3281 102 5.4330 2.0037 102
3 -5.2749 2.2195 87 -2.6390 1.1610 87 0.6022 0.4303 87 2.8481 1.2157 87 4.4636 2.1937 87
4 -4.2369 2.4410 75 -2.1117 1.3448 75 0.5358 0.4566 75 2.2974 1.3358 75 3.5154 2.3527 75
5 -3.1968 2.5556 166 -1.5450 1.2283 166 0.3861 0.4726 166 1.7336 1.3651 166 2.6220 2.3102 166

Differences Between Adjacent Utility Levels

Show code
condition3_rank_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 3) %>%
  group_by(rank_firstreview) %>%
  summarise(
    diff_12 = mean(two_s - one_s, na.rm = TRUE),
    diff_23 = mean(three_s - two_s, na.rm = TRUE),
    diff_34 = mean(four_s - three_s, na.rm = TRUE),
    diff_45 = mean(five_s - four_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition3_rank_diffs, digits = 4, 
      caption = "Condition 3: Mean Differences by Rank First Review")
Condition 3: Mean Differences by Rank First Review
rank_firstreview diff_12 diff_23 diff_34 diff_45
1 3.8564 4.1937 3.6429 2.6002
2 3.1495 3.5734 2.8945 2.0463
3 2.6360 3.2411 2.2460 1.6155
4 2.1253 2.6474 1.7617 1.2180
5 1.6518 1.9311 1.3475 0.8884

Analysis 3: Mean Utilities by Condition and Importance Rating

Condition 1 - Split by Importance Rating of First (and Only) Review

Show code
condition1_importance <- df_prolific_pd_utilities_combined %>%
  filter(condition == 1) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "imp_firstreview > 4",
    imp_firstreview <= 4 ~ "imp_firstreview <= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(importance_group) %>%
  summarise(
    across(all_of(low_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition1_importance, digits = 4, 
      caption = "Condition 1: Mean Utilities by Importance Rating")
Condition 1: Mean Utilities by Importance Rating
importance_group one_s_mean one_s_sd one_s_n two_s_mean two_s_sd two_s_n three_s_mean three_s_sd three_s_n
imp_firstreview <= 4 -1.9977 1.6291 285 0.1554 0.3260 285 1.8424 1.6570 285
imp_firstreview > 4 -4.1315 1.7765 314 0.1405 0.2968 314 3.9910 1.8134 314

Differences Between Adjacent Utility Levels

Show code
condition1_importance_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 1) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "imp_firstreview > 4",
    imp_firstreview <= 4 ~ "imp_firstreview <= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(importance_group) %>%
  summarise(
    diff_12 = mean(two_s - one_s, na.rm = TRUE),
    diff_23 = mean(three_s - two_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition1_importance_diffs, digits = 4, 
      caption = "Condition 1: Mean Differences by Importance Rating")
Condition 1: Mean Differences by Importance Rating
importance_group diff_12 diff_23
imp_firstreview <= 4 2.1531 1.6870
imp_firstreview > 4 4.2721 3.8505

Condition 2 - Split by Importance Rating of First (and Only) Review

Show code
condition2_importance <- df_prolific_pd_utilities_combined %>%
  filter(condition == 2) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "imp_firstreview > 4",
    imp_firstreview <= 4 ~ "imp_firstreview <= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(importance_group) %>%
  summarise(
    across(all_of(high_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition2_importance, digits = 4, 
      caption = "Condition 2: Mean Utilities by Importance Rating")
Condition 2: Mean Utilities by Importance Rating
importance_group three_s_mean three_s_sd three_s_n four_s_mean four_s_sd four_s_n five_s_mean five_s_sd five_s_n
imp_firstreview <= 4 -1.7774 1.2602 309 0.2859 0.4374 309 1.4916 1.0615 309
imp_firstreview > 4 -3.2078 1.3237 308 0.4672 0.3976 308 2.7406 1.1697 308

Differences Between Adjacent Utility Levels

Show code
condition2_importance_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 2) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "imp_firstreview > 4",
    imp_firstreview <= 4 ~ "imp_firstreview <= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(importance_group) %>%
  summarise(
    diff_34 = mean(four_s - three_s, na.rm = TRUE),
    diff_45 = mean(five_s - four_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition2_importance_diffs, digits = 4, 
      caption = "Condition 2: Mean Differences by Importance Rating")
Condition 2: Mean Differences by Importance Rating
importance_group diff_34 diff_45
imp_firstreview <= 4 2.0633 1.2057
imp_firstreview > 4 3.6751 2.2734

Condition 3 - Split by Importance Rating of First (and Only) Review

Show code
condition3_importance <- df_prolific_pd_utilities_combined %>%
  filter(condition == 3) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "imp_firstreview > 4",
    imp_firstreview <= 4 ~ "imp_firstreview <= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(importance_group) %>%
  summarise(
    across(all_of(utility_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                sd = ~sd(., na.rm = TRUE),
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition3_importance, digits = 4, 
      caption = "Condition 3: Mean Utilities by Importance Rating")
Condition 3: Mean Utilities by Importance Rating
importance_group one_s_mean one_s_sd one_s_n two_s_mean two_s_sd two_s_n three_s_mean three_s_sd three_s_n four_s_mean four_s_sd four_s_n five_s_mean five_s_sd five_s_n
imp_firstreview <= 4 -3.4857 2.4788 237 -1.7277 1.2823 237 0.4344 0.4600 237 1.8884 1.3530 237 2.8905 2.2863 237
imp_firstreview > 4 -6.5987 2.4190 353 -3.2431 1.2459 353 0.5081 0.4193 353 3.5810 1.3494 353 5.7527 2.3022 353

Differences Between Adjacent Utility Levels

Show code
condition3_importance_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 3) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "imp_firstreview > 4",
    imp_firstreview <= 4 ~ "imp_firstreview <= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(importance_group) %>%
  summarise(
    diff_12 = mean(two_s - one_s, na.rm = TRUE),
    diff_23 = mean(three_s - two_s, na.rm = TRUE),
    diff_34 = mean(four_s - three_s, na.rm = TRUE),
    diff_45 = mean(five_s - four_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition3_importance_diffs, digits = 4, 
      caption = "Condition 3: Mean Differences by Importance Rating")
Condition 3: Mean Differences by Importance Rating
importance_group diff_12 diff_23 diff_34 diff_45
imp_firstreview <= 4 1.7580 2.1621 1.4540 1.0021
imp_firstreview > 4 3.3556 3.7512 3.0729 2.1718

Analysis 4: Combined Analysis by Condition, Rank of First Review, and Importance Rating

This section provides cross-tabulated analyses combining both rank of first review and importance rating groups.

Condition 1 - Rank of First Review × Importance

Show code
condition1_cross <- df_prolific_pd_utilities_combined %>%
  filter(condition == 1) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "> 4",
    imp_firstreview <= 4 ~ "<= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(rank_firstreview, importance_group) %>%
  summarise(
    across(all_of(low_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition1_cross, digits = 4, 
      caption = "Condition 1: Mean Utilities by Rank of First Review and Importance Rating")
Condition 1: Mean Utilities by Rank of First Review and Importance Rating
rank_firstreview importance_group one_s_mean one_s_n two_s_mean two_s_n three_s_mean three_s_n
1 <= 4 -4.4914 10 0.0975 10 4.3939 10
1 > 4 -5.0360 126 0.0981 126 4.9378 126
2 <= 4 -3.5366 13 0.2279 13 3.3087 13
2 > 4 -3.9354 81 0.1704 81 3.7651 81
3 <= 4 -2.6464 36 0.0869 36 2.5595 36
3 > 4 -3.3911 50 0.1504 50 3.2408 50
4 <= 4 -2.2352 44 0.2171 44 2.0181 44
4 > 4 -3.0219 29 0.1492 29 2.8727 29
5 <= 4 -1.5651 182 0.1520 182 1.4131 182
5 > 4 -3.1002 28 0.2182 28 2.8820 28

Differences Between Adjacent Utility Levels

Show code
condition1_cross_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 1) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "> 4",
    imp_firstreview <= 4 ~ "<= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(rank_firstreview, importance_group) %>%
  summarise(
    diff_12 = mean(two_s - one_s, na.rm = TRUE),
    diff_23 = mean(three_s - two_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition1_cross_diffs, digits = 4, 
      caption = "Condition 1: Mean Differences by Rank First Review and Importance Rating")
Condition 1: Mean Differences by Rank First Review and Importance Rating
rank_firstreview importance_group diff_12 diff_23
1 <= 4 4.5890 4.2964
1 > 4 5.1341 4.8397
2 <= 4 3.7644 3.0808
2 > 4 4.1058 3.5947
3 <= 4 2.7333 2.4726
3 > 4 3.5415 3.0904
4 <= 4 2.4523 1.8010
4 > 4 3.1711 2.7235
5 <= 4 1.7171 1.2611
5 > 4 3.3185 2.6638

Condition 2 - Rank of First Review × Importance

Show code
condition2_cross <- df_prolific_pd_utilities_combined %>%
  filter(condition == 2) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "> 4",
    imp_firstreview <= 4 ~ "<= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(rank_firstreview, importance_group) %>%
  summarise(
    across(all_of(high_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition2_cross, digits = 4, 
      caption = "Condition 2: Mean Utilities by Rank of First Review and Importance Rating")
Condition 2: Mean Utilities by Rank of First Review and Importance Rating
rank_firstreview importance_group three_s_mean three_s_n four_s_mean four_s_n five_s_mean five_s_n
1 <= 4 -3.9162 2 0.5701 2 3.3461 2
1 > 4 -4.0763 86 0.4992 86 3.5771 86
2 <= 4 -2.2464 9 0.3434 9 1.9031 9
2 > 4 -3.4379 65 0.5607 65 2.8772 65
3 <= 4 -2.7845 36 0.4534 36 2.3311 36
3 > 4 -3.0424 59 0.5545 59 2.4879 59
4 <= 4 -1.9661 60 0.3082 60 1.6579 60
4 > 4 -2.6607 53 0.3879 53 2.2728 53
5 <= 4 -1.4998 202 0.2440 202 1.2558 202
5 > 4 -2.0771 45 0.2502 45 1.8270 45

Differences Between Adjacent Utility Levels

Show code
condition2_cross_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 2) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "> 4",
    imp_firstreview <= 4 ~ "<= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(rank_firstreview, importance_group) %>%
  summarise(
    diff_34 = mean(four_s - three_s, na.rm = TRUE),
    diff_45 = mean(five_s - four_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition2_cross_diffs, digits = 4, 
      caption = "Condition 2: Mean Differences by Rank First Review and Importance Rating")
Condition 2: Mean Differences by Rank First Review and Importance Rating
rank_firstreview importance_group diff_34 diff_45
1 <= 4 4.4863 2.7760
1 > 4 4.5755 3.0778
2 <= 4 2.5898 1.5597
2 > 4 3.9986 2.3164
3 <= 4 3.2379 1.8777
3 > 4 3.5969 1.9334
4 <= 4 2.2743 1.3497
4 > 4 3.0485 1.8850
5 <= 4 1.7438 1.0118
5 > 4 2.3273 1.5768

Condition 3 - Rank of First Review × Importance

Show code
condition3_cross <- df_prolific_pd_utilities_combined %>%
  filter(condition == 3) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "> 4",
    imp_firstreview <= 4 ~ "<= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(rank_firstreview, importance_group) %>%
  summarise(
    across(all_of(utility_fields), 
           list(mean = ~mean(., na.rm = TRUE), 
                n = ~sum(!is.na(.))),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )

kable(condition3_cross, digits = 4, 
      caption = "Condition 3: Mean Utilities by Rank of First Review and Importance Rating")
Condition 3: Mean Utilities by Rank of First Review and Importance Rating
rank_firstreview importance_group one_s_mean one_s_n two_s_mean two_s_n three_s_mean three_s_n four_s_mean four_s_n five_s_mean five_s_n
1 <= 4 -7.1664 5 -3.2460 5 0.3279 5 3.4888 5 6.5958 5
1 > 4 -7.5918 155 -3.7375 155 0.4762 155 4.1346 155 6.7185 155
2 <= 4 -5.4105 13 -2.6581 13 0.5205 13 2.9007 13 4.6473 13
2 > 4 -6.3505 89 -3.1430 89 0.4881 89 3.4577 89 5.5478 89
3 <= 4 -4.1813 33 -2.1625 33 0.6348 33 2.2150 33 3.4940 33
3 > 4 -5.9433 54 -2.9302 54 0.5822 54 3.2351 54 5.0562 54
4 <= 4 -3.7155 49 -1.8626 49 0.4593 49 2.0518 49 3.0669 49
4 > 4 -5.2196 26 -2.5811 26 0.6798 26 2.7603 26 4.3606 26
5 <= 4 -2.9190 137 -1.4310 137 0.3730 137 1.5969 137 2.3801 137
5 > 4 -4.5091 29 -2.0834 29 0.4482 29 2.3797 29 3.7646 29

Differences Between Adjacent Utility Levels

Show code
condition3_cross_diffs <- df_prolific_pd_utilities_combined %>%
  filter(condition == 3) %>%
  mutate(importance_group = case_when(
    imp_firstreview > 4 ~ "> 4",
    imp_firstreview <= 4 ~ "<= 4",
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(importance_group)) %>%
  group_by(rank_firstreview, importance_group) %>%
  summarise(
    diff_12 = mean(two_s - one_s, na.rm = TRUE),
    diff_23 = mean(three_s - two_s, na.rm = TRUE),
    diff_34 = mean(four_s - three_s, na.rm = TRUE),
    diff_45 = mean(five_s - four_s, na.rm = TRUE),
    .groups = 'drop'
  )

kable(condition3_cross_diffs, digits = 4, 
      caption = "Condition 3: Mean Differences by Rank First Review and Importance Rating")
Condition 3: Mean Differences by Rank First Review and Importance Rating
rank_firstreview importance_group diff_12 diff_23 diff_34 diff_45
1 <= 4 3.9204 3.5740 3.1608 3.1071
1 > 4 3.8543 4.2137 3.6585 2.5839
2 <= 4 2.7524 3.1786 2.3802 1.7465
2 > 4 3.2075 3.6311 2.9696 2.0901
3 <= 4 2.0188 2.7972 1.5802 1.2790
3 > 4 3.0131 3.5124 2.6528 1.8211
4 <= 4 1.8530 2.3219 1.5925 1.0151
4 > 4 2.6385 3.2609 2.0804 1.6003
5 <= 4 1.4880 1.8040 1.2239 0.7833
5 > 4 2.4257 2.5316 1.9315 1.3849

Summary Statistics by Condition

Show code
summary_stats <- df_prolific_pd_utilities_combined %>%
  group_by(condition) %>%
  summarise(
    n = n(),
    across(all_of(utility_fields), 
           list(mean = ~mean(., na.rm = TRUE),
                min = ~min(., na.rm = TRUE),
                max = ~max(., na.rm = TRUE)),
           .names = "{.col}_{.fn}"),
    .groups = 'drop'
  )
Warning: There were 8 warnings in `summarise()`.
The first warning was:
ℹ In argument: `across(...)`.
ℹ In group 2: `condition = 2`.
Caused by warning in `min()`:
! no non-missing arguments to min; returning Inf
ℹ Run `dplyr::last_dplyr_warnings()` to see the 7 remaining warnings.
Show code
kable(summary_stats, digits = 4, caption = "Summary Statistics by Condition")
Summary Statistics by Condition
condition n one_s_mean one_s_min one_s_max two_s_mean two_s_min two_s_max three_s_mean three_s_min three_s_max four_s_mean four_s_min four_s_max five_s_mean five_s_min five_s_max
1 599 -3.1163 -7.5131 1.1931 0.1476 -0.9016 1.1459 2.9687 -1.1226 7.4804 NaN Inf -Inf NaN Inf -Inf
2 617 NaN Inf -Inf NaN Inf -Inf -2.4915 -5.3335 1.2198 0.3764 -1.0327 1.5860 2.1151 -0.8988 4.9603
3 590 -5.3482 -11.8861 1.9078 -2.6343 -5.5295 0.5574 0.4785 -0.7794 1.6906 2.9011 -0.9696 6.2079 4.6030 -1.2945 10.8030