Last updated: 2022-02-15

Checks: 6 1

Knit directory: HairManikin_manuscript/

This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


The R Markdown file has unstaged changes. To know which version of the R Markdown file created these results, you’ll want to first commit it to the Git repo. If you’re still working on the analysis, you can ignore this warning. When you’re finished, you can run wflow_publish to commit the R Markdown file and build the HTML.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20211024) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

The results in this page were generated with repository version 3fc4c3e. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Ignored files:
    Ignored:    .DS_Store
    Ignored:    .RData
    Ignored:    .Rhistory
    Ignored:    .Rproj.user/
    Ignored:    data/.DS_Store
    Ignored:    data/.Rhistory
    Ignored:    data/current/.DS_Store
    Ignored:    data/raw_manikin_output/.DS_Store

Unstaged changes:
    Modified:   analysis/analysis.Rmd

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


These are the previous versions of the repository in which changes were made to the R Markdown (analysis/analysis.Rmd) and HTML (docs/analysis.html) files. If you’ve configured a remote Git repository (see ?wflow_git_remote), click on the hyperlinks in the table below to view the files as they were in that past version.

File Version Author Date Message
Rmd e9fa430 GitHub 2022-01-30 Update analysis.Rmd
html bb36720 Tina Lasisi 2022-01-19 Build site.
Rmd 05389ae Tina Lasisi 2022-01-19 Added figures + analysis placeholders
html 05389ae Tina Lasisi 2022-01-19 Added figures + analysis placeholders
Rmd bb99f1d Tina Lasisi 2022-01-08 Update analysis.rmd + add data
html bb99f1d Tina Lasisi 2022-01-08 Update analysis.rmd + add data
Rmd 0a50ef7 Tina Lasisi 2022-01-07 Adding main analysis file

1 Preparing data

1.1 Estimating dry heat loss at 30C and solar influx

1.1.1 Solar influx

Here we calculate solar influx and the temperature corrected heat loss for each experiment.

Solar influx (difference between heat loss with radiation on and off) is calculated as:

\[Solar\ influx \ (W/m^2) = heatflux_{(radiation)}- heatflux_{(no \ radiation)}\]

# A tibble: 59 × 7
   wig      wind wet_dry trial    on   off influx
   <fct>   <dbl> <fct>   <fct> <dbl> <dbl>  <dbl>
 1 Nude      0.3 wet     1      90.9 153.    61.9
 2 Nude      0.3 wet     2      86.7 151.    64.7
 3 Nude      1   wet     1     227.  254.    27.2
 4 Nude      2.5 wet     1     276.  288.    11.8
 5 Nude      2.5 wet     2     272.  289.    17.1
 6 LowCurv   0.3 wet     1      30    71.1   41.1
 7 LowCurv   0.3 wet     2      27.6  63.8   36.2
 8 LowCurv   1   wet     1      73.3 103.    29.8
 9 LowCurv   1   wet     2      80.9 103.    21.9
10 LowCurv   2.5 wet     1     138.  149.    11.9
# … with 49 more rows

Here we plot the solar influx.

Version Author Date
05389ae Tina Lasisi 2022-01-19
bb99f1d Tina Lasisi 2022-01-08

A plot of solar influx shows an outlier in the wet experiments where the heat loss with solar radiation was somehow less than the heat loss without solar radiation. We will exclude this outlier.

1.1.2 Temperature correction (to 30 C)

For the dry heat loss experiments (measuring dry heat resistance), we had to run some experiments at different temperatures to create a large enough gradient between skin/surface temperature and ambient temperature. The manikin is only able to produce results by measuring heat loss, and at 0.3 m/s wind speed, we found that the straight hair and nude (no hair) conditions led to overheating of the manikin. Subsequently, we had to adjust the temperatures to create a temperature gradient.

We thus need to bring all the measurements of heat loss to the same temperature. As heat resistance is temperature independent, we can use this to calculate the expected heat loss at various temperatures. We estimate heat loss at 30C with the following calculation.

\[Heat\ loss (W/m^2)_{(30C\ no\ radiation)} = 5/heat\ resistance_{(no \ radiation)} \]

# A tibble: 36 × 5
   wig      wind wet_dry resistance trial
   <fct>   <dbl> <fct>        <dbl> <fct>
 1 Nude      0.3 dry          0.113 1    
 2 Nude      0.3 dry          0.112 2    
 3 Nude      0.3 dry          0.112 3    
 4 Nude      1   dry          0.099 1    
 5 Nude      1   dry          0.101 2    
 6 Nude      1   dry          0.101 3    
 7 Nude      2.5 dry          0.058 1    
 8 Nude      2.5 dry          0.056 2    
 9 Nude      2.5 dry          0.058 3    
10 LowCurv   0.3 dry          0.42  1    
# … with 26 more rows
# A tibble: 36 × 7
   wig      wind wet_dry trial influx resistance   off
   <fct>   <dbl> <fct>   <fct>  <dbl>      <dbl> <dbl>
 1 Nude      0.3 dry     1      175.       0.113  44.2
 2 Nude      0.3 dry     2      168.       0.112  44.6
 3 Nude      0.3 dry     3      176.       0.112  44.6
 4 Nude      1   dry     1      176        0.099  50.5
 5 Nude      1   dry     2      162.       0.101  49.5
 6 Nude      1   dry     3      171.       0.101  49.5
 7 Nude      2.5 dry     1      153.       0.058  86.2
 8 Nude      2.5 dry     2      169.       0.056  89.3
 9 Nude      2.5 dry     3      158.       0.058  86.2
10 LowCurv   0.3 dry     1       62.6      0.42   11.9
# … with 26 more rows

To calculate the heat loss at 30C with radiation, we subtract the solar influx from the temperature corrected heat loss:

\[Heat\ loss (W/m^2)_{(30C\ with\ radiation)} = Heat\ loss (W/m^2)_{(30C\ no\ radiation)}- solar\ influx(W/m^2) \]

# A tibble: 36 × 5
   wig      wind wet_dry resistance trial
   <fct>   <dbl> <fct>        <dbl> <fct>
 1 Nude      0.3 dry          0.237 1    
 2 Nude      0.3 dry          0.224 2    
 3 Nude      0.3 dry          0.234 3    
 4 Nude      1   dry          0.324 1    
 5 Nude      1   dry          0.292 2    
 6 Nude      1   dry          0.318 3    
 7 Nude      2.5 dry          0.088 1    
 8 Nude      2.5 dry          0.089 2    
 9 Nude      2.5 dry          0.091 3    
10 LowCurv   0.3 dry          1.46  1    
# … with 26 more rows
# A tibble: 36 × 7
   wig      wind wet_dry trial influx   off     on
   <fct>   <dbl> <fct>   <fct>  <dbl> <dbl>  <dbl>
 1 Nude      0.3 dry     1      175.   44.2 -131. 
 2 Nude      0.3 dry     2      168.   44.6 -124. 
 3 Nude      0.3 dry     3      176.   44.6 -131. 
 4 Nude      1   dry     1      176    50.5 -125. 
 5 Nude      1   dry     2      162.   49.5 -113. 
 6 Nude      1   dry     3      171.   49.5 -122. 
 7 Nude      2.5 dry     1      153.   86.2  -66.7
 8 Nude      2.5 dry     2      169.   89.3  -79.9
 9 Nude      2.5 dry     3      158.   86.2  -72.2
10 LowCurv   0.3 dry     1       62.6  11.9  -50.7
# … with 26 more rows
# A tibble: 94 × 7
   wig      wind wet_dry trial influx   off     on
   <fct>   <dbl> <fct>   <fct>  <dbl> <dbl>  <dbl>
 1 Nude      0.3 dry     1      175.   44.2 -131. 
 2 Nude      0.3 dry     2      168.   44.6 -124. 
 3 Nude      0.3 dry     3      176.   44.6 -131. 
 4 Nude      1   dry     1      176    50.5 -125. 
 5 Nude      1   dry     2      162.   49.5 -113. 
 6 Nude      1   dry     3      171.   49.5 -122. 
 7 Nude      2.5 dry     1      153.   86.2  -66.7
 8 Nude      2.5 dry     2      169.   89.3  -79.9
 9 Nude      2.5 dry     3      158.   86.2  -72.2
10 LowCurv   0.3 dry     1       62.6  11.9  -50.7
# … with 84 more rows
# A tibble: 246 × 6
   wig    wind wet_dry trial var    heatloss
   <fct> <dbl> <fct>   <fct> <chr>     <dbl>
 1 Nude    0.3 dry     1     influx    175. 
 2 Nude    0.3 dry     1     off        44.2
 3 Nude    0.3 dry     1     on       -131. 
 4 Nude    0.3 dry     2     influx    168. 
 5 Nude    0.3 dry     2     off        44.6
 6 Nude    0.3 dry     2     on       -124. 
 7 Nude    0.3 dry     3     influx    176. 
 8 Nude    0.3 dry     3     off        44.6
 9 Nude    0.3 dry     3     on       -131. 
10 Nude    1   dry     1     influx    176  
# … with 236 more rows

2 Exploratory plots

2.1 Solar Influx

Version Author Date
05389ae Tina Lasisi 2022-01-19

2.2 Heat loss

Version Author Date
05389ae Tina Lasisi 2022-01-19

3 Analyses

4 Analyses

4.1 Solar influx

4.1.1 Dry

Here, we model the effect of the wig variable on influx while correcting for wind. In case of solar influx, having hair will decrease solar influx when the hair is dry. The curvature of hair will decrease more solar influx.


Call:
lm(formula = influx ~ wind + wig, data = df_dry)

Residuals:
   Min     1Q Median     3Q    Max 
-8.106 -3.844  1.099  2.763  9.053 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  175.4796     1.3680 128.275  < 2e-16 ***
wind          -6.1330     0.6134  -9.998 6.46e-15 ***
wigLowCurv  -110.1778     1.5923 -69.195  < 2e-16 ***
wigMidCurv  -132.2778     1.5923 -83.075  < 2e-16 ***
wigHighCurv -152.0333     1.5923 -95.482  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.777 on 67 degrees of freedom
Multiple R-squared:  0.994, Adjusted R-squared:  0.9936 
F-statistic:  2755 on 4 and 67 DF,  p-value: < 2.2e-16

4.1.2 Wet

Here, we repeat the same modelling process for the wet data.

When the hair is sweaty, having curliest hair would decrease solar influx.


Call:
lm(formula = influx ~ wind + wig, data = df_wet)

Coefficients:
(Intercept)         wind   wigLowCurv   wigMidCurv  wigHighCurv  
     53.511      -12.857       -9.392      -15.259      -10.537  


Call:
lm(formula = influx ~ wind + wig, data = df_wet)

Residuals:
     Min       1Q   Median       3Q      Max 
-13.4541  -4.2173  -0.8525   3.9887  15.0463 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   53.511      4.577  11.690 1.50e-09 ***
wind         -12.857      1.969  -6.529 5.15e-06 ***
wigLowCurv    -9.392      5.102  -1.841  0.08318 .  
wigMidCurv   -15.259      5.102  -2.991  0.00822 ** 
wigHighCurv  -10.537      5.361  -1.966  0.06591 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 8.425 on 17 degrees of freedom
Multiple R-squared:  0.7498,    Adjusted R-squared:  0.6909 
F-statistic: 12.74 on 4 and 17 DF,  p-value: 5.664e-05

4.2 Heat loss

4.2.1 Dry

4.2.1.1 Radiation off

Here, we model the effect of the wig variable on the off (heat loss without radiation) variable while correcting for wind.

when the radiation is off, having straight or curly hair will decrease the heat loss.

# A tibble: 72 × 7
   wig      wind wet_dry trial influx   off     on
   <fct>   <dbl> <fct>   <fct>  <dbl> <dbl>  <dbl>
 1 Nude      0.3 dry     1      175.   44.2 -131. 
 2 Nude      0.3 dry     2      168.   44.6 -124. 
 3 Nude      0.3 dry     3      176.   44.6 -131. 
 4 Nude      1   dry     1      176    50.5 -125. 
 5 Nude      1   dry     2      162.   49.5 -113. 
 6 Nude      1   dry     3      171.   49.5 -122. 
 7 Nude      2.5 dry     1      153.   86.2  -66.7
 8 Nude      2.5 dry     2      169.   89.3  -79.9
 9 Nude      2.5 dry     3      158.   86.2  -72.2
10 LowCurv   0.3 dry     1       62.6  11.9  -50.7
# … with 62 more rows

Call:
lm(formula = off ~ wind + wig, data = df_dry_off[1:36, ])

Residuals:
    Min      1Q  Median      3Q     Max 
-8.0046 -4.0646  0.1855  2.7241 14.8000 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   46.192      2.279   20.27  < 2e-16 ***
wind          11.317      1.022   11.07 2.65e-12 ***
wigLowCurv   -40.449      2.653  -15.25 5.91e-16 ***
wigMidCurv   -40.838      2.653  -15.39 4.54e-16 ***
wigHighCurv  -38.445      2.653  -14.49 2.37e-15 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 5.627 on 31 degrees of freedom
Multiple R-squared:  0.9373,    Adjusted R-squared:  0.9292 
F-statistic: 115.8 on 4 and 31 DF,  p-value: < 2.2e-16

4.2.1.2 Radiation on

when radiation is on and hair is dry, the heat loss would increase given the presence of hair. The curvature of hair would increase the heat loss.


Call:
lm(formula = on ~ wind + wig, data = df_dry_on[1:36, ])

Residuals:
     Min       1Q   Median       3Q      Max 
-13.6579  -4.8720  -0.0048   3.3664  18.9682 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -129.287      2.854  -45.29  < 2e-16 ***
wind          17.450      1.280   13.63 1.23e-14 ***
wigLowCurv    69.729      3.322   20.99  < 2e-16 ***
wigMidCurv    91.439      3.322   27.52  < 2e-16 ***
wigHighCurv  113.588      3.322   34.19  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 7.048 on 31 degrees of freedom
Multiple R-squared:  0.9798,    Adjusted R-squared:  0.9771 
F-statistic:   375 on 4 and 31 DF,  p-value: < 2.2e-16

4.2.2 Wet

4.2.2.1 Radiation off

Here, we model the effect of the wig variable on the off (heat loss without radiation) variable while correcting for wind.

when the radiation is off, having straight or curly hair will decrease the heat loss.


Call:
lm(formula = off ~ wind + wig, data = df_wet_off)

Residuals:
    Min      1Q  Median      3Q     Max 
-32.423  -5.988   2.672   5.875  40.867 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  171.047      9.142   18.71 8.88e-13 ***
wind          42.586      3.933   10.83 4.77e-09 ***
wigLowCurv  -116.039     10.191  -11.39 2.24e-09 ***
wigMidCurv  -129.155     10.191  -12.67 4.35e-10 ***
wigHighCurv -134.404     10.707  -12.55 5.04e-10 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 16.83 on 17 degrees of freedom
Multiple R-squared:  0.955, Adjusted R-squared:  0.9444 
F-statistic: 90.24 on 4 and 17 DF,  p-value: 3.238e-11

4.2.2.2 Radiation on

when the radiation is on, having straight or curly hair will decrease the heat loss.


Call:
lm(formula = on ~ wind + wig, data = df_wet_on)

Residuals:
    Min      1Q  Median      3Q     Max 
-47.469 -11.283   4.403   6.848  54.322 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  117.536     12.729   9.234 4.91e-08 ***
wind          55.442      5.476  10.124 1.29e-08 ***
wigLowCurv  -106.646     14.189  -7.516 8.45e-07 ***
wigMidCurv  -113.896     14.189  -8.027 3.49e-07 ***
wigHighCurv -123.867     14.908  -8.309 2.17e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 23.43 on 17 degrees of freedom
Multiple R-squared:  0.9255,    Adjusted R-squared:  0.9079 
F-statistic: 52.77 on 4 and 17 DF,  p-value: 2.307e-09

R version 4.1.2 (2021-11-01)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 10.16

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] ggstatsplot_0.9.0 fs_1.5.0          kableExtra_1.3.4  knitr_1.36       
 [5] forcats_0.5.1     stringr_1.4.0     dplyr_1.0.7       purrr_0.3.4      
 [9] readr_2.0.2       tidyr_1.1.4       tibble_3.1.5      ggplot2_3.3.5    
[13] tidyverse_1.3.1   workflowr_1.6.2  

loaded via a namespace (and not attached):
 [1] bit64_4.0.5            lubridate_1.8.0        RColorBrewer_1.1-2    
 [4] insight_0.14.5         webshot_0.5.2          httr_1.4.2            
 [7] rprojroot_2.0.2        tools_4.1.2            backports_1.2.1       
[10] utf8_1.2.2             R6_2.5.1               statsExpressions_1.2.0
[13] DBI_1.1.1              colorspace_2.0-2       withr_2.4.2           
[16] tidyselect_1.1.1       bit_4.0.4              compiler_4.1.2        
[19] git2r_0.28.0           performance_0.8.0      cli_3.1.0             
[22] rvest_1.0.2            xml2_1.3.2             labeling_0.4.2        
[25] bayestestR_0.11.5      BWStest_0.2.2          scales_1.1.1          
[28] mvtnorm_1.1-3          mc2d_0.1-21            multcompView_0.1-8    
[31] systemfonts_1.0.3      digest_0.6.28          rmarkdown_2.11        
[34] svglite_2.0.0          WRS2_1.1-3             pkgconfig_2.0.3       
[37] htmltools_0.5.2        highr_0.9              dbplyr_2.1.1          
[40] fastmap_1.1.0          rlang_0.4.12           readxl_1.3.1          
[43] rstudioapi_0.13        SuppDists_1.1-9.5      farver_2.1.0          
[46] jquerylib_0.1.4        generics_0.1.0         jsonlite_1.7.2        
[49] vroom_1.5.5            magrittr_2.0.1         patchwork_1.1.1       
[52] parameters_0.15.0      Rcpp_1.0.7             munsell_0.5.0         
[55] fansi_0.5.0            lifecycle_1.0.1        stringi_1.7.5         
[58] whisker_0.4            yaml_2.2.1             MASS_7.3-54           
[61] plyr_1.8.6             paletteer_1.4.0        grid_4.1.2            
[64] parallel_4.1.2         promises_1.2.0.1       crayon_1.4.1          
[67] PMCMRplus_1.9.3        haven_2.4.3            hms_1.1.1             
[70] zeallot_0.1.0          pillar_1.6.4           kSamples_1.2-9        
[73] reprex_2.0.1           glue_1.4.2             evaluate_0.14         
[76] modelr_0.1.8           vctrs_0.3.8            tzdb_0.1.2            
[79] httpuv_1.6.3           cellranger_1.1.0       gtable_0.3.0          
[82] rematch2_2.1.2         reshape_0.8.8          assertthat_0.2.1      
[85] datawizard_0.2.1       cachem_1.0.6           xfun_0.27             
[88] correlation_0.7.1      broom_0.7.9            Rmpfr_0.8-7           
[91] later_1.3.0            viridisLite_0.4.0      memoise_2.0.0         
[94] gmp_0.6-2.1            ellipsis_0.3.2