<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Estadística, visualización de datos | J. Alcañiz Colomer</title><link>https://jacolomer.netlify.app/tag/estadistica-visualizacion-de-datos/</link><atom:link href="https://jacolomer.netlify.app/tag/estadistica-visualizacion-de-datos/index.xml" rel="self" type="application/rss+xml"/><description>Estadística, visualización de datos</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Wed, 10 Aug 2022 00:00:00 +0000</lastBuildDate><image><url>https://jacolomer.netlify.app/media/icon_hueb732ce8f834657a061e09cfbac2b917_539334_512x512_fill_lanczos_center_3.png</url><title>Estadística, visualización de datos</title><link>https://jacolomer.netlify.app/tag/estadistica-visualizacion-de-datos/</link></image><item><title>Comparación de medias</title><link>https://jacolomer.netlify.app/post/getting-started/</link><pubDate>Wed, 10 Aug 2022 00:00:00 +0000</pubDate><guid>https://jacolomer.netlify.app/post/getting-started/</guid><description>&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#0-simulando-los-datos-para-nuestro-ejemplo">0. Simulando los datos para nuestro ejemplo&lt;/a>&lt;/li>
&lt;li>&lt;a href="#1-paquetes">1. Paquetes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#2-homogeneidad-de-las-varianzas-y-normalidad">2. Homogeneidad de las varianzas y normalidad&lt;/a>&lt;/li>
&lt;li>&lt;a href="#3-diferencias-de-medias">3. Diferencias de medias&lt;/a>&lt;/li>
&lt;li>&lt;a href="#4-la-lógica-subyacente">4. La lógica subyacente&lt;/a>&lt;/li>
&lt;li>&lt;a href="#5-tamaño-del-efecto">5. Tamaño del efecto&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#51-interpretar-y-transformar-el-tamaño-del-efecto">5.1. Interpretar y transformar el tamaño del efecto&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#6-test-de-equivalencias">6. Test de equivalencias&lt;/a>&lt;/li>
&lt;li>&lt;a href="#7-representaciones-gráficas-de-diferencias-de-medias-y-distribuciones-de-dos-grupos">7. Representaciones gráficas de diferencias de medias y distribuciones de dos grupos&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#71-barplot">7.1. Barplot&lt;/a>&lt;/li>
&lt;li>&lt;a href="#72-gráficos-de-violín">7.2. Gráficos de violín&lt;/a>&lt;/li>
&lt;li>&lt;a href="#73-otros-gráficos">7.3. Otros gráficos&lt;/a>&lt;/li>
&lt;li>&lt;a href="#74-guardar-los-gráficos">7.4. Guardar los gráficos&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;h2 id="0-simulando-los-datos-para-nuestro-ejemplo">0. Simulando los datos para nuestro ejemplo&lt;/h2>
&lt;p>Primero simulamos los datos, basándonos en los parámetros del primer estudio de &lt;a href="https://science.sciencemag.org/content/332/6026/251.abstract?casa_token=VFzHSJ78wLwAAAAA:3oyCp3jtxNJJf7DBXch4CmNf0K6Q0Ttv2XXuQUZvgcnH6MQzNru95flX_vmsYO-j5X0WhhVwiezjcr_V" target="_blank" rel="noopener">Stapel y Lindenberg (2011)&lt;/a> sobre cómo influye un contexto ordenado vs desordenado en la discriminación (también simulados, je). Esto es solo para tener unos datos con los que trabajar, en cada ejemplo se explica dónde tendríamos que situar nuestras variables.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
discrimination &amp;lt;- (rnorm(n = 40, mean = 5.12, sd = 1.01)) #Generamos los datos para la primera media (del grupo 1)
data0 &amp;lt;- as.data.frame(discrimination)
data0$condition &amp;lt;- 1
discrimination &amp;lt;- rnorm(n = 40, mean = 4.28, sd = 1.03) #Generamos los datos para la segunda media (del grupo 2)
data1 &amp;lt;- as.data.frame(discrimination)
data1$condition &amp;lt;- 2
data &amp;lt;- rbind(data0, data1)
data$condition &amp;lt;- factor(data$condition,
levels = c(1,2),
labels = c(&amp;#34;Chaos condition&amp;#34;, &amp;#34;Order condition&amp;#34;)) #añadimos etiquetas para las condiciones
&lt;/code>&lt;/pre>&lt;h2 id="1-paquetes">1. Paquetes&lt;/h2>
&lt;pre tabindex="0">&lt;code class="language-{r" data-lang="{r">
library(effectsize) #Para calcular tamaños del efecto
library(ggstatsplot) #Para representaciones gráficas
library(car) #Para comprobar homogeneidad varianzas con leveneTest()
library(dplyr) #Para algunas transformaciones de los datos
library(ggplot2)
&lt;/code>&lt;/pre>&lt;p>Utilizaremos otros paquetes en otros apartados, que irán apareciendo, pero de momento cargamos únicamente estos; hay que tener en cuenta que hay funciones que &amp;ldquo;solapan&amp;rdquo;.&lt;/p>
&lt;p>Si no tenemos el paquete en la librería, antes del comando library(paquete) lo descargamos con install.packages(paquete).&lt;/p>
&lt;p>Hay que tener en cuenta un par de cosas básicas:&lt;/p>
&lt;ol>
&lt;li>En nuestro ejemplo, la variable dependiente se llama discrimination (las puntuaciones en la escala de discriminación) y la independiente se llama condicion (las dos condiciones que tenemos). Por tanto, para utilizar el código con nuestros datos tendremos que sustituir estos nombres por los nombres de nuestras variables en nuestra base de datos.&lt;/li>
&lt;li>Cuando utilizamos el símbolo del dolar &amp;ldquo;$&amp;rdquo; después del nombre de nuestra base de datos estamos pidiendo al programa que busque dentro de esa base de datos. Luego ponemos la variable sobre la que queramso trabajar.&lt;/li>
&lt;/ol>
&lt;h2 id="2-homogeneidad-de-las-varianzas-y-normalidad">2. Homogeneidad de las varianzas y normalidad&lt;/h2>
&lt;p>Para la normalidad, utilizamos el test de Shapiro:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
by(data$discrimination, data$condition, shapiro.test)
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">## data$condition: Chaos condition
##
## Shapiro-Wilk normality test
##
## data: dd[x, ]
## W = 0.98371, p-value = 0.8228
##
## ----------------------------------
## data$condition: Order condition
##
## Shapiro-Wilk normality test
##
## data: dd[x, ]
## W = 0.97414, p-value = 0.4815
&lt;/code>&lt;/pre>&lt;p>Para comprobar la homogeneidad de las varianzas:&lt;/p>
&lt;p>F-test:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
var.test(data$discrimination ~ data$condition) #F-test para comprobar la homogeneidad de las varianzas
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
## F test to compare two variances
##
## data: data$discrimination by data$condition
## F = 0.68234, num df = 39, denom df = 39, p-value = 0.2371
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.360889 1.290113
## sample estimates:
## ratio of variances
## 0.6823398
&lt;/code>&lt;/pre>&lt;p>Test de Levene. Por defecto utiliza la mediana (más robusto), pero podemos elegir la media con sustituyendo en el argumento center = &amp;ldquo;mean&amp;rdquo;&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
leveneTest(y = data$discrimination, group = data$condition, center = &amp;#34;median&amp;#34;)
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
## Levene&amp;#39;s Test for Homogeneity of Variance (center = &amp;#34;median&amp;#34;)
## Df F value Pr(&amp;gt;F)
## group 1 1.0802 0.3019
## 78
&lt;/code>&lt;/pre>&lt;p>Test de Barlett:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
bartlett.test(data$discrimination ~ data$condition)
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
## Bartlett test of homogeneity of variances
##
## data: data$discrimination by data$condition
## Bartlett&amp;#39;s K-squared = 1.3979, df = 1, p-value = 0.2371
&lt;/code>&lt;/pre>&lt;p>También podemos realizar el test de Brown-Forsyth con la función hov() del paquete HH o el Fligner-Killeen test utilizando la misma fórmula y la función fligner.test().&lt;/p>
&lt;p>Si el resultado del test que elijamos es p &amp;lt; .05 no podemos asumir que las varianzas son iguales. Estas pruebas apuntarían a que nuestros grupos las varianzas no son homogéneas y utilizaríamos pruebas distintas para calcular si hay diferencias significativas entre las medias.&lt;/p>
&lt;p>Si utilizamos t.test() para las diferencias de medias el propio programa lleva a cabo una prueba (e.g. Two Sample t-test) u otra (e.g. Welch Two Sample t-test) en función de si hay igualdad de las varianzas, pero podemos forzarlo asumir igualdad de varianzas con el argumento var.equal = TRUE o a asumir lo contrario, con el argumento var.equal = FALSE. Por tanto, está bien tener control sobre lo que hacemos y elegir la mejor prueba, teniendo en cuanta nuestras consideraciones teóricas, para estudiar la homogeneidad de la varianza y, en consecuencia, el mejor test de comparación de medias.&lt;/p>
&lt;h2 id="3-diferencias-de-medias">3. Diferencias de medias&lt;/h2>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
?t.test #para ver todos los argumentos que podemos añadir a la función. Por ejemplo, alternative = &amp;#34;two.sided&amp;#34; si queremos que la prueba sea bidireccional o de dos colas; alternative = &amp;#34;greater&amp;#34; unidireccional y esperamos que sea positivo el resultado; alternative = &amp;#34;less&amp;#34;, unidireccional y esperamos que sea negativo el resultado etc.
&lt;/code>&lt;/pre>&lt;p>Diferencia dos grupos independientes, asumiendo varianzas iguales:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
t.test(discrimination ~ condition, data = data, alternative = &amp;#34;two.sided&amp;#34;, var.equal = TRUE)
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
## Two Sample t-test
##
## data: discrimination by condition
## t = 2.8596, df = 78, p-value = 0.00544
## alternative hypothesis: true difference in means between group Chaos condition and group Order condition is not equal to 0
## 95 percent confidence interval:
## 0.2013203 1.1240440
## sample estimates:
## mean in group Chaos condition mean in group Order condition
## 5.120439 4.457757
&lt;/code>&lt;/pre>&lt;p>Si no podemos asumir varianzas iguales:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
t.test(discrimination ~ condition, data = data, alternative = &amp;#34;two.sided&amp;#34;, var.equal = FALSE)
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
## Welch Two Sample t-test
##
## data: discrimination by condition
## t = 2.8596, df = 75.315, p-value = 0.005485
## alternative hypothesis: true difference in means between group Chaos condition and group Order condition is not equal to 0
## 95 percent confidence interval:
## 0.201061 1.124303
## sample estimates:
## mean in group Chaos condition mean in group Order condition
## 5.120439 4.457757
&lt;/code>&lt;/pre>&lt;p>Medidas repetidas&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
t.test(discrimination ~ condition, data = data, alternative = &amp;#34;two.sided&amp;#34;, paired = TRUE, var.equal = TRUE)
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">## Paired t-test
##
## data: discrimination by condition
## t = 3.1202, df = 39, p-value = 0.003394
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 0.2330952 1.0922691
## sample estimates:
## mean of the differences
## 0.6626821
&lt;/code>&lt;/pre>&lt;p>Si los datos no siguen una distribución normal, como test no paramétrico, podemos utilizar el de Wilcoxon:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
wilcox.test(data$discrimination ~ data$condition, alternative = &amp;#34;two.sided&amp;#34;, paired = FALSE) #Para medidas repetidas en el argumento paired escribiríamos TRUE
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
## Wilcoxon rank sum exact test
##
## data: data$discrimination by data$condition
## W = 1070, p-value = 0.008991
## alternative hypothesis: true location shift is not equal to 0
&lt;/code>&lt;/pre>&lt;h2 id="4-la-lógica-subyacente">4. La lógica subyacente&lt;/h2>
&lt;p>Este paso puede saltarse (hay que descargar varios paquetes y algunos usando &amp;lsquo;remotes&amp;rsquo;, hay mucho código, etc.), es simplemente para ilustrar de forma breve la lógica de una comparación de medias (y otros análisis estadísticos que hacemos).&lt;/p>
&lt;p>El código de este apartado está copiado groseramente de una entrada del blog de &lt;a href="https://www.andrewheiss.com/blog/2019/01/29/diff-means-half-dozen-ways/#t-test-assuming-equal-variances" target="_blank" rel="noopener">Andrew Heiss&lt;/a>. La idea fundamental, y que aparece explicada tanto en el blog que cito antes como en este de &lt;a href="http://allendowney.blogspot.com/2016/06/there-is-still-only-one-test.html" target="_blank" rel="noopener">Allen Downey&lt;/a>, es que para cualquier test estadístico hacemos lo siguiente:&lt;/p>
&lt;ol>
&lt;li>Calcular un estadístico en nuestra muestra.&lt;/li>
&lt;li>Simular una población donde nuestro estadístico es nulo (en este caso la diferencia de medias).&lt;/li>
&lt;li>Comparar nuestro estadístico con la población en el que es nulo.&lt;/li>
&lt;li>Calcular la probabilidad de que nuestro estadístico exista en la población &amp;rsquo;nula&amp;rsquo;.&lt;/li>
&lt;li>Decidir si es significativo (usando normalmente el estándar de .05)&lt;/li>
&lt;/ol>
&lt;p>Primero cargamos los paquetes necesarios&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">library(infer) #Para las simulaciones
#install.packages(&amp;#34;remotes&amp;#34;) #Si no lo tenemos previamente instalado
remotes::install_github(&amp;#34;brooke-watson/bplots&amp;#34;)
library(bplots) #Para los gráficos
library(scales) #Para los gráficos
&lt;/code>&lt;/pre>&lt;p>Primero calculamos la diferencia de medias en nuestra muestra y la guardamos como un objeto.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
difmed &amp;lt;- data %&amp;gt;%
specify(discrimination ~ condition) %&amp;gt;%
calculate(&amp;#34;diff in means&amp;#34;, order = c(&amp;#34;Chaos condition&amp;#34;, &amp;#34;Order condition&amp;#34;))
difmed
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">## Response: discrimination (numeric)
## Explanatory: condition (factor)
## # A tibble: 1 x 1
## stat
## &amp;lt;dbl&amp;gt;
## 1 0.663
&lt;/code>&lt;/pre>&lt;p>Ahora calculamos el intervalo de confianza usando una distribución &amp;lsquo;bootstrapped&amp;rsquo; de las diferencias de medias basada en nuestra muestra.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
medboot &amp;lt;- data %&amp;gt;%
specify(discrimination ~ condition) %&amp;gt;%
generate(reps = 1000, type = &amp;#34;bootstrap&amp;#34;) %&amp;gt;%
calculate(&amp;#34;diff in means&amp;#34;, order = c(&amp;#34;Chaos condition&amp;#34;, &amp;#34;Order condition&amp;#34;))
boostrapped_confint &amp;lt;- medboot %&amp;gt;% get_confidence_interval()
medboot %&amp;gt;%
visualize() +
shade_confidence_interval(boostrapped_confint,
color = &amp;#34;#8bc5ed&amp;#34;, fill = &amp;#34;#85d9d2&amp;#34;) +
geom_vline(xintercept = difmed$stat, size = 1, color = &amp;#34;#77002c&amp;#34;) +
labs(title = &amp;#34; Distribución &amp;#39;bootstrapped&amp;#39; de la diferencia de medias&amp;#34;,
x = &amp;#34;Chaos condition - Order condition&amp;#34;, y = &amp;#34;Count&amp;#34;,
subtitle = &amp;#34;La línea roja muestra la diferencia observada; la zona sombreada muestra el intervalo de confianza al 95%&amp;#34;) +
theme_fancy()
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/1_hub9239d156b3d158a1f69ae2226fa022b_694636_4f83f526f85bc9f34f56eef96b54db4a.webp 400w,
/post/getting-started/1_hub9239d156b3d158a1f69ae2226fa022b_694636_208871e3216dd38e03923af9590d0df6.webp 760w,
/post/getting-started/1_hub9239d156b3d158a1f69ae2226fa022b_694636_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/1_hub9239d156b3d158a1f69ae2226fa022b_694636_4f83f526f85bc9f34f56eef96b54db4a.webp"
width="760"
height="380"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Ya tenemos calculado nuestro estadístico. Ahora simulamos un mundo donde este sea nulo y añadimos nuestro estadístico a esta población (lo representa la línea roja en el último gráfico de este apatado).&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">#Generamos un &amp;#39;mundo&amp;#39; donde las diferencias son nulas.
cond_diffs_null &amp;lt;- data %&amp;gt;%
specify(discrimination ~ condition) %&amp;gt;%
hypothesize(null = &amp;#34;independence&amp;#34;) %&amp;gt;%
generate(reps = 5000, type = &amp;#34;permute&amp;#34;) %&amp;gt;%
calculate(&amp;#34;diff in means&amp;#34;, order = c(&amp;#34;Chaos condition&amp;#34;, &amp;#34;Order condition&amp;#34;))
#Ponemos nuestro valor observado en este mundo donde las diferencias son nulas para ver cómo de probable es
cond_diffs_null %&amp;gt;%
visualize() +
geom_vline(xintercept = difmed$stat, size = 1, color = &amp;#34;#77002c&amp;#34;) +
scale_y_continuous(labels = comma) +
labs(x = &amp;#34;Diferencia simulada en las medias de las puntuaciones (Chaos condition - order condition)&amp;#34;, y = &amp;#34;Count&amp;#34;,
title = &amp;#34;Distribución nula de las diferencias de medias basada en la simulación&amp;#34;,
subtitle = &amp;#34;La línea roja muestra la diferencia observada&amp;#34;) +
theme_fancy()
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/2_hub9239d156b3d158a1f69ae2226fa022b_701142_2d91116ef692c83119a920896fb594bf.webp 400w,
/post/getting-started/2_hub9239d156b3d158a1f69ae2226fa022b_701142_d15972ef4eb92d3098dc73544e422803.webp 760w,
/post/getting-started/2_hub9239d156b3d158a1f69ae2226fa022b_701142_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/2_hub9239d156b3d158a1f69ae2226fa022b_701142_2d91116ef692c83119a920896fb594bf.webp"
width="760"
height="380"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Vemos que parece muy poco probable observar este valor del estadístico en un mundo donde no haya diferencias entre los grupos.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
cond_diffs_null %&amp;gt;%
get_p_value(obs_stat = difmed, direction = &amp;#34;both&amp;#34;) %&amp;gt;%
mutate(p_value_clean = pvalue(p_value))
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">## # A tibble: 1 x 2
## p_value p_value_clean
## &amp;lt;dbl&amp;gt; &amp;lt;chr&amp;gt;
## 1 0.0036 0.004
&lt;/code>&lt;/pre>&lt;h2 id="5-tamaño-del-efecto">5. Tamaño del efecto&lt;/h2>
&lt;p>Parece que es poco probable obtener estos datos, o más extremos, si la hipótesis nula fuera cierta; nuestros datos parecen ir en línea con la idea de que los contextos desordenados (frente a los ordenados) favorecen las actitudes discriminatorias (!). Esto no es demasiado informativo por sí mismo, así que calculamos el tamaño del efecto para tener una idea de la magnitud de la relación entre la variable independiente y la dependiente.&lt;/p>
&lt;p>Si asumimos que las varianzas son iguales y hemos realizado una prueba t de student, lo usual es utilizar la d de Cohen como estimador del tamaño del efecto, dividiendo la diferencia de medias por la desviación típica agrupada de la muestra &lt;a href="https://link.springer.com/article/10.1007/s10648-013-9218-2" target="_blank" rel="noopener">(Peng et al., 2013)&lt;/a>. Sin embargo, si no podemos asumir que las varianzas son iguales, últimamente se ha sugerido que es mejor utilizar la g de hedges &lt;a href="https://psyarxiv.com/tu6mp/" target="_blank" rel="noopener">(Delacre et al., 2021)&lt;/a>; además de utilizar el test de Welch anteriormente, claro.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
cohens_d(data$discrimination, y = data$condition, ci = 0.95, pooled_sd = TRUE) #Con pooled_sd = TRUE indicamos que utilice la desviación típica agrupada de ambas muestras. Asumimos que las varianzas son iguales.
## Cohen&amp;#39;s d | 95% CI
## ------------------------
## 0.64 | [0.19, 1.09]
##
## - Estimated using pooled SD.
hedges_g(data$discrimination, y = data$condition, ci = 0.95, pooled_sd = FALSE)
## Hedges&amp;#39; g | 95% CI
## ------------------------
## 0.63 | [0.19, 1.08]
##
## - Estimated using un-pooled SD.
&lt;/code>&lt;/pre>&lt;h3 id="51-interpretar-y-transformar-el-tamaño-del-efecto">5.1. Interpretar y transformar el tamaño del efecto&lt;/h3>
&lt;p>Utilizar puntos de referencia (benchmarks) para describir el tamaño del efecto que hemos encontrado (principalmente los de Cohen) puede ser problemático, en tanto que no tenemos en cuenta el marco de referencia específico en el que se da nuestro efecto, qué implicaciones puede tener, etc (para profundizar un poco más en la cuestión o la utilización benchmarks alternativos a los de Cohen se puede ver &lt;a href="https://journals.sagepub.com/doi/full/10.1177/2515245919847202" target="_blank" rel="noopener">Funder &amp;amp; Ozer, 2019&lt;/a>). Una opción interesante puede ser utilizar guías que se basen en los tamaños del efecto encontrados en la investigación en psicología social (&lt;a href="https://onlinelibrary.wiley.com/doi/full/10.1002/ejsp.2752?casa_token=PmPfBBvNPCkAAAAA%3AT1_sP2N3IYi9r14sUyov3O0_6agZCH1Ca_ysoURGjg9x_zraGhcs0gYCrkEPzdSUBfC-Rkq7A_xD0wtKHg" target="_blank" rel="noopener">Lovakov &amp;amp; Agadullina, 2021&lt;/a>). Lovakov y Aggadullina encuentran que los percentiles 25, 50 y 75, analizando 134 meta-análisis publicados, corresponden a valores de la d de Cohen de 0.15, 0.36 y 0.65 respectivamente y a un coeficiente de correlación de 0.12, 0.24 y 0.41.&lt;/p>
&lt;p>Por lo tanto, lo siguiente no es tan relevante como lo anterior, pero podemos pedirle a R que nos interprete nuestro tamaño del efecto.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
interpret_d(1.10, rules = &amp;#34;cohen1988&amp;#34;) #Con las reglas de Cohen
## [1] &amp;#34;large&amp;#34;
## (Rules: cohen1988)
interpret_d(1.10, rules = &amp;#34;lovakov2021&amp;#34;) #Con los puntos de referencia de Lovakov y Agadullina (2021)
## [1] &amp;#34;large&amp;#34;
## (Rules: lovakov2021)
&lt;/code>&lt;/pre>&lt;p>También podemos transformar la d de Cohen a un coeficiente de correlación o viceversa, entre otras muchas opciones que se pueden consultar en las funciones del paquete effectsize&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
d_to_r(1.10)
## [1] 0.4819187
&lt;/code>&lt;/pre>&lt;h2 id="6-test-de-equivalencias">6. Test de equivalencias&lt;/h2>
&lt;p>Para entender bien qué es un test de equivalencias se puede consultar &lt;a href="https://journals.sagepub.com/doi/full/10.1177/1948550617697177" target="_blank" rel="noopener">Lakens (2017)&lt;/a> y &lt;a href="https://journals.sagepub.com/doi/full/10.1177/2515245918770963" target="_blank" rel="noopener">Lakens, Scheel e Isager (2018)&lt;/a>, donde hay introducciones y guías muy accesibles para llevarlos a cabo; en concreto aquí nos interesan los TOST (&amp;ldquo;two one-sided test&amp;rdquo;). Una definición grosera y mucho menos exacta: la idea fundamental es establecer, a priori (antes de recoger los datos), un límite superior e inferior de equivalencia basándonos en el mínimo efecto de interés (SESOI) relevante para nuestra investigación (se pueden ver las posibilidades a la hora de especificar este, también una vez recogidos los datos, en Lakens et al., 2018). Si nuestro efecto cae entre esos intervalos podemos decir que está lo suficientemente cerca de cero para ser equivalente en la práctica. Hay que tener en cuenta que desde la estadística frecuentista no podemos decir que no haya efecto aunque el resultado de nuestro test (e.g. comparación de medias) no sea significativo.&lt;/p>
&lt;p>Por ejemplo, en nuestro caso y siguiendo con la investigación de Stapel y Lindenberg (2011), podemos determinar nuestro SESOI como el tamaño del efecto que el estudio anterior pudiese detectar con un poder del 33% &lt;a href="https://journals.sagepub.com/doi/full/10.1177/0956797614567341?casa_token=h5QriJpfjv8AAAAA%3Awbyl5p2W703wEgvkTuRyqPwewXG3iGGEYyc4kbm-0DiEFbJasPhMTguTnZnceDpU3XTH47R5hbdgSBs" target="_blank" rel="noopener">(Simonsohn, 2015)&lt;/a>, que en este caso sería 0.34 (-0.34 para el límite inferior).&lt;/p>
&lt;p>La función, del paquete TOSTER sería la siguiente:&lt;/p>
&lt;p>TOSTtwo(m1, m2, sd1, sd2, n1, n2, low_eqbound_d, high_eqbound_d, alpha,
var.equal, plot = TRUE, verbose = TRUE)&lt;/p>
&lt;p>Podemos consultar ?TOSTtwo para ver qué significa cada argumento, aunque son bastante autodescriptivos&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
library(TOSTER) #El paquete necesario para los test de equivalencias
#Con nuestros datos#
TOSTtwo(m1 = 5.218811, m2 = 4.031867, sd1 = 1.088976, sd2 = 1.072184, n1 = 40, n2 = 40, low_eqbound_d = -0.34, high_eqbound_d = 0.34, alpha = 0.05, var.equal = TRUE, plot = TRUE, verbose = TRUE)
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/3_hu735b2b3ba1fbd39f22600a58c4fe931b_47226_74336e190690e1c826a81f7998f813d5.webp 400w,
/post/getting-started/3_hu735b2b3ba1fbd39f22600a58c4fe931b_47226_884c8aec2f577ef56846aa5d9073a4c1.webp 760w,
/post/getting-started/3_hu735b2b3ba1fbd39f22600a58c4fe931b_47226_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/3_hu735b2b3ba1fbd39f22600a58c4fe931b_47226_74336e190690e1c826a81f7998f813d5.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">## TOST results:
## t-value lower bound: 6.43 p-value lower bound: 0.000000005
## t-value upper bound: 3.39 p-value upper bound: 0.999
## degrees of freedom : 78
##
## Equivalence bounds (Cohen&amp;#39;s d):
## low eqbound: -0.34
## high eqbound: 0.34
##
## Equivalence bounds (raw scores):
## low eqbound: -0.3674
## high eqbound: 0.3674
##
## TOST confidence interval:
## lower bound 90% CI: 0.785
## upper bound 90% CI: 1.589
##
## NHST confidence interval:
## lower bound 95% CI: 0.706
## upper bound 95% CI: 1.668
##
## Equivalence Test Result:
## The equivalence test was non-significant, t(78) = 3.392, p = 0.999, given equivalence bounds of -0.367 and 0.367 (on a raw scale) and an alpha of 0.05.
## Null Hypothesis Test Result:
## The null hypothesis test was significant, t(78) = 4.912, p = 0.00000486, given an alpha of 0.05.
## Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically different from zero and statistically not equivalent to zero.
&lt;/code>&lt;/pre>&lt;p>El mismo output nos describe los resultados, en este caso nos indica que el efecto no es estadísticamente equivalente a cero.&lt;/p>
&lt;h2 id="7-representaciones-gráficas-de-diferencias-de-medias-y-distribuciones-de-dos-grupos">7. Representaciones gráficas de diferencias de medias y distribuciones de dos grupos&lt;/h2>
&lt;p>Para representar estas diferencias hay varias opciones y las posibilidades de personalización en R son enormes, aquí únicamente ponemos algunos ejemplos con el código listo para utilizar.&lt;/p>
&lt;h3 id="71-barplot">7.1. Barplot&lt;/h3>
&lt;pre tabindex="0">&lt;code class="language-{r}" data-lang="{r}">
library(ggplot2) #Para generar los gráficos
library(ggpubr) #Para adaptar los gráficos al formato que queramos (hay otras opciones)
infograph &amp;lt;- data %&amp;gt;%
group_by(condition) %&amp;gt;%
summarise(
n=n(),
mean=mean(discrimination),
sd=sd(discrimination)
) %&amp;gt;%
mutate( se=sd/sqrt(n)) %&amp;gt;%
mutate( ic=se * qt((1-0.05)/2 + .5, n-1))
pal &amp;lt;- c(&amp;#34;#009E73&amp;#34;, &amp;#34;#E69F00&amp;#34;) #Generamos nuestra paleta colorblind friendly (hay mucha informacióne en Internet de cómo hacerlo, se puede usar el paquete RColorBrewer también)
barplt &amp;lt;- ggplot(infograph) +
geom_col(aes(x=condition, y=mean, fill = pal), alpha=1, width = 0.6) +
scale_fill_manual(values = pal) +
geom_errorbar(aes(x=condition, ymin=mean-ic, ymax=mean+ic), width=0.2, colour=&amp;#34;black&amp;#34;, alpha=0.9, size=0.5) +
ggtitle(&amp;#34;Differences between experimental conditions (using confidence intervals)&amp;#34;) +
xlab(&amp;#34;Experimental Condition&amp;#34;) +
ylab(&amp;#34;Discrimination scores&amp;#34;)
barplt2 &amp;lt;- barplt + theme_pubr(base_size = 10, border = FALSE, margin = TRUE, legend = &amp;#34;none&amp;#34;)
barplt2
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/4_hu1bebdf0e4c9fbfc78c40ff862159cb8b_32516_cdff00e4c96cd77e2c377f1e87e54f45.webp 400w,
/post/getting-started/4_hu1bebdf0e4c9fbfc78c40ff862159cb8b_32516_295f01662bb553c361f7de3903d14167.webp 760w,
/post/getting-started/4_hu1bebdf0e4c9fbfc78c40ff862159cb8b_32516_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/4_hu1bebdf0e4c9fbfc78c40ff862159cb8b_32516_cdff00e4c96cd77e2c377f1e87e54f45.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h3 id="72-gráficos-de-violín">7.2. Gráficos de violín&lt;/h3>
&lt;p>La forma más rápida de hacer un violin plot con bastante información es con ggbetweenstats, del paquete ggstatsplot&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
ggbetweenstats(data = data, x = condition, y = discrimination)
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/5_huecad8a391efd792a376508934b10a16b_109289_08edb57f97239a26d0a06fab7fac849a.webp 400w,
/post/getting-started/5_huecad8a391efd792a376508934b10a16b_109289_17e5bc0b8d2f9d8f6a1aced646e0b676.webp 760w,
/post/getting-started/5_huecad8a391efd792a376508934b10a16b_109289_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/5_huecad8a391efd792a376508934b10a16b_109289_08edb57f97239a26d0a06fab7fac849a.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Tenemos muchas opciones para modificarlo&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">ggbetweenstats(
data,
condition,
discrimination,
plot.type = &amp;#34;boxviolin&amp;#34;,
type = &amp;#34;parametric&amp;#34;,
pairwise.comparisons = TRUE,
pairwise.display = &amp;#34;significant&amp;#34;,
p.adjust.method = &amp;#34;holm&amp;#34;,
effsize.type = &amp;#34;eta&amp;#34;,
bf.prior = 0.707,
bf.message = TRUE,
results.subtitle = TRUE,
xlab = &amp;#34;Condition&amp;#34;,
ylab = &amp;#34;Discrimination&amp;#34;,
caption = NULL,
title = &amp;#34;Effect of disordered (vs ordered) context in discrimination scores&amp;#34;,
subtitle = NULL,
k = 2L,
var.equal = TRUE,
conf.level = 0.95,
nboot = 100L,
tr = 0.2,
centrality.plotting = TRUE,
centrality.type = &amp;#34;parametric&amp;#34;,
centrality.point.args = list(size = 5, color = &amp;#34;darkred&amp;#34;),
centrality.label.args = list(size = 3, nudge_x = 0.4, segment.linetype = 4,
min.segment.length = 0),
outlier.tagging = FALSE,
outlier.label = NULL,
outlier.coef = 1.5,
outlier.shape = 19,
outlier.color = &amp;#34;black&amp;#34;,
outlier.label.args = list(size = 3),
point.args = list(position = ggplot2::position_jitterdodge(dodge.width = 0.4), alpha = 0.4, size = 2, stroke = 0),
violin.args = list(width = 0.7, alpha = 0.5),
ggsignif.args = list(textsize = 4, tip_length = 0.01),
ggtheme = ggstatsplot::theme_ggstatsplot(),
package = &amp;#34;RColorBrewer&amp;#34;,
palette = &amp;#34;Dark2&amp;#34;,
ggplot.component = NULL,
output = &amp;#34;plot&amp;#34;) + xlab(&amp;#34;Experimental Condition&amp;#34;) +
ylab(&amp;#34;Discrimination scores&amp;#34;)
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/6_hub88240b65ff19d9292301a8c03aa8ef5_104895_87e5d23e82cdfc6f62f63f7a1aac4735.webp 400w,
/post/getting-started/6_hub88240b65ff19d9292301a8c03aa8ef5_104895_b3e7e2d7eea8f871126aa13626b55081.webp 760w,
/post/getting-started/6_hub88240b65ff19d9292301a8c03aa8ef5_104895_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/6_hub88240b65ff19d9292301a8c03aa8ef5_104895_87e5d23e82cdfc6f62f63f7a1aac4735.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Otra forma de hacer gráficos de violín:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
library(viridis)
library(hrbrthemes)
ggplot(data, aes(x=condition, y= discrimination, fill=condition)) +
geom_violin() +
geom_boxplot(width=0.1, color=&amp;#34;grey&amp;#34;, alpha=0.5) +
scale_fill_viridis(discrete = TRUE) +
theme_ipsum() +
theme(axis.line = element_line(colour = &amp;#34;black&amp;#34;),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
legend.position=&amp;#34;none&amp;#34;,
plot.title = element_text(size=11)
) +
ggtitle(&amp;#34;Discrimination scores in both conditions&amp;#34;) +
xlab(&amp;#34;&amp;#34;) +
ylab(&amp;#34;Discrimination scores&amp;#34;) +
scale_fill_manual(values = c(&amp;#34;#56B4E9&amp;#34;, &amp;#34;#D55E00&amp;#34;)) +
theme_pubr(base_size = 11, border = FALSE, margin = TRUE, legend = &amp;#34;none&amp;#34;)
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/7_huc198efdecb02c43bc328a09140baec57_72263_0a921e6a17cee8b46c555a3e917e1963.webp 400w,
/post/getting-started/7_huc198efdecb02c43bc328a09140baec57_72263_9f2614d6323de9e02e6a6dd12c1bea3a.webp 760w,
/post/getting-started/7_huc198efdecb02c43bc328a09140baec57_72263_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/7_huc198efdecb02c43bc328a09140baec57_72263_0a921e6a17cee8b46c555a3e917e1963.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Otra posibilidad más:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
library(gghalves)
ggplot(data, aes(x = condition, y = discrimination, fill = condition)) +
ggdist::stat_halfeye(
adjust = .5,
width = .6,
.width = 0,
justification = -.3,
point_colour = NA) +
geom_boxplot(
width = .20,
outlier.shape = NA) +
geom_point(
size = 2,
alpha = .5,
position = position_jitter(
seed = 1, width = .1)) +
coord_cartesian(xlim = c(1.2, NA), clip = &amp;#34;off&amp;#34;) +
scale_fill_viridis(discrete = TRUE) +
theme_ipsum() +
theme(axis.line = element_line(colour = &amp;#34;black&amp;#34;),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
legend.position=&amp;#34;none&amp;#34;,
plot.title = element_text(size=11)
) +
ggtitle(&amp;#34;Discrimination scores in both conditions&amp;#34;) +
xlab(&amp;#34;&amp;#34;) +
ylab(&amp;#34;Discrimination scores&amp;#34;) + scale_fill_brewer(palette=&amp;#34;Dark2&amp;#34;) + scale_fill_manual(values = c(&amp;#34;#56B4E9&amp;#34;, &amp;#34;#D55E00&amp;#34;))
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/8_hu741fcc4c320b4227cb3f82bacf042fd9_77026_59f06f7f613289db7ba923405a960932.webp 400w,
/post/getting-started/8_hu741fcc4c320b4227cb3f82bacf042fd9_77026_8318658c702f1d73f81c2f8f1e5f49d6.webp 760w,
/post/getting-started/8_hu741fcc4c320b4227cb3f82bacf042fd9_77026_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/8_hu741fcc4c320b4227cb3f82bacf042fd9_77026_59f06f7f613289db7ba923405a960932.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Ahora incluyendo si las diferencias son significativas con el paquete &amp;lsquo;ggsignif&amp;rsquo;&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
library(ggsignif)
ggplot(data, aes(x = condition, y = discrimination, fill = condition)) +
ggdist::stat_halfeye(
adjust = .5,
width = .6,
.width = 0,
justification = -.3,
point_colour = NA) +
geom_boxplot(
width = .20,
outlier.shape = NA) +
geom_signif(
comparisons = list(c(&amp;#34;Chaos condition&amp;#34;, &amp;#34;Order condition&amp;#34;)),
map_signif_level = TRUE #Con estas líneas indicamos que queremos mostrar si las diferencias son significativas en el gráfico
) +
geom_point(
size = 2,
alpha = .5,
position = position_jitter(
seed = 1, width = .1)) +
coord_cartesian(xlim = c(1.2, NA), clip = &amp;#34;off&amp;#34;) +
scale_fill_viridis(discrete = TRUE) +
theme_ipsum() +
theme(axis.line = element_line(colour = &amp;#34;black&amp;#34;),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
legend.position=&amp;#34;none&amp;#34;,
plot.title = element_text(size=11)
) +
ggtitle(&amp;#34;Discrimination scores in both conditions&amp;#34;) +
xlab(&amp;#34;&amp;#34;) +
ylab(&amp;#34;Discrimination scores&amp;#34;) + scale_fill_brewer(palette=&amp;#34;Dark2&amp;#34;) + scale_fill_manual(values = c(&amp;#34;#56B4E9&amp;#34;, &amp;#34;#D55E00&amp;#34;))
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/9_hudc0c7f3501db5271f9c1fa436635fda8_77569_235655ece6677b0932c733b709f5bf68.webp 400w,
/post/getting-started/9_hudc0c7f3501db5271f9c1fa436635fda8_77569_5d1ac088a949d4e4da86adb1986ad286.webp 760w,
/post/getting-started/9_hudc0c7f3501db5271f9c1fa436635fda8_77569_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/9_hudc0c7f3501db5271f9c1fa436635fda8_77569_235655ece6677b0932c733b709f5bf68.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>También podríamos incluir el resultado directamente con el paquete &amp;lsquo;statsExpressions&amp;rsquo;:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
library(statsExpressions)
expresion &amp;lt;- two_sample_test(condition, discrimination, data = data, alternative = &amp;#34;two.sided&amp;#34;)
ggplot(data, aes(x = condition, y = discrimination, fill = condition)) +
ggdist::stat_halfeye(
adjust = .5,
width = .6,
.width = 0,
justification = -.3,
point_colour = NA) +
geom_boxplot(
width = .20,
outlier.shape = NA) +
geom_point(
size = 2,
alpha = .5,
position = position_jitter(
seed = 1, width = .1)) +
coord_cartesian(xlim = c(1.2, NA), clip = &amp;#34;off&amp;#34;) +
scale_fill_viridis(discrete = TRUE) +
theme_ipsum() +
theme(axis.line = element_line(colour = &amp;#34;black&amp;#34;),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
legend.position=&amp;#34;none&amp;#34;,
plot.title = element_text(size=11)
) +
ggtitle(&amp;#34;Discrimination scores in both conditions&amp;#34;, subtitle = expresion$expression[[1]]) +
xlab(&amp;#34;&amp;#34;) +
ylab(&amp;#34;Discrimination scores&amp;#34;) + scale_fill_brewer(palette=&amp;#34;Dark2&amp;#34;) + scale_fill_manual(values = c(&amp;#34;#56B4E9&amp;#34;, &amp;#34;#D55E00&amp;#34;))
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/10_hu77920c5183bcf42ae3b1dcad74839bd7_87776_0c70f0c13f0ea1be201c5b2d24e50737.webp 400w,
/post/getting-started/10_hu77920c5183bcf42ae3b1dcad74839bd7_87776_1471cbecd541151391f8d3de8f4b7be3.webp 760w,
/post/getting-started/10_hu77920c5183bcf42ae3b1dcad74839bd7_87776_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/10_hu77920c5183bcf42ae3b1dcad74839bd7_87776_0c70f0c13f0ea1be201c5b2d24e50737.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h3 id="73-otros-gráficos">7.3. Otros gráficos&lt;/h3>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
library(dabestr)
two.group &amp;lt;-
data %&amp;gt;%
dabest(condition, discrimination,
idx = c(&amp;#34;Chaos condition&amp;#34;, &amp;#34;Order condition&amp;#34;),
paired = FALSE)
two.group.meandiff &amp;lt;- mean_diff(two.group)
plot(two.group.meandiff, rawplot.ylabel = &amp;#34;Discrimation scores&amp;#34;, rawplot.markersize = 3)
two.group.effsize &amp;lt;- cohens_d(two.group)
plot(two.group.effsize, rawplot.ylabel = &amp;#34;Discrimation scores&amp;#34;, rawplot.markersize = 1.5)
&lt;/code>&lt;/pre>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/post/getting-started/11_hufcabfa0c74fe74dc2733f271862548a0_73741_a35c7e29aec56d4113351b4c5b890761.webp 400w,
/post/getting-started/11_hufcabfa0c74fe74dc2733f271862548a0_73741_44d4af45d09795347bfff34b5aea6745.webp 760w,
/post/getting-started/11_hufcabfa0c74fe74dc2733f271862548a0_73741_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://jacolomer.netlify.app/post/getting-started/11_hufcabfa0c74fe74dc2733f271862548a0_73741_a35c7e29aec56d4113351b4c5b890761.webp"
width="760"
height="543"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h3 id="74-guardar-los-gráficos">7.4. Guardar los gráficos&lt;/h3>
&lt;p>Primero guardamos el gráfico como un objeto, por ejemplo el que hemos hecho que combina el boxplot con el violinplot.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
Grafico &amp;lt;- ggplot(data, aes(x = condition, y = discrimination, fill = condition)) + ggdist::stat_halfeye(
adjust = .5,
width = .6,
.width = 0,
justification = -.3,
point_colour = NA) +
geom_boxplot(
width = .20,
outlier.shape = NA) +
geom_point(
size = 2,
alpha = .5,
position = position_jitter(
seed = 1, width = .1)) +
coord_cartesian(xlim = c(1.2, NA), clip = &amp;#34;off&amp;#34;) +
scale_fill_viridis(discrete = TRUE) +
theme_ipsum() +
theme(axis.line = element_line(colour = &amp;#34;black&amp;#34;),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
legend.position=&amp;#34;none&amp;#34;,
plot.title = element_text(size=11)
) +
ggtitle(&amp;#34;Discrimination scores in both conditions&amp;#34;) +
xlab(&amp;#34;&amp;#34;) +
ylab(&amp;#34;Discrimination scores&amp;#34;) + scale_fill_brewer(palette=&amp;#34;Dark2&amp;#34;) + scale_fill_manual(values = c(&amp;#34;#56B4E9&amp;#34;, &amp;#34;#D55E00&amp;#34;))
&lt;/code>&lt;/pre>&lt;p>Luego cargamos el paquete library(jpeg) y establecemos nuestra dirección de trabajo si no lo hemos hecho antes.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-{r," data-lang="{r,">
library(jpeg)
jpeg(file=&amp;#34;Figure 1&amp;#34;,width=2000,height=1400, units = &amp;#34;px&amp;#34;, res = 300) #Utilizamos la función especificando cómo queremos que sea la imagen
Grafico #Llamamos al objeto que hemos creado anteriormente
dev.off() #Lo cerramos
&lt;/code>&lt;/pre>&lt;p>Luego vamos a la carpeta donde esté guardado y cambiamos el nombre añadiendo .jpeg al final, indicando el formato.&lt;/p>
&lt;p>Copyright 2016-present &lt;a href="https://jacolomer.netlify.app/" target="_blank" rel="noopener">Joaquín Alcañiz Colomer&lt;/a>.&lt;/p>
&lt;p>Released under the &lt;a href="https://github.com/wowchemy/wowchemy-hugo-modules/blob/master/LICENSE.md" target="_blank" rel="noopener">MIT&lt;/a> license.&lt;/p></description></item></channel></rss>