Setup

library(pacman); p_load(ggthemr, ggplot2, scales)

ggthemr("dust")

Rationale

Killingsworth (2021) used a logged axis where income doubled between each tick to support the conclusion that happiness and wellbeing are linearly related to log income.

The use of a continuous axis shows that the relationship is actually nonlinear in his data. I have replotted this data to show this. I have also added confidence intervals to showcase the uncertainty in the data. There is some truth to the idea that happiness is linear with respect to log income, but that implies linearity only with respect to unrealistic exponentially growing income levels.

Analysis

# Reproducing the log plot

ggplot(data, aes(x = log(DataframeX), y = Z, color = Outcome)) +
  geom_point(size = 2) +
  geom_line(linewidth = 1) +
  labs(
    x = "Log Income",
    y = "Z-score",
    title = "Happiness and Wellbeing vs. Logged Income") +
  scale_x_continuous(labels = trans_format("exp", dollar_format())) +
  scale_y_continuous(breaks = c(-.2, 0, .2, .4)) +
  theme(plot.title = element_text(hjust = .5),
        legend.background = element_blank(),
        legend.position = c(.11, .91),
        legend.title = element_blank()) +
  scale_colour_manual(aesthetics = "color",
                      labels = c("Experienced Wellbeing",
                                 "Life Satisfaction"),
                      values = c("orangered",
                                 "steelblue"))

ggplot(data, aes(x = log(DataframeX), y = Z, color = Outcome)) +
  geom_point(size = 2) +
  geom_line(linewidth = 1) +
  geom_errorbar(aes(ymin = LCI, ymax = UCI)) +
  labs(
    x = "Log Income",
    y = "Z-score",
    title = "Happiness and Wellbeing vs. Logged Income") +
  scale_x_continuous(labels = trans_format("exp", dollar_format())) +
  scale_y_continuous(breaks = c(-.2, 0, .2, .4)) +
  theme(plot.title = element_text(hjust = .5),
        legend.background = element_blank(),
        legend.position = c(.11, .91),
        legend.title = element_blank()) +
  scale_colour_manual(aesthetics = "color",
                      #name = "Measure", 
                      labels = c("Experienced Wellbeing",
                                 "Life Satisfaction"),
                      values = c("orangered",
                                 "steelblue"))

#Removing the log scale

ggplot(data, aes(x = DataframeX, y = Z, color = Outcome)) +
  geom_point(size = 2) +
  geom_line(linewidth = 1) +
  labs(
    x = "Linear Income",
    y = "Z-score",
    title = "Happiness and Wellbeing vs. Linear Income") +
  scale_x_continuous(labels = scales::dollar_format()) +
  scale_y_continuous(breaks = c(-.2, 0, .2, .4)) +
  theme(plot.title = element_text(hjust = .5),
        legend.background = element_blank(),
        legend.position = c(.11, .91),
        legend.title = element_blank()) +
  scale_colour_manual(aesthetics = "color",
                      labels = c("Experienced Wellbeing",
                                 "Life Satisfaction"),
                      values = c("orangered",
                                 "steelblue"))

ggplot(data, aes(x = DataframeX, y = Z, color = Outcome)) +
  geom_point(size = 2) +
  geom_line(linewidth = 1) +
  geom_errorbar(aes(ymin = LCI, ymax = UCI)) +
  labs(
    x = "Linear Income",
    y = "Z-score",
    title = "Happiness and Wellbeing vs. Linear Income") +
  scale_x_continuous(labels = scales::dollar_format()) +
  scale_y_continuous(breaks = c(-.2, 0, .2, .4)) +
  theme(plot.title = element_text(hjust = .5),
        legend.background = element_blank(),
        legend.position = c(.11, .91),
        legend.title = element_blank()) +
  scale_colour_manual(aesthetics = "color",
                      #name = "Measure", 
                      labels = c("Experienced Wellbeing",
                                 "Life Satisfaction"),
                      values = c("orangered",
                                 "steelblue"))

References

Killingsworth, M. A. (2021). Experienced well-being rises with income, even above $75,000 per year. Proceedings of the National Academy of Sciences, 118(4). https://doi.org/10.1073/pnas.2016976118

Data

https://osf.io/nguwz/, https://archive.ph/iKHlp, https://web.archive.org/web/20230208174832/https://osf.io/nguwz/

sessionInfo()
## R version 4.2.1 (2022-06-23 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19044)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=English_United States.utf8 
## [2] LC_CTYPE=English_United States.utf8   
## [3] LC_MONETARY=English_United States.utf8
## [4] LC_NUMERIC=C                          
## [5] LC_TIME=English_United States.utf8    
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] scales_1.2.1  ggthemr_1.1.0 ggplot2_3.4.0 pacman_0.5.1 
## 
## loaded via a namespace (and not attached):
##  [1] highr_0.9        bslib_0.4.0      compiler_4.2.1   pillar_1.8.1    
##  [5] jquerylib_0.1.4  tools_4.2.1      digest_0.6.29    jsonlite_1.8.2  
##  [9] evaluate_0.17    lifecycle_1.0.3  tibble_3.1.8     gtable_0.3.1    
## [13] pkgconfig_2.0.3  rlang_1.0.6      DBI_1.1.3        cli_3.4.1       
## [17] rstudioapi_0.14  yaml_2.3.5       xfun_0.33        fastmap_1.1.0   
## [21] withr_2.5.0      stringr_1.4.1    dplyr_1.0.10     knitr_1.40      
## [25] generics_0.1.3   sass_0.4.2       vctrs_0.5.2      tidyselect_1.2.0
## [29] grid_4.2.1       glue_1.6.2       R6_2.5.1         fansi_1.0.3     
## [33] rmarkdown_2.17   farver_2.1.1     magrittr_2.0.3   htmltools_0.5.3 
## [37] assertthat_0.2.1 colorspace_2.0-3 labeling_0.4.2   utf8_1.2.2      
## [41] stringi_1.7.8    munsell_0.5.0    cachem_1.0.6