Obtenir un reporting automatique des analyses statistiques

reporting automatisé des analyses statistiques avec R
Image par mohamed Hassan de Pixabay

Depuis quelque temps, j’entends régulièrement parler du package easystat. C’est un “super” package qui contient plusieurs petits packages (un peu comme tidyverse), mais ici pour “apprivoiser, discipliner et exploiter les statistiques R effrayantes et leurs modèles embêtants” (ce sont les développeurs du package qui le disent : https://github.com/easystats/easystats).

Ce “super” package easystat contient notamment le package report qui permet de faire du reporting automatisé des résultats de différentes analyses statistiques. Autrement dit, vous faites un test statistique (un test de Student par exemple), ou une modélisation (une régression linéaire par exemple), et le package génère pour vous le texte des résultats, que vous n’aurez plus qu’à inclure dans votre rapport d’analyse statistique !

La promesse est belle, je vous propose de voir ensemble ce que ça donne concrètement !

Le package report

Installer le package report

D’après ma compréhension, le package report ne peut être installé qu’avec le package easystat.  Et ce package easystat ne se trouve pas sur CRAN, mais sur un répertoire GitHub.

Pour l’installer, il est nécessaire  d’utiliser le package devtools (qui permet d’installer un package depuis un repo GitHub), et je pense (mais je n’en suis pas certaine) qu’il est également nécessaire d’installer Rtools40.

Pour vous éviter d’avoir des problèmes avec Rtools40, il est recommandé de désinstaller la version précédente, puis d’installer Rtools40.

Une fois RTools40 installé, voici les commandes à employer :

install.package("devtools")
library(devtools)
devtools::install_github("easystats/easystats")
library("easystats") 

A ce stade, le package report n’est pas installé (alors que tous les autres packages d’easystat ( correlation, modelbased, bayestestR, parameters, performance, effectsize, insight et see) , le sont !

Pour installer report, d’après ce que j’ai compris, il faut encore employer les commandes suivantes :

easystats::install_easystats_latest()
devtools::install_github("easystats/report")
library(report) 

Normalement, cette fois, c’est tout bon !

Les data employées

Pour tester ce package, j’ai employé les données heart_disease qui sont incluses dans le package funModeling. Il s’agit de données qui concernent un essai clinique en cardiologie. Elles comportent 303 patients, avec un certain nombre de caractéristiques, comme l‘âge, le sexe, la fréquence cardiaque maximale, des constantes sanguines, etc…

Vous pouvez les visualiser en employant les commandes suivantes :

install.packages("funModeling")
library(funModeling)
View(heart_disease) 

Reporting d'une comparaison de deux moyennes

Pour commencer, nous allons faire un test t de Student pour comparer la fréquence cardiaque maximale entre les hommes et les femmes.

t.test(heart_disease$max_heart_rate~heart_disease$gender, var.equal=TRUE)
## 
##  Two Sample t-test
## 
## data:  heart_disease$max_heart_rate by heart_disease$gender
## t = 0.84528, df = 301, p-value = 0.3986
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -3.163682  7.927970
## sample estimates:
## mean in group female   mean in group male 
##             151.2268             148.8447 

Pour obtenir le reporting, il suffit d’inclure la fonction t.test(), dans la fonction report() :

report(t.test(heart_disease$max_heart_rate~heart_disease$gender, var.equal=TRUE)) 

Nous pouvons aussi employer une syntaxe tidyverse compatible :

library(tidyverse)

t.test(heart_disease$max_heart_rate~heart_disease$gender, var.equal=TRUE) %>% 
	report() 
## Effect sizes were labelled following Cohen's (1988) recommendations.
## 
## The Two Sample t-test testing the difference of heart_disease$max_heart_rate by heart_disease$gender 
(mean in group female = 151.23, mean in group male = 148.84) suggests that the effect is negative, 
not significant and very small (difference = -2.38, 95% CI [-3.16, 7.93], t(301) = 0.85, p = 0.399; 
Cohen's d = 0.10, 95% CI [-0.14, 0.35]) 

Nous pouvons voir que le reporting est très complet, et qu’il contient même le calcul et l’interprétation de la taille de l’effet, ce que je trouve intéressant.

L’effect size (ou taille de l’effet) est un paramètre qui permet d’évaluer la taille de l’effet (de la différence de moyenne dans le cas du test t ). C’est un paramètre qui est indépendant de la p-value.

Pour un test t, par exemple, l’effect size est le ratio de la différence de moyenne sur l’écart type des données :

\[ES=\frac{m_1 – m_2}{s}\]

Je trouve cette notion intéressante car,  pour une même différence entre les moyennes et une même dispersion des données, un test peut avoir une p-value <0.05 si le nombre des données est important, ou >0.05 si le nombre des données est faible.

Ainsi, un test statistique peut mettre une évidence une différence significative infime (et qui n’a aucun sens métier) car le nombre des données est très important (on parle de sur-puissance). Et à l’inverse, un test statistique peut ne pas mettre une évidence une différence une différence observée très importante car le nombre des données est faible (on parle de sous-puissance).

Un reporting légèrement plus court (il ne contient pas l’intervalle de confiance de l’effect size) peut être obtenu en employant une fonction `summary()`, comme ceci :

t.test(heart_disease$max_heart_rate~heart_disease$gender, var.equal=TRUE) %>% 
	report() %>% 
	summary() 

Plus intéressant, le reporting peut également être obtenu sous la forme d’un tableau (data frame), en employant :

t.test(heart_disease$max_heart_rate~heart_disease$gender, var.equal=TRUE) %>% 
	report() %>% 
	data.frame() 
##                      Parameter                Group Mean_Group1 Mean_Group2
## 1 heart_disease$max_heart_rate heart_disease$gender    151.2268    148.8447
##   Difference   CI    CI_low CI_high         t df_error        p
## 1  -2.382144 0.95 -3.163682 7.92797 0.8452781      301 0.398627
##              Method  Cohens_d Cohens_d_CI_low Cohens_d_CI_high
## 1 Two Sample t-test 0.1040882      -0.1374927        0.3454964 

Ce format en data.frame permet une exportation très facile vers un format csv.
Le format texte, quant à lui, est également très facilement exportable vers un document word (voir plus loin, partie exportation)

t.test(heart_disease$max_heart_rate~heart_disease$gender, var.equal=TRUE) %>% 
	report() %>% 
	summary() 

Si nous utilisons un test de Welch (variances inégales), plutôt qu’un test t, la précision est bien apporté dans le reporting :

## The Welch Two Sample t-test testing the difference of heart_disease$max_heart_rate by heart_disease$gender 
(mean in group female = 151.23, mean in group male = 148.84) suggests that the effect is negative, 
not significant and very small (difference = -2.38, 95% CI [-2.81, 7.57], t(223.85) = 0.90, p = 0.367, 
Cohen's d = 0.11) 

Par contre, actuellement en tout cas, le test de Wilcoxon n’est pas pris en charge :

report(wilcox.test(heart_disease$max_heart_rate~heart_disease$gender)) 
## Error in report_effectsize.htest(x, ...): This type of test is not supported yet. Please open an issue 
on https://github.com/easystats/report/issues 

Reporting d’une ANOVA à un facteur

Pour illustrer cela, nous allons faire une ANOVA pour comparer globalement les moyennes des fréquences cardiaques maximales dans les différents groupes de douleurs de poitrine (variable chest_pain : facteur à 4 modalités)

Il est nécessaire d’employer la fonction aov() pour réaliser l’ANOVA, car si vous employer la fonction lm() le reporting correspond à un modèle linéaire.

mod.aov <- aov(max_heart_rate~chest_pain, data=heart_disease)
summary(mod.aov)
##              Df Sum Sq Mean Sq F value   Pr(>F)    
## chest_pain    3  23503    7834   17.41 1.91e-10 ***
## Residuals   299 134523     450                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
report(mod.aov)
## The ANOVA (formula: max_heart_rate ~ chest_pain) suggests that:
## 
##   - The main effect of chest_pain is significant and large (F(3, 299) = 17.41, p < .001; Eta2 = 0.15, 90% CI [0.09, 0.21])
## 
## Effect sizes were labelled following Field's (2013) recommendations. 

Là encore, le reporting me semble très satisfaisant.

En revanche, si on emploie une fonction lm(), le reporting n’est pas intéressant, car l’interprétation n’est pas faite en fonction du niveau de référence (ici le groupe 1).

mod.lm <- lm(max_heart_rate~chest_pain, data=heart_disease)
summary(mod.lm)
## 
## Call:
## lm(formula = max_heart_rate ~ chest_pain, data = heart_disease)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -69.681 -12.182   1.593  15.950  45.319 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 155.9565     4.4228  35.262  < 2e-16 ***
## chest_pain2   6.4635     5.3441   1.209  0.22744    
## chest_pain3  -0.5495     4.9792  -0.110  0.91219    
## chest_pain4 -15.2760     4.7630  -3.207  0.00149 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21.21 on 299 degrees of freedom
## Multiple R-squared:  0.1487, Adjusted R-squared:  0.1402 
## F-statistic: 17.41 on 3 and 299 DF,  p-value: 1.907e-10 
report(mod.lm)
## We fitted a linear model (estimated using OLS) to predict max_heart_rate with chest_pain 
## (formula: max_heart_rate ~ chest_pain). The model explains a significant and moderate 
## proportion of variance (R2 = 0.15, F(3, 299) = 17.41, p < .001, adj. R2 = 0.14). 
## The model's intercept, corresponding to chest_pain = 1, is at 155.96 (95% CI [147.25, 164.66],
## t(299) = 35.26, p < .001). Within this model:
## 
##   - The effect of chest_pain [2] is non-significantly positive (beta = 6.46, 
## 95% CI [-4.05, 16.98], t(299) = 1.21, p = 0.227; Std. beta = 0.28, 95% CI [-0.18, 0.74])
##   - The effect of chest_pain [3] is non-significantly negative (beta = -0.55, 
## 95% CI [-10.35, 9.25], t(299) = -0.11, p = 0.912; Std. beta = -0.02, 
##95% CI [-0.45, 0.40])
##   - The effect of chest_pain [4] is significantly negative (beta = -15.28,
## 95% CI [-24.65, -5.90], t(299) = -3.21, p < .01; Std. beta = -0.67, 95% CI [-1.08, -0.26])
## 
## Standardized parameters were obtained by fitting the model on a standardized version 
## of the dataset. 

Reporting d’une Anova à deux facteurs avec interaction

Pour cela, nous allons faire une ANOVA pour évaluer les effets du groupe de douleurs et du sexe, et de leur interaction, sur les moyennes des fréquences cardiaques maximales.

Dans cette situation j’avais envie de voir ce qu’il se passe lorsqu’on réalise une ANOVA à deux facteurs (faire lien avec mes articles) avec interaction, et que l’on souhaite des résultats des carrés de type III.

anova2.fit <- aov(max_heart_rate~chest_pain*gender, data=heart_disease, contrasts = list(chest_pain=contr.sum, gender=contr.sum))

library(car)
Anova(anova2.fit, type=3)
## Anova Table (Type III tests)
## 
## Response: max_heart_rate
##                    Sum Sq  Df   F value    Pr(>F)    
## (Intercept)       3182679   1 7103.8104 < 2.2e-16 ***
## chest_pain          16251   3   12.0907  1.74e-07 ***
## gender                 85   1    0.1898    0.6634    
## chest_pain:gender    2309   3    1.7178    0.1634    
## Residuals          132167 295                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Si on regarde le reporting, on voit qu’il ne correspond pas aux résultats des carrés de type III :

report(anova2.fit)
## The ANOVA (formula: max_heart_rate ~ chest_pain * gender) suggests that:
## 
##   - The main effect of chest_pain is significant and large (F(3, 295) = 17.49, 
## p < .001; Eta2 (partial) = 0.15, 90% CI [0.09, 0.21])
##   - The main effect of gender is not significant and very small (F(1, 295) = 0.11, 
## p = 0.746; Eta2 (partial) = 3.57e-04, 90% CI [0.00, 0.01])
##   - The interaction between chest_pain and gender is not significant and small 
## (F(3, 295) = 1.72, p = 0.163; Eta2 (partial) = 0.02, 90% CI [0.00, 0.04])
## 
## Effect sizes were labelled following Field's (2013) recommendations. 

En réalité, il s’agit des carrés de type II :

Anova(anova2.fit, type=2)

## Anova Table (Type II tests)
##
## Response: max_heart_rate
## Sum Sq Df F value Pr(>F)
## chest_pain 23176 3 17.2431 2.416e-10 ***
## gender 47 1 0.1053 0.7458
## chest_pain:gender 2309 3 1.7178 0.1634
## Residuals 132167 295
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Tout n’est quand même pas à jeter, il vous suffira de remplacer (à la main dans votre documents word) les chiffres des résultats de type II par ceux de type III !

Reporting d’une régression linéaire simple

Ici nous étudions la relation entre la fréquence cardiaque maximale et l’âge

rls.fit <- lm(max_heart_rate~age, data=heart_disease)
summary(rls.fit )
## 
## Call:
## lm(formula = max_heart_rate ~ age, data = heart_disease)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -66.088 -12.040   3.965  15.937  44.955 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 203.8634     7.3991  27.553  < 2e-16 ***
## age          -0.9966     0.1341  -7.433 1.11e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21.06 on 301 degrees of freedom
## Multiple R-squared:  0.1551, Adjusted R-squared:  0.1523 
## F-statistic: 55.25 on 1 and 301 DF,  p-value: 1.109e-12 
report(rls.fit )
## We fitted a linear model (estimated using OLS) to predict max_heart_rate with age 
## (formula: max_heart_rate ~ age). The model explains a significant and moderate proportion 
## of variance (R2 = 0.16, F(1, 301) = 55.25, p < .001, adj. R2 = 0.15).
## The model's intercept, corresponding to age = 0, is at 203.86 (95% CI [189.30, 218.42], 
## t(301) = 27.55, p < .001). Within this model:
## 
##   - The effect of age is significantly negative (beta = -1.00, 95% CI [-1.26, -0.73], 
## t(301) = -7.43,  p < .001; Std. beta = -0.39, 95% CI [-0.50, -0.29])
## 
## Standardized parameters were obtained by fitting the model on a standardized version of the dataset. 

De mon point de vu, et d’après ma pratique, l’interprétation de l’intercept est rarement intéressant, mais bon…qui peut le plus peut le moins, rien ne vous empêche ensuite de retirer cette partie. Par contre, ce que j’aime bien c’est le calcul du coefficient standardisé (qui est sans doute plus utile en régression linéaire multiple pour avoir une idée des variables qui sont les plus liées à la réponse)

lm(max_heart_rate~age, data=heart_disease) %>% 
    report()
## We fitted a linear model (estimated using OLS) to predict max_heart_rate with age
## (formula: max_heart_rate ~ age). The model explains a significant and moderate proportion
## of variance (R2 = 0.16, F(1, 301) = 55.25, p < .001, adj. R2 = 0.15). 
## The model's intercept, corresponding to age = 0, is at 203.86 (95% CI [189.30, 218.42]
## , t(301) = 27.55, p < .001). Within this model:
## 
##   - The effect of age is significantly negative (beta = -1.00, 95% CI [-1.26, -0.73], 
## t(301) = -7.43, p < .001; Std. beta = -0.39, 95% CI [-0.50, -0.29])
##  
## Standardized parameters were obtained by fitting the model on a standardized
##version of the dataset.     

Reporting d’une corrélation

Ici nous réalisons une corrélation de Pearson entre la fréquence cardiaque maximale et l’âge :

report(cor.test(heart_disease$max_heart_rate,heart_disease$age))
## Effect sizes were labelled following Funder's (2019) recommendations.
## 
## The Pearson's product-moment correlation between heart_disease$max_heart_rate 
## and heart_disease$age is negative, significant and large (r = -0.39, 95% CI [-0.48, -0.29], 
## t(301) = -7.43, p < .001) 

Puis ici avec l’approche de Spearman (approche non paramétrique):

report(cor.test(heart_disease$max_heart_rate,heart_disease$age, method="spearman"))
## Effect sizes were labelled following Funder's (2019) recommendations.
## 
## The Spearman's rank correlation rho between heart_disease$max_heart_rate 
## and heart_disease$age is negative, significant and large (rho = -0.39, S = 6.45e+06, 
## p < .001) 

Reporting d’une régression linéaire multiple

Ici nous étudions les liens entre entre la fréquence cardiaque maximale et l’âge et le cholestérol sanguin :

rlm.fit <- lm(max_heart_rate~age+serum_cholestoral, data=heart_disease)
summary(rlm.fit )
## 
## Residuals:
##     Min      1Q  Median      3
## Call:
## lm(formula = max_heart_rate ~ age + serum_cholestoral, data = heart_disease)
## Q     Max 
## -65.188 -12.291   4.784  15.116  43.614 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       197.25051    8.56170  23.039  < 2e-16 ***
## age                -1.04024    0.13681  -7.604 3.73e-13 ***
## serum_cholestoral   0.03643    0.02388   1.525    0.128    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21.02 on 300 degrees of freedom
## Multiple R-squared:  0.1616, Adjusted R-squared:  0.156 
## F-statistic: 28.91 on 2 and 300 DF,  p-value: 3.303e-12 
report(rlm.fit )
## We fitted a linear model (estimated using OLS) to predict max_heart_rate with age and 
## serum_cholestoral (formula: max_heart_rate ~ age + serum_cholestoral). 
## The model explains a significant and moderate proportion of variance (R2 = 0.16, F(2, 300)
## = 28.91, p < .001, adj. R2 = 0.16). 
## The model's intercept, corresponding to age = 0 and serum_cholestoral = 0, is at 197.25
## (95% CI [180.40, 214.10], t(300) = 23.04, p < .001). Within this model:
## 
##   - The effect of age is significantly negative (beta = -1.04,
## 95% CI [-1.31, -0.77], t(300) = -7.60, p < .001; Std. beta = -0.41, 95% CI [-0.52, -0.30])
##   - The effect of serum_cholestoral is non-significantly positive (beta = 0.04, 
## 95% CI [-0.01, 0.08], t(300) = 1.53, p = 0.128; Std. beta = 0.08, 95% CI [-0.02, 0.19])
## 
## Standardized parameters were obtained by fitting the model on a standardized version
## of the dataset. 

Reporting d’une régression logistique

Il s’agit ici d’employer une régression logistique pour étudier le lien entre le fait d’avoir ou pas une pathologie cardiaque (variable has_heart_disease) et le sexe et la fréquence cardiaque maximale :

glm.fit <- glm(has_heart_disease~gender+max_heart_rate, family=binomial, data=heart_disease)

summary(glm.fit)
## 
## Call:
## glm(formula = has_heart_disease ~ gender + max_heart_rate, family = binomial, 
##     data = heart_disease)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.1779  -0.8724  -0.4687   0.9334   2.1654  
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)     5.601857   1.012870   5.531 3.19e-08 ***
## gendermale      1.406210   0.300763   4.675 2.93e-06 ***
## max_heart_rate -0.045089   0.006757  -6.673 2.50e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 417.98  on 302  degrees of freedom
## Residual deviance: 336.67  on 300  degrees of freedom
## AIC: 342.67
## 
## Number of Fisher Scoring iterations: 4 
report(glm.fit)
## We fitted a logistic model (estimated using ML) to predict has_heart_disease with 
## gender and max_heart_rate (formula: has_heart_disease ~ gender + max_heart_rate). 
## The model's explanatory power is moderate (Tjur's R2 = 0.24). The model's intercept,
## corresponding to gender = female and max_heart_rate = 0, is at 5.60 (95% CI [3.68, 7.67], 
## p < .001). Within this model:
## 
##   - The effect of gender [male] is significantly positive (beta = 1.41, 95% CI [0.83, 2.01], 
## p < .001; Std. beta = 1.41, 95% CI [0.83, 2.01])
##   - The effect of max_heart_rate is significantly negative (beta = -0.05,
## 95% CI [-0.06, -0.03], p < .001; Std. beta = -1.03, 95% CI [-1.35, -0.74])
## 
## Standardized parameters were obtained by fitting the model on a standardized version 
## of the dataset. 95% Confidence Intervals (CIs) and p-values were computed using 

J’aurais bien aimé voir le calcul des odds-ratio et de leur intervalle de confiance dans ce reporting.

Reporting d’un GLM de comptage

Ici, j’utilise un GLM pour étudier le lien entre la variable num_vessels_flour (variable de comptage : nombre de vaisseaux majeurs (0-3) colorés par fluoroscopie). J’emploie une loi quasi binomiale pour voir si les intervalles de confiance du reporting correspondent bien à cette loi de quasi-poisson. C’est le cas !

glm_count.fit <- glm(num_vessels_flour~gender+max_heart_rate, family=quasipoisson, data=heart_disease)
summary(glm_count.fit)
## 
## Call:
## glm(formula = num_vessels_flour ~ gender + max_heart_rate, family = quasipoisson, 
##     data = heart_disease)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.0494  -1.0870  -0.9198   0.5051   2.4299  
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     1.525100   0.488558   3.122  0.00198 ** 
## gendermale      0.237104   0.180415   1.314  0.18979    
## max_heart_rate -0.014370   0.003198  -4.493 1.01e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for quasipoisson family taken to be 1.259176)
## 
##     Null deviance: 396.84  on 298  degrees of freedom
## Residual deviance: 368.89  on 296  degrees of freedom
##   (4 observations deleted due to missingness)
## AIC: NA
## 
## Number of Fisher Scoring iterations: 6 
confint(glm_count.fit)
##                      2.5 %       97.5 %
## (Intercept)     0.55102546  2.467038925
## gendermale     -0.10778955  0.601379763
## max_heart_rate -0.02059606 -0.008051034 
report(glm_count.fit)
## We fitted a poisson model (estimated using ML) to predict num_vessels_flour with gender
## and max_heart_rate (formula: num_vessels_flour ~ gender + max_heart_rate). 
##The model's explanatory power is weak (Nagelkerke's R2 = 0.12).
## The model's intercept, corresponding to gender = female and max_heart_rate = 0, is at 1.53 
## (95% CI [0.55, 2.47], t(296) = 3.12, p < .01). Within this model:
## 
##   - The effect of gender [male] is non-significantly positive (beta = 0.24, 
## 95% CI [-0.11, 0.60], t(296) = 1.31, p = 0.190; Std. beta = 0.24, 95% CI [-0.11, 0.60])
##   - The effect of max_heart_rate is significantly negative (beta = -0.01, 
## 95% CI [-0.02, -8.05e-03], t(296) = -4.49, p < .001; Std. beta = -0.33, 
## 95% CI [-0.47, -0.18])
## 
## Standardized parameters were obtained by fitting the model on a standardized version 
## of the dataset. 95% Confidence Intervals (CIs) and p-values were computed using 

Je n’ai pas essayé, mais dans la doc du package https://github.com/easystats/report, il est écrit que les modèles mixtes et les modèles Bayésiens sont pris en charge.

Exporter le reporting vers word ou Excel

Si vous souhaitez exporter le reporting en version texte dans un document word, il suffit d’employer la fonction capture.output(), comme ceci :

# creation d'un dossier reports à la racine du projet R
dir.create("reports")
capture.output(report(rlm.fit ,file="reports/report_rlm.doc"))
 

Si vous travaillez en Rmarkdown, le reporting est généré automatiquement dans le document rendu. Vous pouvez utiliser la fonction kable() pour formater le data frame du reporting, comme ceci :

library(knitr)
t.test(heart_disease$max_heart_rate~heart_disease$gender, var.equal=TRUE) %>% 
    report() %>% 
    data.frame() %>% 
    kable() 

Conclusion

Je suis plutôt satisfaite de ce package. Je suis assez persuadée qu’il a toute son utilité auprès de ceux qui débutent dans l’analyse statistique de leurs données. Il me semble que ça peut être une bonne aide, pour vérifier que l’on interprète correctement les résultats. Et vous qu’en pensez-vous ? Est-ce que vous allez l’employer ?

 En attendant vos commentaires, si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don libre sur sa page Tipeee 

Poursuivez votre lecture

4 réponses

  1. Je n’ai pas réussi a installer le package, j’ai installé Rtools40 comme prévu. Mais lorsque je fais la commande en question, j’ai
    ” HTTP error 403.
    API rate limit exceeded for XXX. (But here’s the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)

    Rate limit remaining: 0/60
    Rate limit reset at: 2021-02-05 07:36:08 UTC

    Si il y a eu beaucoup d’infos sur ce package, peut être que tout le monde utilise la même API qui est visiblement saturée …

    1. Bonjour Florian

      Au départ, j’ai obtenu la même erreur ! Mais cela a été temporaire, j’ai finalement pu télécharger le package lorsque j’ai réessayé, quelques heures plus tard.
      J’espère que cela vous aide.
      Bonne continuation

  2. Bonjour,
    Merci pour cet article.
    Je partage votre avis sur l’intérêt de ce package. Il me semble très intéressant pour vérifier l’absence de contre sens dans les interprétations et la facilité de retranscription dans un texte de commentaires de résultat.

    Je l’aurais volontiers utilisé pour tester mes interprétations avant de rendre mon dossier!
    Je le garde au chaud cependant pour de futures statistiques et vais le conseiller aux personnes en formation avec moi.

  3. Bonjour,
    un package intéressant mais qui reste encore un peu léger. Trop de choses ne sont pas supportées pour en permettre une réelle utilisation. Comme vous le montrez, même le test de wilcoxon n’est pas encore implémenté.
    Il faut lui souhaiter un bel avenir car c’est un très beau projet.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *