Init

library(kirkegaard)
## Loading required package: tidyverse
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.7     ✔ dplyr   1.0.9
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## Loading required package: magrittr
## 
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
## 
##     set_names
## The following object is masked from 'package:tidyr':
## 
##     extract
## Loading required package: weights
## Loading required package: Hmisc
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
## Loading required package: assertthat
## 
## Attaching package: 'assertthat'
## The following object is masked from 'package:tibble':
## 
##     has_name
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following object is masked from 'package:Hmisc':
## 
##     describe
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## 
## Attaching package: 'kirkegaard'
## The following object is masked from 'package:psych':
## 
##     rescale
## The following object is masked from 'package:assertthat':
## 
##     are_equal
## The following objects are masked from 'package:purrr':
## 
##     is_logical, is_numeric
## The following object is masked from 'package:base':
## 
##     +
load_packages(
  rms,
  mirt
)
## Loading required package: SparseM
## 
## Attaching package: 'SparseM'
## The following object is masked from 'package:base':
## 
##     backsolve
## Loading required package: stats4
theme_set(theme_bw())

options(digits = 3)

Data

d = read_rds("data/data_out.rds")

d_table = read_csv2("data/question_data.csv")
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 2620 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (9): question, text, option_1, option_2, option_3, option_4, Type, Order...
## dbl (1): N
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Recode

#reverse coding of orientation so that het male is ref
d$sex_orientation %<>% fct_rev()

d$d_gender %>% table2()
d$d_gender %>% table2(include_NA = F)
d$gender3 = d$d_gender %>% mapvalues(from = c("Cis Man", "Man, Cis Man", "Cis Woman, Woman", "Cis Woman", "Woman, Cis Woman"), to = c(rep("Man", 2), rep("Woman", 3))) %>% fct_lump(prop = .03) %>% fct_relevel("Man")
d$gender3 %>% table2()
d$gender2 = d$gender3 %>% mapvalues(from = "Other", to = NA)

d$d_orientation %>% table2()
d$orientation4 = d$d_orientation %>% fct_lump(prop = 0.01) %>% fct_relevel("Straight")
d$orientation3 = d$orientation4 %>% mapvalues(from = "Other", to = NA)
d$orientation3 %>% table2()
d$sapiosexual = str_detect(d$d_orientation, "apiosexual")

Results

Intelligence

#reliability of the g score
g_items = read_csv("data/test_items.csv")
## New names:
## Rows: 28 Columns: 8
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," chr
## (6): ...1, text, option_1, option_2, option_3, option_4 dbl (2): ID,
## option_correct
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`
names(g_items)[1] = "var"
g_items %<>% filter(var %in% names(d)) 
g_items$correct = NA
for (i in seq_along(g_items$option_correct)) {
  g_items$correct[i] = g_items[["option_"+g_items$option_correct[i]]][i]
}

#save updated version for easier use later
g_items %>% write_csv("data/g_items.csv")

#score items
scored_items = score_items(d[g_items$var], g_items$correct)
scored_items_count = miss_by_case(scored_items, reverse = T)

#mirt
mirt_fit = mirt(
  scored_items,
  model = 1,
  itemtype = "2PL"
)
## Warning: data contains response patterns with only NAs
## 
Iteration: 1, Log-Lik: -188768.194, Max-Change: 5.04127
Iteration: 2, Log-Lik: -167586.674, Max-Change: 0.93778
Iteration: 3, Log-Lik: -163943.799, Max-Change: 0.34531
Iteration: 4, Log-Lik: -162360.344, Max-Change: 0.28657
Iteration: 5, Log-Lik: -161709.787, Max-Change: 0.22768
Iteration: 6, Log-Lik: -161353.642, Max-Change: 0.16053
Iteration: 7, Log-Lik: -161173.781, Max-Change: 0.09737
Iteration: 8, Log-Lik: -161064.493, Max-Change: 0.22971
Iteration: 9, Log-Lik: -160991.363, Max-Change: 0.12791
Iteration: 10, Log-Lik: -160959.392, Max-Change: 0.07594
Iteration: 11, Log-Lik: -160939.094, Max-Change: 0.04297
Iteration: 12, Log-Lik: -160925.798, Max-Change: 0.04225
Iteration: 13, Log-Lik: -160916.474, Max-Change: 0.02643
Iteration: 14, Log-Lik: -160913.117, Max-Change: 0.01116
Iteration: 15, Log-Lik: -160909.698, Max-Change: 0.00764
Iteration: 16, Log-Lik: -160907.840, Max-Change: 0.00427
Iteration: 17, Log-Lik: -160907.466, Max-Change: 0.00338
Iteration: 18, Log-Lik: -160907.281, Max-Change: 0.00242
Iteration: 19, Log-Lik: -160907.163, Max-Change: 0.00138
Iteration: 20, Log-Lik: -160907.136, Max-Change: 0.00128
Iteration: 21, Log-Lik: -160907.121, Max-Change: 0.00118
Iteration: 22, Log-Lik: -160907.111, Max-Change: 0.00045
Iteration: 23, Log-Lik: -160907.109, Max-Change: 0.00028
Iteration: 24, Log-Lik: -160907.108, Max-Change: 0.00025
Iteration: 25, Log-Lik: -160907.108, Max-Change: 0.00024
Iteration: 26, Log-Lik: -160907.107, Max-Change: 0.00008
mirt_fit_scores = fscores(mirt_fit, full.scores = T, full.scores.SE = T)

#reliability
empirical_rxx(mirt_fit_scores)
##    F1 
## 0.549
#nominal fit
mirt_nom_fit = mirt(
  scored_items,
  model = 1,
  itemtype = "nominal",
  key = g_items$correct
)
## Warning: data contains response patterns with only NAs
## 
Iteration: 1, Log-Lik: -219688.150, Max-Change: 10.27030
Iteration: 2, Log-Lik: -171900.111, Max-Change: 1.58927
Iteration: 3, Log-Lik: -164145.075, Max-Change: 1.55872
Iteration: 4, Log-Lik: -162478.435, Max-Change: 0.92017
Iteration: 5, Log-Lik: -161745.500, Max-Change: 0.55163
Iteration: 6, Log-Lik: -161366.631, Max-Change: 0.26386
Iteration: 7, Log-Lik: -161169.339, Max-Change: 0.25862
Iteration: 8, Log-Lik: -161055.112, Max-Change: 0.18176
Iteration: 9, Log-Lik: -160992.520, Max-Change: 0.09439
Iteration: 10, Log-Lik: -160957.504, Max-Change: 0.05866
Iteration: 11, Log-Lik: -160937.157, Max-Change: 0.02926
Iteration: 12, Log-Lik: -160924.448, Max-Change: 0.02496
Iteration: 13, Log-Lik: -160914.736, Max-Change: 0.01685
Iteration: 14, Log-Lik: -160911.074, Max-Change: 0.01045
Iteration: 15, Log-Lik: -160908.881, Max-Change: 0.00689
Iteration: 16, Log-Lik: -160907.361, Max-Change: 0.00419
Iteration: 17, Log-Lik: -160907.220, Max-Change: 0.00419
Iteration: 18, Log-Lik: -160907.150, Max-Change: 0.00172
Iteration: 19, Log-Lik: -160907.139, Max-Change: 0.00164
Iteration: 20, Log-Lik: -160907.125, Max-Change: 0.00135
Iteration: 21, Log-Lik: -160907.121, Max-Change: 0.00067
Iteration: 22, Log-Lik: -160907.116, Max-Change: 0.00060
Iteration: 23, Log-Lik: -160907.112, Max-Change: 0.00059
Iteration: 24, Log-Lik: -160907.110, Max-Change: 0.00019
Iteration: 25, Log-Lik: -160907.110, Max-Change: 0.00017
Iteration: 26, Log-Lik: -160907.109, Max-Change: 0.00041
Iteration: 27, Log-Lik: -160907.109, Max-Change: 0.00013
Iteration: 28, Log-Lik: -160907.109, Max-Change: 0.00011
Iteration: 29, Log-Lik: -160907.108, Max-Change: 0.00027
Iteration: 30, Log-Lik: -160907.108, Max-Change: 0.00045
Iteration: 31, Log-Lik: -160907.107, Max-Change: 0.00009
mirt_nom_fit_scores = fscores(mirt_nom_fit, full.scores = T, full.scores.SE = T)

#reliability
empirical_rxx(mirt_nom_fit_scores)
##    F1 
## 0.549
#save to main
d$g = mirt_fit_scores[, 1] %>% standardize(focal_group = d$race=="White")
## Warning in standardize(., focal_group = d$race == "White"): `focal_group`
## contains `NA` values. These were converted to `FALSE` following tidyverse
## convention.
d$g_nom = mirt_nom_fit_scores[, 1] %>% standardize(focal_group = d$race=="White")
## Warning in standardize(., focal_group = d$race == "White"): `focal_group`
## contains `NA` values. These were converted to `FALSE` following tidyverse
## convention.
d$g_items = scored_items_count

#reliability?
GG_scatter(d, "g", "g_nom")
## `geom_smooth()` using formula 'y ~ x'

#subset to more reliable subset
d2 = d %>% filter(g_items >= 5)

#reliability in subset
(rel = empirical_rxx(mirt_nom_fit_scores[scored_items_count >= 5, ]))
##    F1 
## 0.625
#restandardize because now norms have moved
#IQ by race
GG_group_means(d2, "g", "race")
## Missing values were removed.

d2$g %<>% standardize(focal_group = d2$race=="White")
## Warning in standardize(., focal_group = d2$race == "White"): `focal_group`
## contains `NA` values. These were converted to `FALSE` following tidyverse
## convention.
d2$g_nom %<>% standardize(focal_group = d2$race=="White")
## Warning in standardize(., focal_group = d2$race == "White"): `focal_group`
## contains `NA` values. These were converted to `FALSE` following tidyverse
## convention.

Main results

#counts
d2$orientation4 %>% table2()
d2$gender3 %>% table2()
#IQ by race
GG_group_means(d2, "g", "race", type = "point")
## Missing values were removed.

describeBy(d2$g, d2$race)
## 
##  Descriptive statistics by group 
## group: White
##    vars     n mean sd median trimmed  mad  min  max range  skew kurtosis   se
## X1    1 24677    0  1   0.06    0.05 1.15 -3.5 1.79  5.29 -0.43    -0.48 0.01
## ------------------------------------------------------------ 
## group: Mixed
##    vars    n  mean   sd median trimmed  mad   min  max range  skew kurtosis
## X1    1 3240 -0.12 1.02  -0.12   -0.08 1.18 -3.56 1.79  5.35 -0.31    -0.61
##      se
## X1 0.02
## ------------------------------------------------------------ 
## group: Asian
##    vars    n  mean   sd median trimmed mad   min  max range  skew kurtosis   se
## X1    1 1578 -0.18 0.99  -0.23   -0.15 1.2 -3.07 1.79  4.86 -0.22    -0.63 0.02
## ------------------------------------------------------------ 
## group: Hispanic / Latin
##    vars    n  mean   sd median trimmed  mad   min  max range skew kurtosis   se
## X1    1 1421 -0.55 0.96  -0.55   -0.55 0.97 -3.12 1.79  4.91 0.01    -0.56 0.03
## ------------------------------------------------------------ 
## group: Black
##    vars    n  mean sd median trimmed  mad  min  max range  skew kurtosis   se
## X1    1 1417 -0.53  1  -0.54   -0.52 1.02 -3.2 1.79  4.99 -0.07    -0.56 0.03
## ------------------------------------------------------------ 
## group: Other
##    vars   n  mean   sd median trimmed mad   min  max range  skew kurtosis   se
## X1    1 952 -0.25 1.04  -0.23    -0.2 1.2 -3.34 1.79  5.13 -0.34    -0.56 0.03
## ------------------------------------------------------------ 
## group: Indian
##    vars   n  mean   sd median trimmed  mad   min  max range  skew kurtosis   se
## X1    1 352 -0.07 1.03   -0.2   -0.04 1.31 -3.25 1.77  5.03 -0.27    -0.56 0.06
## ------------------------------------------------------------ 
## group: Middle Eastern
##    vars   n  mean   sd median trimmed mad   min  max range  skew kurtosis   se
## X1    1 155 -0.34 1.04  -0.32   -0.32 1.2 -2.97 1.74  4.71 -0.14    -0.65 0.08
## ------------------------------------------------------------ 
## group: Native American
##    vars  n  mean   sd median trimmed  mad   min  max range skew kurtosis   se
## X1    1 71 -0.75 0.96  -0.84   -0.77 0.89 -3.07 1.21  4.28 0.05    -0.57 0.11
## ------------------------------------------------------------ 
## group: Pacific Islander
##    vars  n  mean   sd median trimmed  mad   min  max range skew kurtosis   se
## X1    1 68 -0.56 0.95   -0.5   -0.57 1.07 -2.41 1.24  3.64 0.11    -0.93 0.12
#other orientations
GG_group_means(d2, "g", "orientation4", type = "point")
## Missing values were removed.

describeBy(d2$g, d2$orientation4)
## 
##  Descriptive statistics by group 
## group: Straight
##    vars     n mean   sd median trimmed  mad   min  max range  skew kurtosis
## X1    1 31770 -0.1 1.03  -0.11   -0.05 1.27 -3.56 1.79  5.35 -0.35    -0.58
##      se
## X1 0.01
## ------------------------------------------------------------ 
## group: Bisexual
##    vars    n mean sd median trimmed  mad   min  max range  skew kurtosis   se
## X1    1 2714 0.08  1   0.25    0.16 0.95 -3.07 1.79  4.86 -0.65    -0.22 0.02
## ------------------------------------------------------------ 
## group: Gay
##    vars    n  mean   sd median trimmed  mad   min  max range  skew kurtosis
## X1    1 2165 -0.17 0.99   -0.2   -0.14 1.15 -3.07 1.79  4.86 -0.26    -0.53
##      se
## X1 0.02
## ------------------------------------------------------------ 
## group: Other
##    vars   n mean   sd median trimmed mad   min  max range  skew kurtosis   se
## X1    1 326  0.5 0.88   0.67    0.56 0.8 -2.87 1.79  4.66 -0.71     0.04 0.05
#other genders
GG_group_means(d2, "g", "gender3", type = "point")
## Missing values were removed.

describeBy(d2$g, d2$gender3)
## 
##  Descriptive statistics by group 
## group: Man
##    vars     n  mean   sd median trimmed  mad   min  max range  skew kurtosis
## X1    1 24793 -0.06 1.03  -0.05   -0.01 1.24 -3.56 1.79  5.35 -0.35    -0.56
##      se
## X1 0.01
## ------------------------------------------------------------ 
## group: Woman
##    vars     n  mean   sd median trimmed  mad   min  max range  skew kurtosis
## X1    1 12073 -0.15 1.01  -0.15   -0.09 1.27 -3.25 1.79  5.04 -0.41    -0.58
##      se
## X1 0.01
## ------------------------------------------------------------ 
## group: Other
##    vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
## X1    1 109 0.49 0.86   0.67    0.55 0.75 -2.2 1.79  3.99 -0.7     0.01 0.08
#IQ by orientation
GG_group_means(d2, "g", "orientation4", "gender3", type = "point") +
  labs(x = "Sexual orientation") +
  scale_color_manual("Gender", values = c("blue", "red", "purple"))
## Missing values were removed.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.

GG_save("figs/sex_orientation.png")

#models
list(
  main_eff = ols(g ~ gender3 + orientation4 + age, data = d2),
  interact = ols(g ~ gender3 * orientation4 + age, data = d2),
  full = ols(g ~ gender3 * orientation4 + race + age, data = d2)
) -> fit_models

fit_models %>% summarize_models(asterisks_only = F) %>% print(n=Inf)
## # A tibble: 27 × 4
##    `Predictor/Model`                         main_eff             interact full 
##    <chr>                                     <chr>                <chr>    <chr>
##  1 Intercept                                 -0.09 (0.025, <0.00… -0.09 (… 0.08…
##  2 gender3 = Man                             (ref)                (ref)    (ref)
##  3 gender3 = Woman                           -0.12 (0.012, <0.00… -0.12 (… -0.1…
##  4 gender3 = Other                           0.10 (0.107, 0.335)  0.20 (0… 0.03…
##  5 orientation4 = Straight                   (ref)                (ref)    (ref)
##  6 orientation4 = Bisexual                   0.24 (0.021, <0.001… 0.21 (0… 0.17…
##  7 orientation4 = Gay                        -0.08 (0.023, <0.00… -0.07 (… -0.0…
##  8 orientation4 = Other                      0.59 (0.062, <0.001… 0.72 (0… 0.73…
##  9 age                                       0.00 (0.001, 0.33)   0.00 (0… 0.00…
## 10 gender3 = Woman * orientation4 = Bisexual <NA>                 0.04 (0… 0.05…
## 11 gender3 = Other * orientation4 = Bisexual <NA>                 0.26 (0… 0.30…
## 12 gender3 = Woman * orientation4 = Gay      <NA>                 -0.01 (… 0.00…
## 13 gender3 = Other * orientation4 = Gay      <NA>                 -0.06 (… -0.0…
## 14 gender3 = Woman * orientation4 = Other    <NA>                 -0.20 (… -0.2…
## 15 gender3 = Other * orientation4 = Other    <NA>                 -0.31 (… -0.2…
## 16 race = White                              <NA>                 <NA>     (ref)
## 17 race = Mixed                              <NA>                 <NA>     -0.1…
## 18 race = Asian                              <NA>                 <NA>     -0.1…
## 19 race = Hispanic / Latin                   <NA>                 <NA>     -0.5…
## 20 race = Black                              <NA>                 <NA>     -0.5…
## 21 race = Other                              <NA>                 <NA>     -0.2…
## 22 race = Indian                             <NA>                 <NA>     -0.0…
## 23 race = Middle Eastern                     <NA>                 <NA>     -0.3…
## 24 race = Native American                    <NA>                 <NA>     -0.7…
## 25 race = Pacific Islander                   <NA>                 <NA>     -0.5…
## 26 R2 adj.                                   0.008                0.008    0.033
## 27 N                                         36975                36975    33931
#plot model projections
ggeffects::ggpredict(fit_models[[2]], terms = c("orientation4", "gender3")) %>% plot()

#orientation vs. gender
list(
  gender = ols(g ~ gender3 + age + race, data = d2),
  orientation = ols(g ~ orientation4 + age  + race, data = d2),
  both = ols(g ~ gender3 + orientation4 + race + age, data = d2)
) -> fit_models2

fit_models2 %>% 
  summarize_models() %>% 
  print(n=Inf)
## # A tibble: 21 × 4
##    `Predictor/Model`       gender           orientation      both            
##    <chr>                   <chr>            <chr>            <chr>           
##  1 Intercept               0.11 (0.026***)  -0.02 (0.025)    0.08 (0.027**)  
##  2 gender3 = Man           (ref)            <NA>             (ref)           
##  3 gender3 = Woman         -0.11 (0.012***) <NA>             -0.14 (0.012***)
##  4 gender3 = Other         0.47 (0.103***)  <NA>             0.01 (0.113)    
##  5 age                     0.00 (0.001***)  0.00 (0.001)     0.00 (0.001)    
##  6 race = White            (ref)            (ref)            (ref)           
##  7 race = Mixed            -0.13 (0.019***) -0.13 (0.019***) -0.14 (0.019***)
##  8 race = Asian            -0.17 (0.026***) -0.17 (0.026***) -0.15 (0.026***)
##  9 race = Hispanic / Latin -0.55 (0.027***) -0.54 (0.027***) -0.54 (0.027***)
## 10 race = Black            -0.53 (0.027***) -0.52 (0.027***) -0.52 (0.027***)
## 11 race = Other            -0.25 (0.033***) -0.26 (0.033***) -0.26 (0.033***)
## 12 race = Indian           -0.09 (0.054)    -0.06 (0.054)    -0.08 (0.054)   
## 13 race = Middle Eastern   -0.35 (0.081***) -0.34 (0.080***) -0.35 (0.080***)
## 14 race = Native American  -0.75 (0.119***) -0.76 (0.119***) -0.76 (0.118***)
## 15 race = Pacific Islander -0.56 (0.121***) -0.55 (0.121***) -0.55 (0.121***)
## 16 orientation4 = Straight <NA>             (ref)            (ref)           
## 17 orientation4 = Bisexual <NA>             0.16 (0.021***)  0.21 (0.022***) 
## 18 orientation4 = Gay      <NA>             -0.05 (0.023)    -0.07 (0.023**) 
## 19 orientation4 = Other    <NA>             0.59 (0.058***)  0.60 (0.063***) 
## 20 R2 adj.                 0.027            0.029            0.033           
## 21 N                       33931            33931            33931
#reliability correction
fit_models$full %>% coef() %>% divide_by(sqrt(rel)) %>% round(3)
##                             Intercept                         gender3=Woman 
##                                 0.104                                -0.178 
##                         gender3=Other                 orientation4=Bisexual 
##                                 0.033                                 0.219 
##                      orientation4=Gay                    orientation4=Other 
##                                -0.086                                 0.926 
##                            race=Mixed                            race=Asian 
##                                -0.171                                -0.195 
##                 race=Hispanic / Latin                            race=Black 
##                                -0.690                                -0.659 
##                            race=Other                           race=Indian 
##                                -0.328                                -0.106 
##                   race=Middle Eastern                  race=Native American 
##                                -0.441                                -0.959 
##                 race=Pacific Islander                                   age 
##                                -0.692                                -0.002 
## gender3=Woman * orientation4=Bisexual gender3=Other * orientation4=Bisexual 
##                                 0.064                                 0.379 
##      gender3=Woman * orientation4=Gay      gender3=Other * orientation4=Gay 
##                                 0.000                                -0.022 
##    gender3=Woman * orientation4=Other    gender3=Other * orientation4=Other 
##                                -0.266                                -0.250
fit_models$full %>% coef() %>% divide_by(sqrt(rel)) %>% round(3) %>% multiply_by(15)
##                             Intercept                         gender3=Woman 
##                                 1.560                                -2.670 
##                         gender3=Other                 orientation4=Bisexual 
##                                 0.495                                 3.285 
##                      orientation4=Gay                    orientation4=Other 
##                                -1.290                                13.890 
##                            race=Mixed                            race=Asian 
##                                -2.565                                -2.925 
##                 race=Hispanic / Latin                            race=Black 
##                               -10.350                                -9.885 
##                            race=Other                           race=Indian 
##                                -4.920                                -1.590 
##                   race=Middle Eastern                  race=Native American 
##                                -6.615                               -14.385 
##                 race=Pacific Islander                                   age 
##                               -10.380                                -0.030 
## gender3=Woman * orientation4=Bisexual gender3=Other * orientation4=Bisexual 
##                                 0.960                                 5.685 
##      gender3=Woman * orientation4=Gay      gender3=Other * orientation4=Gay 
##                                 0.000                                -0.330 
##    gender3=Woman * orientation4=Other    gender3=Other * orientation4=Other 
##                                -3.990                                -3.750
fit_models2$both %>% coef() %>% divide_by(sqrt(rel)) %>% round(3)
##             Intercept         gender3=Woman         gender3=Other 
##                 0.104                -0.176                 0.012 
## orientation4=Bisexual      orientation4=Gay    orientation4=Other 
##                 0.268                -0.085                 0.762 
##            race=Mixed            race=Asian race=Hispanic / Latin 
##                -0.171                -0.195                -0.689 
##            race=Black            race=Other           race=Indian 
##                -0.659                -0.327                -0.105 
##   race=Middle Eastern  race=Native American race=Pacific Islander 
##                -0.441                -0.959                -0.693 
##                   age 
##                -0.002
fit_models2$gender %>% coef() %>% divide_by(sqrt(rel)) %>% round(3)
##             Intercept         gender3=Woman         gender3=Other 
##                 0.142                -0.134                 0.589 
##                   age            race=Mixed            race=Asian 
##                -0.003                -0.164                -0.214 
## race=Hispanic / Latin            race=Black            race=Other 
##                -0.701                -0.668                -0.319 
##           race=Indian   race=Middle Eastern  race=Native American 
##                -0.115                -0.447                -0.953 
## race=Pacific Islander 
##                -0.712
fit_models2$orientation %>% coef() %>% divide_by(sqrt(rel)) %>% round(3)
##             Intercept orientation4=Bisexual      orientation4=Gay 
##                -0.024                 0.199                -0.069 
##    orientation4=Other                   age            race=Mixed 
##                 0.749                 0.000                -0.166 
##            race=Asian race=Hispanic / Latin            race=Black 
##                -0.220                -0.680                -0.664 
##            race=Other           race=Indian   race=Middle Eastern 
##                -0.326                -0.071                -0.427 
##  race=Native American race=Pacific Islander 
##                -0.957                -0.694

Meta

#versions
write_sessioninfo()
## R version 4.2.0 (2022-04-22)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Linux Mint 19.3
## 
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=en_DK.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_DK.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_DK.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats4    stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] mirt_1.36.1           rms_6.3-0             SparseM_1.81         
##  [4] kirkegaard_2022-08-31 psych_2.2.3           assertthat_0.2.1     
##  [7] weights_1.0.4         Hmisc_4.7-0           Formula_1.2-4        
## [10] survival_3.2-13       lattice_0.20-45       magrittr_2.0.3       
## [13] forcats_0.5.1         stringr_1.4.0         dplyr_1.0.9          
## [16] purrr_0.3.4           readr_2.1.2           tidyr_1.2.0          
## [19] tibble_3.1.7          ggplot2_3.3.6         tidyverse_1.3.1      
## 
## loaded via a namespace (and not attached):
##   [1] TH.data_1.1-1        minqa_1.2.4          colorspace_2.0-3    
##   [4] ellipsis_0.3.2       sjlabelled_1.2.0     htmlTable_2.4.0     
##   [7] base64enc_0.1-3      fs_1.5.2             rstudioapi_0.13     
##  [10] mice_3.14.0          farver_2.1.0         Deriv_4.1.3         
##  [13] MatrixModels_0.5-0   bit64_4.0.5          fansi_1.0.3         
##  [16] mvtnorm_1.1-3        lubridate_1.8.0      xml2_1.3.3          
##  [19] codetools_0.2-18     splines_4.2.0        mnormt_2.0.2        
##  [22] knitr_1.39           jsonlite_1.8.0       nloptr_2.0.1        
##  [25] ggeffects_1.1.2      broom_0.8.0          cluster_2.1.3       
##  [28] dbplyr_2.1.1         png_0.1-7            compiler_4.2.0      
##  [31] httr_1.4.3           backports_1.4.1      Matrix_1.4-1        
##  [34] fastmap_1.1.0        cli_3.3.0            htmltools_0.5.2     
##  [37] quantreg_5.93        tools_4.2.0          gtable_0.3.0        
##  [40] glue_1.6.2           Rcpp_1.0.8.3         cellranger_1.1.0    
##  [43] jquerylib_0.1.4      vctrs_0.4.1          gdata_2.18.0        
##  [46] nlme_3.1-157         insight_0.18.0       xfun_0.30           
##  [49] lme4_1.1-29          rvest_1.0.2          lifecycle_1.0.1     
##  [52] dcurver_0.9.2        gtools_3.9.2         polspline_1.1.20    
##  [55] MASS_7.3-57          zoo_1.8-10           scales_1.2.0        
##  [58] vroom_1.5.7          hms_1.1.1            parallel_4.2.0      
##  [61] sandwich_3.0-1       RColorBrewer_1.1-3   yaml_2.3.5          
##  [64] pbapply_1.5-0        gridExtra_2.3        sass_0.4.1          
##  [67] rpart_4.1.16         latticeExtra_0.6-29  stringi_1.7.6       
##  [70] highr_0.9            permute_0.9-7        checkmate_2.1.0     
##  [73] boot_1.3-28          rlang_1.0.2          pkgconfig_2.0.3     
##  [76] evaluate_0.15        labeling_0.4.2       htmlwidgets_1.5.4   
##  [79] bit_4.0.4            tidyselect_1.1.2     plyr_1.8.7          
##  [82] R6_2.5.1             generics_0.1.2       multcomp_1.4-19     
##  [85] DBI_1.1.2            mgcv_1.8-40          pillar_1.7.0        
##  [88] haven_2.5.0          foreign_0.8-82       withr_2.5.0         
##  [91] nnet_7.3-17          modelr_0.1.8         crayon_1.5.1        
##  [94] utf8_1.2.2           tmvnsim_1.0-2        tzdb_0.3.0          
##  [97] rmarkdown_2.14       jpeg_0.1-9           grid_4.2.0          
## [100] readxl_1.4.0         data.table_1.14.2    vegan_2.6-2         
## [103] reprex_2.0.1         digest_0.6.29        GPArotation_2022.4-1
## [106] munsell_0.5.0        bslib_0.3.1
#data
d2 %>% write_rds("data/data_for_reuse.rds")

#write to OSF
if (F) {
  library(osfr)
  #settings
  #you need to set up a personal token
  #good idea is to then place it somewhere safe for reuse
  osf_auth(readr::read_lines("~/.config/osf_token"))
  
  #the project we will use
  osf_proj = osf_retrieve_node("https://osf.io/36wmf/")
  
  #upload all files in project, EXCEPT FOR THE DATA
  #overwrite existing (versioning)
  osf_upload(osf_proj,
             path = c("notebook.html", "notebook.Rmd", "figs", "sessions_info.txt"),
             conflicts = "overwrite")
}