4 Study 4

Data_Study4_Wide <- subset(Data_Meta_Raw.wide, Study == 4)

4.1 Data analysis

Planned statistical analysis: Run SEM for each sleep variable (IV) on endorsement of moral principles (DV)

#Primary Analysis
Model_QualCroSEMS4<-
'MoralTOT=~Moral_DIL+Moral_SCA+Moral_CAR
MoralTOT~SleepQualCro'
fitQualCro<-sem(Model_QualCroSEMS4, data=Data_Study4_Wide, estimator="MLR")
## Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan
## WARNING: some observed variances are (at least) a factor 1000 times larger than
## others; use varTable(fit) to investigate
## Warning in lavaan::lavaan(model = Model_QualCroSEMS4, data = Data_Study4_Wide, : lavaan WARNING:
##     the optimizer warns that a solution has NOT been found!
#Secondary Analyses
Model_QualAcuSEMS4<-
'MoralTOT=~Moral_DIL+Moral_SCA+Moral_CAR
MoralTOT~SleepQualAcu'
fitQualAcu<-sem(Model_QualAcuSEMS4, data=Data_Study4_Wide, estimator="MLR")
## Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan
## WARNING: some observed variances are (at least) a factor 1000 times larger than
## others; use varTable(fit) to investigate
## Warning in lav_object_post_check(object): lavaan WARNING: some estimated ov
## variances are negative
Model_QuantCroSEMS4<-
'MoralTOT=~Moral_DIL+Moral_SCA+Moral_CAR
MoralTOT~SleepQuantCro'
fitQuantCro<-sem(Model_QuantCroSEMS4, data=Data_Study4_Wide, estimator="MLR")
## Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan
## WARNING: some observed variances are (at least) a factor 1000 times larger than
## others; use varTable(fit) to investigate

## Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan
## WARNING: some estimated ov variances are negative
Model_QuantAcuSEMS4<-
'MoralTOT=~Moral_DIL+Moral_SCA+Moral_CAR
MoralTOT~SleepQuantAcu'
fitQuantAcu<-sem(Model_QuantAcuSEMS4, data=Data_Study4_Wide, estimator="MLR")
## Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan
## WARNING: some observed variances are (at least) a factor 1000 times larger than
## others; use varTable(fit) to investigate

## Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan
## WARNING: some estimated ov variances are negative
summary(fitQualCro)
## lavaan 0.6-8 did NOT end normally after 533 iterations
## ** WARNING ** Estimates below are most likely unreliable
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         7
##                                                       
##   Number of observations                            99
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                    NA
##   Degrees of freedom                                NA
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate      Std.Err  z-value  P(>|z|)
##   MoralTOT =~                                             
##     Moral_DIL             1.000                           
##     Moral_SCA             0.000       NA                  
##     Moral_CAR            -0.000       NA                  
## 
## Regressions:
##                    Estimate      Std.Err  z-value  P(>|z|)
##   MoralTOT ~                                              
##     SleepQualCro         -1.489       NA                  
## 
## Variances:
##                    Estimate      Std.Err  z-value  P(>|z|)
##    .Moral_DIL      -2215512.965       NA                  
##    .Moral_SCA            16.691       NA                  
##    .Moral_CAR             0.034       NA                  
##    .MoralTOT        2216170.176       NA
summary(fitQualAcu)
## lavaan 0.6-8 ended normally after 380 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         7
##                                                       
##   Number of observations                            99
##                                                       
## Model Test User Model:
##                                                Standard      Robust
##   Test Statistic                                  0.061       0.056
##   Degrees of freedom                                  2           2
##   P-value (Chi-square)                            0.970       0.972
##   Scaling correction factor                                   1.093
##        Yuan-Bentler correction (Mplus variant)                     
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   MoralTOT =~                                         
##     Moral_DIL         1.000                           
##     Moral_SCA         0.816    1.883    0.434    0.665
##     Moral_CAR         0.003    0.001    2.295    0.022
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   MoralTOT ~                                          
##     SleepQualAcu     -0.074    0.326   -0.226    0.821
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .Moral_DIL       597.017  171.683    3.477    0.001
##    .Moral_SCA       -29.487  104.379   -0.282    0.778
##    .Moral_CAR         0.034    0.005    7.127    0.000
##    .MoralTOT         69.272  165.286    0.419    0.675
summary(fitQuantCro)
## lavaan 0.6-8 ended normally after 228 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         7
##                                                       
##   Number of observations                            99
##                                                       
## Model Test User Model:
##                                                Standard      Robust
##   Test Statistic                                  0.027       0.021
##   Degrees of freedom                                  2           2
##   P-value (Chi-square)                            0.987       0.990
##   Scaling correction factor                                   1.281
##        Yuan-Bentler correction (Mplus variant)                     
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   MoralTOT =~                                         
##     Moral_DIL         1.000                           
##     Moral_SCA         1.038    2.797    0.371    0.711
##     Moral_CAR         0.003    0.001    2.309    0.021
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   MoralTOT ~                                          
##     SleepQuantCro    -0.396    1.155   -0.343    0.732
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .Moral_DIL       611.846  158.983    3.849    0.000
##    .Moral_SCA       -42.021  154.502   -0.272    0.786
##    .Moral_CAR         0.034    0.005    7.340    0.000
##    .MoralTOT         54.283  150.715    0.360    0.719
summary(fitQualCro)
## lavaan 0.6-8 did NOT end normally after 533 iterations
## ** WARNING ** Estimates below are most likely unreliable
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         7
##                                                       
##   Number of observations                            99
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                    NA
##   Degrees of freedom                                NA
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate      Std.Err  z-value  P(>|z|)
##   MoralTOT =~                                             
##     Moral_DIL             1.000                           
##     Moral_SCA             0.000       NA                  
##     Moral_CAR            -0.000       NA                  
## 
## Regressions:
##                    Estimate      Std.Err  z-value  P(>|z|)
##   MoralTOT ~                                              
##     SleepQualCro         -1.489       NA                  
## 
## Variances:
##                    Estimate      Std.Err  z-value  P(>|z|)
##    .Moral_DIL      -2215512.965       NA                  
##    .Moral_SCA            16.691       NA                  
##    .Moral_CAR             0.034       NA                  
##    .MoralTOT        2216170.176       NA

Alternative statistical analysis: using a composite variable as the dependent variable instead of a latent variable

# creation of the composite variable
Data_Study4_Wide$MoralZ_DIL<- scale(Data_Study4_Wide$Moral_DIL,
                                   center = TRUE, scale = TRUE)

Data_Study4_Wide$MoralZ_SCA<- scale(Data_Study4_Wide$Moral_SCA,
                                   center = TRUE, scale = TRUE)

Data_Study4_Wide$MoralZ_CAR<- scale(Data_Study4_Wide$Moral_CAR,
                                   center = TRUE, scale = TRUE)

Data_Study4_Wide$MoralZ<-with(Data_Study4_Wide, MoralZ_DIL+MoralZ_SCA+MoralZ_CAR)

# univariate regression
QualCroLMS4<-lm(MoralZ~SleepQualCro, Data_Study4_Wide)
QualAcuLMS4<-lm(MoralZ~SleepQualAcu, Data_Study4_Wide)
QuantCroLMS4<-lm(MoralZ~SleepQuantCro,Data_Study4_Wide)
QuantAcuLMS4<-lm(MoralZ~SleepQuantAcu, Data_Study4_Wide)

Extract coefficients from linear regression models

results_S4 <- rbind(
  tidy(QualCroLMS4)[2,],
  tidy(QualAcuLMS4)[2,],
  tidy(QuantCroLMS4)[2,],
  tidy(QuantAcuLMS4)[2,]) %>%
  mutate(
    p.value = case_when(
      p.value*4 < 1 ~ p.value*4,
      p.value*4 >= 1 ~ 1))

Prepare data for plots

Data_PlotS4<- Data_Study4_Wide %>%
  pivot_longer(
    cols=c(SleepQualCro, SleepQualAcu, SleepQuantCro, SleepQuantAcu),
    names_to="SleepType") %>%
  rename("SleepValue"=value) %>%
  mutate(
    SleepLength=case_when(
      SleepType=="SleepQualCro" | SleepType=="SleepQuantCro"~"Chronic",
      SleepType=="SleepQualAcu" | SleepType=="SleepQuantAcu"~"Acute"),
    SleepQuanthist=case_when(
      SleepType=="SleepQualCro" | SleepType=="SleepQualAcu"~"Sleep Quality",
      SleepType=="SleepQuantCro" | SleepType=="SleepQuantAcu"~"Sleep Quantity"))

Data_PlotS4$SleepType<-dplyr::recode(Data_PlotS4$SleepType,
        "SleepQualCro" = "Quality of Chronic Sleep",
        "SleepQualAcu" = "Quality of Acute Sleep",
        "SleepQuantCro" = "Quantity of Chronic Sleep",
        "SleepQuantAcu" = "Quantity of Acute Sleep")


Data_MoralS4<- Data_Study4_Wide %>%
  pivot_longer(
    cols=c(Moral_DIL, Moral_SCA, Moral_CAR),
    names_to="Outcome_moral") %>%
  rename("MoralValue"=value)

Data_MoralS4$Outcome_moral<-dplyr::recode(Data_MoralS4$Outcome_moral,
        "Moral_DIL" = "Dilemmas",
        "Moral_SCA" = "Scale",
        "Moral_CAR" = "Autonomous cars")

4.2 Summary of Study 4 results

Put results in a table

gt(results_S4) %>% 
  fmt_number(
    columns = 2:5,
    decimals = 2)
term estimate std.error statistic p.value
SleepQualCro −0.02 0.06 −0.35 1.00
SleepQualAcu −0.03 0.10 −0.30 1.00
SleepQuantCro −0.10 0.20 −0.49 1.00
SleepQuantAcu 0.00 0.16 0.00 1.00

4.3 Plots of Study 4 results

Plot distribution for each sleep indicator

DistQualityS4<-ggplot(Data_PlotS4, aes(x=SleepValue, fill=factor(SleepLength))) +
  geom_density(alpha=0.5, size=0.5,adjust = 2) +
  scale_fill_manual(values=c("#193B94", "#BDCAEE", "#193B94", "#BDCAEE")) +
  theme_bw() +
  ylab("Density") + xlab("") +
  facet_wrap(~factor(SleepQuanthist), scale="free_x") +
  guides(fill=guide_legend("Sleep Length")) +
  theme(
    axis.title.y = element_text(size = 11, hjust = 0.5, face="bold"),
    axis.title.x = element_text(face="bold", size = 11, hjust = 0.5),
    legend.position="top",
    legend.title = element_text(colour="black", size=10, face="bold"))
DistQualityS4

Plot distribution for the scores to the sacrificial dilemmas, moral scale and autonomous car dilemmas

DistMoralS4<-ggplot(Data_MoralS4, aes(x=MoralValue, fill=factor(Outcome_moral))) + 
  geom_density(alpha=0.5, size=0.5,adjust = 2) + 
  theme_bw() + 
  ylab("Density") + xlab("Moral Scale") +
  facet_wrap(~factor(Outcome_moral), scale="free") +
  guides(fill="none") +
  theme(
    axis.title.y = element_text(size = 11, hjust = 0.5, face="bold"),
    axis.title.x = element_text(face="bold", size = 11, hjust = 0.5))
  
DistMoralS4

Scatterplots

ggplot(Data_PlotS4, aes(x=SleepValue, y=MoralZ)) +
       geom_jitter(alpha=0.6, color="#545454", size=1.2) +
       geom_smooth(method="lm")+
       facet_wrap(~factor(SleepType), scales="free_x") +
       theme_bw() + ylab("Utilitirianism") + xlab("") +
       theme(axis.title.y = element_text(size = 11, hjust = 0.5, face="bold"),
             axis.title.x = element_text(face="bold", size = 11, hjust = 0.5)) +
       guides(size=FALSE, colour=FALSE, fill=FALSE) 
## `geom_smooth()` using formula 'y ~ x'