strengejacke / sjPlot

sjPlot - Data Visualization for Statistics in Social Science
https://strengejacke.github.io/sjPlot
608 stars 92 forks source link

`digits.p = 1` gives incorrect p value #789

Open felixgolcher opened 3 years ago

felixgolcher commented 3 years ago

Thanks a lot for that fantastic package. It saved so much time, effort and brain for me!

Setting digits.p to 1 shows (here, at least) pvals to be below .001 which are clearly not:

set.seed(20)
m0 <- lm(extra~group, sleep[sample(nrow(sleep), 20, replace = T),]) # get right amount of data
coefficients(summary(m0))["group2","Pr(>|t|)"] # pval ~ .02
sjPlot::tab_model(m0, digits.p = 1) # shows pval as < .001  ❌
sjPlot::tab_model(m0, digits.p = 2) # shows pval ~ 02       ✅

Session Info:

> sessionInfo()
R version 4.1.1 (2021-08-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Manjaro Linux

Matrix products: default
BLAS:   /usr/lib/libopenblasp-r0.3.18.so
LAPACK: /usr/lib/liblapack.so.3.10.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

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

other attached packages:
[1] sjPlot_2.8.9

loaded via a namespace (and not attached):
 [1] zoo_1.8-9         tidyselect_1.1.1  sjlabelled_1.1.8  xfun_0.26         performance_0.8.0 purrr_0.3.4       splines_4.1.1     lattice_0.20-45   parameters_0.14.0
[10] colorspace_2.0-2  vctrs_0.3.8       generics_0.1.0    utf8_1.2.2        survival_3.2-13   rlang_0.4.11      nloptr_1.2.2.2    pillar_1.6.3      glue_1.4.2       
[19] DBI_1.1.1         modelr_0.1.8      effectsize_0.5    emmeans_1.7.0     multcomp_1.4-17   lifecycle_1.0.1   sjmisc_2.8.7      munsell_0.5.0     gtable_0.3.0     
[28] bayestestR_0.11.0 mvtnorm_1.1-3     codetools_0.2-18  coda_0.19-4       knitr_1.36        datawizard_0.2.1  fansi_0.5.0       Rcpp_1.0.7        broom_0.7.9      
[37] TH.data_1.1-0     xtable_1.8-4      scales_1.1.1      backports_1.2.1   ggeffects_1.1.1   lme4_1.1-27.1     ggplot2_3.3.5     insight_0.14.4    dplyr_1.0.7      
[46] grid_4.1.1        tools_4.1.1       sjstats_0.18.1    sandwich_3.0-1    magrittr_2.0.1    tibble_3.1.5      crayon_1.4.1      tidyr_1.1.4       pkgconfig_2.0.3  
[55] MASS_7.3-54       ellipsis_0.3.2    Matrix_1.3-4      estimability_1.3  minqa_1.2.4       assertthat_0.2.1  R6_2.5.1          boot_1.3-28       nlme_3.1-153     
[64] compiler_4.1.1
felixgolcher commented 3 years ago

Another, very small point: p-vals are not zero padded, right? With digits.p set to two you get .065, but also .01 instead of the .010 some might prefer.

strengejacke commented 3 years ago

Setting digits.p to 1 shows (here, at least) pvals to be below .001 which are clearly not:

This function simply works with round(), that's why you get 0, and 0 is formatted a <0.001:

round(.02)
#> [1] 0

Created on 2021-10-16 by the reprex package (v2.0.1)

strengejacke commented 3 years ago

Another, very small point: p-vals are not zero padded, right? With digits.p set to two you get .065, but also .01 instead of the .010 some might prefer.

Do you have a reproducible example? According to the code, the formatting should be 0.0100 when digits.p = 4.

felixgolcher commented 3 years ago

This function simply works with round(), that's why you get 0, and 0 is formatted a <0.001:

Understood. Is that behavior intended though? I bet, there's a reason you did not use signif.

felixgolcher commented 3 years ago

Do you have a reproducible example? According to the code, the formatting should be 0.0100 when digits.p = 4.

I don't because you are right and I was wrong. I did not figure out the rounding thing and got mixed up.

strengejacke commented 3 years ago

I bet, there's a reason you did not use signif.

Yes, when I started working on sjPlot, I just recently switched from SPSS to R and wasn't aware of that function ;-)

felixgolcher commented 3 years ago

You switched from SPSS and immediately set out to write this gorgeous package? That's a feat. Are you interested in a MR for that or do you like it just as it is?

strengejacke commented 3 years ago

Feel free to submit a PR, that would be great!