{"id":10877,"date":"2019-11-29T08:57:43","date_gmt":"2019-11-29T06:57:43","guid":{"rendered":"https:\/\/www.datanovia.com\/en\/?post_type=dt_lessons&#038;p=10877"},"modified":"2019-11-29T08:57:43","modified_gmt":"2019-11-29T06:57:43","slug":"one-way-manova-in-r","status":"publish","type":"dt_lessons","link":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/","title":{"rendered":"One-Way MANOVA in R"},"content":{"rendered":"<div id=\"rdoc\">\n<p>The <strong>Multivariate Analysis Of Variance<\/strong> (<strong>MANOVA<\/strong>) is an ANOVA with two or more continuous outcome (or response) variables.<\/p>\n<p>The one-way MANOVA tests simultaneously statistical differences for multiple response variables by one grouping variables.<\/p>\n<p>For example, we may conduct an experiment where we give two treatments (A and B) to two groups of mice, and we are interested in the weight and height of mice. In that case, the weight and height of mice are our outcome (or dependent) variables, and our hypothesis is that both together are affected by the difference in treatment. A multivariate analysis of variance could be used to test this hypothesis.<\/p>\n<p>The procedure of MANOVA can be summarized as follow:<\/p>\n<ol style=\"list-style-type: decimal;\">\n<li>Create a new composite variable that is a linear combination of all the response variables.<\/li>\n<li>Compare the mean values of this new variable between groups.<\/li>\n<\/ol>\n<p>This article describes how to compute one-way MANOVA in R.<\/p>\n<div class=\"warning\">\n<p>Note that, MANOVA is appropriate in experimental situations, where we have several outcome (dependent) variables which all measure different aspects of some cohesive theme. For example, several exam scores to have a measure of overall academic performance.<\/p>\n<\/div>\n<p>Contents:<\/p>\n<div id=\"TOC\">\n<ul>\n<li><a href=\"#prerequisites\">Prerequisites<\/a><\/li>\n<li><a href=\"#data-preparation\">Data preparation<\/a><\/li>\n<li><a href=\"#visualization\">Visualization<\/a><\/li>\n<li><a href=\"#summary-statistics\">Summary statistics<\/a><\/li>\n<li><a href=\"#assumptions-and-preleminary-tests\">Assumptions and preleminary tests<\/a>\n<ul>\n<li><a href=\"#check-sample-size-assumption\">Check sample size assumption<\/a><\/li>\n<li><a href=\"#identify-univariate-outliers\">Identify univariate outliers<\/a><\/li>\n<li><a href=\"#detect-multivariate-outliers\">Detect multivariate outliers<\/a><\/li>\n<li><a href=\"#check-univariate-normality-assumption\">Check univariate normality assumption<\/a><\/li>\n<li><a href=\"#multivariate-normality\">Multivariate normality<\/a><\/li>\n<li><a href=\"#identify-multicollinearity\">Identify multicollinearity<\/a><\/li>\n<li><a href=\"#check-linearity-assumption\">Check linearity assumption<\/a><\/li>\n<li><a href=\"#check-the-homogeneity-of-covariances-assumption\">Check the homogeneity of covariances assumption<\/a><\/li>\n<li><a href=\"#check-the-homogneity-of-variance-assumption\">Check the homogneity of variance assumption<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#computation\">Computation<\/a><\/li>\n<li><a href=\"#post-hoc-tests\">Post-hoc tests<\/a>\n<ul>\n<li><a href=\"#compute-univariate-one-way-anova\">Compute univariate one-way ANOVA<\/a><\/li>\n<li><a href=\"#compute-multiple-pairwise-comparisons\">Compute multiple pairwise comparisons<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#report\">Report<\/a><\/li>\n<li><a href=\"#summary\">Summary<\/a><\/li>\n<li><a href=\"#references\">References<\/a><\/li>\n<\/ul>\n<\/div>\n<div class='dt-sc-hr-invisible-medium  '><\/div>\n<div class='dt-sc-ico-content type1'><div class='custom-icon' ><a href='https:\/\/www.datanovia.com\/en\/product\/practical-statistics-in-r-for-comparing-groups-numerical-variables\/' target='_blank'><span class='fa fa-book'><\/span><\/a><\/div><h4><a href='https:\/\/www.datanovia.com\/en\/product\/practical-statistics-in-r-for-comparing-groups-numerical-variables\/' target='_blank'> Related Book <\/a><\/h4>Practical Statistics in R II - Comparing Groups: Numerical Variables<\/div>\n<div class='dt-sc-hr-invisible-medium  '><\/div>\n<div id=\"prerequisites\" class=\"section level2\">\n<h2>Prerequisites<\/h2>\n<p>Make sure that you have installed the following R packages:<\/p>\n<ul>\n<li><code>tidyverse<\/code> for data manipulation and visualization<\/li>\n<li><code>ggpubr<\/code> for creating easily publication ready plots<\/li>\n<li><code>rstatix<\/code> for easy pipe-friendly statistical analyses<\/li>\n<li><code>car<\/code> for MANOVA analyses<\/li>\n<li><code>broom<\/code> for printing a nice summary of statistical tests as data frames<\/li>\n<li><code>datarium<\/code> contains required data sets for this chapter<\/li>\n<\/ul>\n<p>Start by loading the following R packages:<\/p>\n<pre class=\"r\"><code>library(tidyverse)\r\nlibrary(ggpubr)\r\nlibrary(rstatix)\r\nlibrary(car)\r\nlibrary(broom)<\/code><\/pre>\n<\/div>\n<div id=\"data-preparation\" class=\"section level2\">\n<h2>Data preparation<\/h2>\n<p>We\u2019ll use the built-in R dataset <code>iris<\/code>. Select columns of interest:<\/p>\n<pre class=\"r\"><code>iris2 &lt;- iris %&gt;%\r\n  select(Sepal.Length, Petal.Length, Species) %&gt;%\r\n  add_column(id = 1:nrow(iris), .before = 1)\r\nhead(iris2)<\/code><\/pre>\n<pre><code>##   id Sepal.Length Petal.Length Species\r\n## 1  1          5.1          1.4  setosa\r\n## 2  2          4.9          1.4  setosa\r\n## 3  3          4.7          1.3  setosa\r\n## 4  4          4.6          1.5  setosa\r\n## 5  5          5.0          1.4  setosa\r\n## 6  6          5.4          1.7  setosa<\/code><\/pre>\n<\/div>\n<div id=\"visualization\" class=\"section level2\">\n<h2>Visualization<\/h2>\n<p>The R code below creates a merged box plots of <code>Sepal.Length<\/code> and <code>Petal.Length<\/code> by <code>Species<\/code> groups.<\/p>\n<pre class=\"r\"><code>ggboxplot(\r\n  iris2, x = \"Species\", y = c(\"Sepal.Length\", \"Petal.Length\"), \r\n  merge = TRUE, palette = \"jco\"\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-statistics-2-comparing-groups-means\/figures\/049-one-way-manova-box-plot-1.png\" width=\"384\" \/><\/p>\n<\/div>\n<div id=\"summary-statistics\" class=\"section level2\">\n<h2>Summary statistics<\/h2>\n<p>Compute summary statistics (mean, SD) by groups for each outcome variable:<\/p>\n<pre class=\"r\"><code>iris2 %&gt;%\r\n  group_by(Species) %&gt;%\r\n  get_summary_stats(Sepal.Length, Petal.Length, type = \"mean_sd\")<\/code><\/pre>\n<pre><code>## # A tibble: 6 x 5\r\n##   Species    variable         n  mean    sd\r\n##   &lt;fct&gt;      &lt;chr&gt;        &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;\r\n## 1 setosa     Petal.Length    50  1.46 0.174\r\n## 2 setosa     Sepal.Length    50  5.01 0.352\r\n## 3 versicolor Petal.Length    50  4.26 0.47 \r\n## 4 versicolor Sepal.Length    50  5.94 0.516\r\n## 5 virginica  Petal.Length    50  5.55 0.552\r\n## 6 virginica  Sepal.Length    50  6.59 0.636<\/code><\/pre>\n<\/div>\n<div id=\"assumptions-and-preleminary-tests\" class=\"section level2\">\n<h2>Assumptions and preleminary tests<\/h2>\n<p>MANOVA makes the following assumptions about the data:<\/p>\n<ul>\n<li><strong>Adequate sample size<\/strong>. Rule of thumb: the n in each cell &gt; the number of outcome variables.<\/li>\n<li><strong>Independence of the observations<\/strong>. Each subject should belong to only one group. There is no relationship between the observations in each group. Having repeated measures for the same participants is not allowed. The selection of the sample should be completely random.<\/li>\n<li><strong>Absense of univariate or multivariate outliers<\/strong>.<\/li>\n<li><strong>Multivariate normality<\/strong>. The R function <code>mshapiro_test( )<\/code>[in the <code>rstatix<\/code> package] can be used to perform the Shapiro-Wilk test for multivariate normality.<\/li>\n<li><strong>Absence of multicollinearity<\/strong>. The dependent (outcome) variables cannot be too correlated to each other. No correlation should be above r = 0.90 [<span class=\"citation\">Tabachnick and Fidell (2012)<\/span>}.<\/li>\n<li><strong>Linearity<\/strong> between all outcome variables for each group.<\/li>\n<li><strong>Homogeneity of variances<\/strong>. The <strong>Levene\u2019s test<\/strong> can be used to test the equality of variances between groups. Non-significant values of Levene\u2019s test indicate equal variance between groups.<\/li>\n<li><strong>Homogeneity of variance-covariance matrices<\/strong>. The <strong>Box\u2019s M Test<\/strong> can be used to check the equality of covariance between the groups. This is the equivalent of a multivariate homogeneity of variance. This test is considered as highly sensitive. Therefore, significance for this test is determined at alpha = 0.001.<\/li>\n<\/ul>\n<div id=\"check-sample-size-assumption\" class=\"section level3\">\n<h3>Check sample size assumption<\/h3>\n<pre class=\"r\"><code>iris2 %&gt;%\r\n  group_by(Species) %&gt;%\r\n  summarise(N = n())<\/code><\/pre>\n<pre><code>## # A tibble: 3 x 2\r\n##   Species        N\r\n##   &lt;fct&gt;      &lt;int&gt;\r\n## 1 setosa        50\r\n## 2 versicolor    50\r\n## 3 virginica     50<\/code><\/pre>\n<div class=\"success\">\n<p>As the table above shows 50 observations per group, the assumption of adequate sample size is satisfied.<\/p>\n<\/div>\n<\/div>\n<div id=\"identify-univariate-outliers\" class=\"section level3\">\n<h3>Identify univariate outliers<\/h3>\n<p>Univariate outliers can be easily identified using box plot methods, implemented in the R function <code>identify_outliers()<\/code> [rstatix package].<\/p>\n<p>Group the data by <code>Species<\/code> and then, identify outliers in the <code>Sepal.Length<\/code> variable:<\/p>\n<pre class=\"r\"><code>iris2 %&gt;%\r\n  group_by(Species) %&gt;%\r\n  identify_outliers(Sepal.Length)<\/code><\/pre>\n<pre><code>## # A tibble: 1 x 6\r\n##   Species      id Sepal.Length Petal.Length is.outlier is.extreme\r\n##   &lt;fct&gt;     &lt;int&gt;        &lt;dbl&gt;        &lt;dbl&gt; &lt;lgl&gt;      &lt;lgl&gt;     \r\n## 1 virginica   107          4.9          4.5 TRUE       FALSE<\/code><\/pre>\n<p>Group the data by <code>Species<\/code> and then, identify outliers in the <code>Petal.Length<\/code> variable:<\/p>\n<pre class=\"r\"><code>iris2 %&gt;%\r\n  group_by(Species) %&gt;%\r\n  identify_outliers(Petal.Length)<\/code><\/pre>\n<pre><code>## # A tibble: 5 x 6\r\n##   Species       id Sepal.Length Petal.Length is.outlier is.extreme\r\n##   &lt;fct&gt;      &lt;int&gt;        &lt;dbl&gt;        &lt;dbl&gt; &lt;lgl&gt;      &lt;lgl&gt;     \r\n## 1 setosa        14          4.3          1.1 TRUE       FALSE     \r\n## 2 setosa        23          4.6          1   TRUE       FALSE     \r\n## 3 setosa        25          4.8          1.9 TRUE       FALSE     \r\n## 4 setosa        45          5.1          1.9 TRUE       FALSE     \r\n## 5 versicolor    99          5.1          3   TRUE       FALSE<\/code><\/pre>\n<div class=\"success\">\n<p>There were no univariate extreme outliers in the Sepal.Length and Petal.length variable, as assessed by box plot methods.<\/p>\n<\/div>\n<div class=\"warning\">\n<p>Note that, in the situation where you have extreme outliers, this can be due to: 1) data entry errors, measurement errors or unusual values.<\/p>\n<p>Yo can include the outlier in the analysis anyway if you do not believe the result will be substantially affected. This can be evaluated by comparing the result of the MANOVA with and without the outlier.<\/p>\n<p>Remember to report in your written results section any decisions you make regarding any outliers you find.<\/p>\n<\/div>\n<\/div>\n<div id=\"detect-multivariate-outliers\" class=\"section level3\">\n<h3>Detect multivariate outliers<\/h3>\n<p>Multivariate outliers are data points that have an unusual combination of values on the outcome (or dependent) variables.<\/p>\n<p>In MANOVA setting, the <strong>Mahalanobis distance<\/strong> is generally used to detect multivariate outliers. The distance tells us how far an observation is from the center of the cloud, taking into account the shape (covariance) of the cloud as well.<\/p>\n<p>The function <code>mahalanobis_distance()<\/code> [rstatix package] can be easily used to compute the Mahalanobis distance and to flag multivariate outliers. Read more in the documentation of the function.<\/p>\n<p>This metric needs to be calculated by groups:<\/p>\n<pre class=\"r\"><code># Compute distance by groups and filter outliers\r\n# Use -id to omit the id column in the computation\r\niris2 %&gt;%\r\n group_by(Species) %&gt;%\r\n mahalanobis_distance(-id) %&gt;%\r\n filter(is.outlier == TRUE) %&gt;%\r\n  as.data.frame()<\/code><\/pre>\n<pre><code>## [1] id           Sepal.Length Petal.Length mahal.dist   is.outlier  \r\n## &lt;0 rows&gt; (or 0-length row.names)<\/code><\/pre>\n<div class=\"success\">\n<p>There were no multivariate outliers in the data, as assessed by Mahalanobis distance (p &gt; 0.001).<\/p>\n<\/div>\n<div class=\"warning\">\n<p>If you have multivariate outliers, you could consider running MANOVA before and after removing the outlier to check whether or not their presence alter the results. You should report your final decision.<\/p>\n<\/div>\n<\/div>\n<div id=\"check-univariate-normality-assumption\" class=\"section level3\">\n<h3>Check univariate normality assumption<\/h3>\n<p>The normality assumption can be checked by computing Shapiro-Wilk test for each outcome variable at each level of the grouping variable. If the data is normally distributed, the p-value should be greater than 0.05.<\/p>\n<pre class=\"r\"><code>iris2 %&gt;%\r\n  group_by(Species) %&gt;%\r\n  shapiro_test(Sepal.Length, Petal.Length) %&gt;%\r\n  arrange(variable)<\/code><\/pre>\n<pre><code>## # A tibble: 6 x 4\r\n##   Species    variable     statistic      p\r\n##   &lt;fct&gt;      &lt;chr&gt;            &lt;dbl&gt;  &lt;dbl&gt;\r\n## 1 setosa     Petal.Length     0.955 0.0548\r\n## 2 versicolor Petal.Length     0.966 0.158 \r\n## 3 virginica  Petal.Length     0.962 0.110 \r\n## 4 setosa     Sepal.Length     0.978 0.460 \r\n## 5 versicolor Sepal.Length     0.978 0.465 \r\n## 6 virginica  Sepal.Length     0.971 0.258<\/code><\/pre>\n<div class=\"success\">\n<p>Sepal.Length and Petal.length were normally distributed for each Species groups, as assessed by Shapiro-Wilk\u2019s test (p &gt; 0.05).<\/p>\n<\/div>\n<p>You can also create QQ plot for each group. QQ plot draws the correlation between a given data and the normal distribution.<\/p>\n<pre class=\"r\"><code># QQ plot of Sepal.Length\r\nggqqplot(iris2, \"Sepal.Length\", facet.by = \"Species\",\r\n         ylab = \"Sepal Length\", ggtheme = theme_bw())<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-statistics-2-comparing-groups-means\/figures\/049-one-way-manova-qq-plot-1.png\" width=\"480\" \/><\/p>\n<pre class=\"r\"><code># QQ plot of Petal.Length\r\nggqqplot(iris2, \"Petal.Length\", facet.by = \"Species\",\r\n         ylab = \"Petal Length\", ggtheme = theme_bw())<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-statistics-2-comparing-groups-means\/figures\/049-one-way-manova-qq-plot-2.png\" width=\"480\" \/><\/p>\n<div class=\"success\">\n<p>All the points fall approximately along the reference line, for each group. So we can assume normality of the data.<\/p>\n<\/div>\n<div class=\"warning\">\n<p>Note that, if your sample size is greater than 50, the normal QQ plot is preferred because at larger sample sizes the Shapiro-Wilk test becomes very sensitive even to a minor deviation from normality.<\/p>\n<p>In the situation where the assumptions are not met, you could consider running MANOVA on the data after transforming the outcome variables. You can also perform the test regardless as MANOVA is fairly robust to deviations from normality.<\/p>\n<\/div>\n<\/div>\n<div id=\"multivariate-normality\" class=\"section level3\">\n<h3>Multivariate normality<\/h3>\n<pre class=\"r\"><code>iris2 %&gt;%\r\n  select(Sepal.Length, Petal.Length) %&gt;%\r\n  mshapiro_test()<\/code><\/pre>\n<pre><code>## # A tibble: 1 x 2\r\n##   statistic p.value\r\n##       &lt;dbl&gt;   &lt;dbl&gt;\r\n## 1     0.995   0.855<\/code><\/pre>\n<div class=\"success\">\n<p>The test is not significant (p &gt; 0.05), so we can assume multivariate normality.<\/p>\n<\/div>\n<\/div>\n<div id=\"identify-multicollinearity\" class=\"section level3\">\n<h3>Identify multicollinearity<\/h3>\n<p>Ideally the correlation between the outcome variables should be moderate, not too high. A correlation above 0.9 is an indication of multicollinearity, which is problematic for MANOVA.<\/p>\n<p>In other hand, if the correlation is too low, you should consider running separate one-way ANOVA for each outcome variable.<\/p>\n<p>Compute pairwise Pearson correlation coefficients between the outcome variable. In the following R code, we\u2019ll use the function <code>cor_test()<\/code> [rstatix package]. If you have more than two outcome variables, consider using the function <code>cor_mat()<\/code>:<\/p>\n<pre class=\"r\"><code>iris2 %&gt;% cor_test(Sepal.Length, Petal.Length)<\/code><\/pre>\n<pre><code>## # A tibble: 1 x 8\r\n##   var1         var2           cor statistic        p conf.low conf.high method \r\n##   &lt;chr&gt;        &lt;chr&gt;        &lt;dbl&gt;     &lt;dbl&gt;    &lt;dbl&gt;    &lt;dbl&gt;     &lt;dbl&gt; &lt;chr&gt;  \r\n## 1 Sepal.Length Petal.Length  0.87      21.6 1.04e-47    0.827     0.906 Pearson<\/code><\/pre>\n<div class=\"success\">\n<p>There was no multicollinearity, as assessed by Pearson correlation (r = 0.87, p &lt; 0.0001).<\/p>\n<\/div>\n<div class=\"warning\">\n<p>In the situation, where you have multicollinearity, you could consider removing one of the outcome variables that is highly correlated.<\/p>\n<\/div>\n<\/div>\n<div id=\"check-linearity-assumption\" class=\"section level3\">\n<h3>Check linearity assumption<\/h3>\n<p>The pairwise relationship between the outcome variables should be linear for each group. This can be checked visually by creating a scatter plot matrix using the R function <code>ggpairs()<\/code> [GGally package]. In our example, we have only one pair:<\/p>\n<pre class=\"r\"><code># Create a scatterplot matrix by group\r\nlibrary(GGally)\r\nresults &lt;- iris2 %&gt;%\r\n  select(Sepal.Length, Petal.Length, Species) %&gt;%\r\n  group_by(Species) %&gt;%\r\n  doo(~ggpairs(.) + theme_bw(), result = \"plots\")\r\nresults<\/code><\/pre>\n<pre><code>## # A tibble: 3 x 2\r\n##   Species    plots \r\n##   &lt;fct&gt;      &lt;list&gt;\r\n## 1 setosa     &lt;gg&gt;  \r\n## 2 versicolor &lt;gg&gt;  \r\n## 3 virginica  &lt;gg&gt;<\/code><\/pre>\n<pre class=\"r\"><code># Show the plots\r\nresults$plots<\/code><\/pre>\n<pre><code>## [[1]]<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-statistics-2-comparing-groups-means\/figures\/049-one-way-manova-linearity-assumption-1.png\" width=\"336\" \/><\/p>\n<pre><code>## \r\n## [[2]]<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-statistics-2-comparing-groups-means\/figures\/049-one-way-manova-linearity-assumption-2.png\" width=\"336\" \/><\/p>\n<pre><code>## \r\n## [[3]]<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-statistics-2-comparing-groups-means\/figures\/049-one-way-manova-linearity-assumption-3.png\" width=\"336\" \/><\/p>\n<div class=\"success\">\n<p>There was a linear relationship between Sepal.Length and Petal.Length in each Species group, as assessed by scatter plot.<\/p>\n<\/div>\n<div class=\"warning\">\n<p>In the situation, where you detect non-linear relationships, You can:<\/p>\n<ol style=\"list-style-type: lower-alpha;\">\n<li>transform or remove the concerned outcome variables;<\/li>\n<li>run the analysis anyway. You will loss some power.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<div id=\"check-the-homogeneity-of-covariances-assumption\" class=\"section level3\">\n<h3>Check the homogeneity of covariances assumption<\/h3>\n<p>This can be evaluated using the Box\u2019s M-test implemented in the <code>rstatix<\/code> package.<\/p>\n<pre class=\"r\"><code>box_m(iris2[, c(\"Sepal.Length\", \"Petal.Length\")], iris2$Species)<\/code><\/pre>\n<pre><code>## # A tibble: 1 x 4\r\n##   statistic  p.value parameter method                                             \r\n##       &lt;dbl&gt;    &lt;dbl&gt;     &lt;dbl&gt; &lt;chr&gt;                                              \r\n## 1      58.4 9.62e-11         6 Box's M-test for Homogeneity of Covariance Matrices<\/code><\/pre>\n<div class=\"success\">\n<p>The test is statistically significant (i.e., p &lt; 0.001), so the data have violated the assumption of homogeneity of variance-covariance matrices.<\/p>\n<\/div>\n<div class=\"warning\">\n<p>Note that, if you have balanced design (i.e., groups with similar sizes), you don\u2019t need to worry too much about violation of the homogeneity of variances-covariance matrices and you can continue your analysis.<\/p>\n<p>However, having an unbalanced design is problematic. Possible solutions include: 1) transforming the dependent variables; 2) running the test anyway, but using <strong>Pillai\u2019s<\/strong> multivariate statistic instead of Wilks\u2019 statistic.<\/p>\n<\/div>\n<\/div>\n<div id=\"check-the-homogneity-of-variance-assumption\" class=\"section level3\">\n<h3>Check the homogneity of variance assumption<\/h3>\n<p>For each of the outcome variables, the one-way MANOVA assumes that there are equal variances between groups. This can be checked using the Levene\u2019s test of equality of variances. Key R function: <code>levene_test()<\/code> [rstatix package].<\/p>\n<p>Procedure:<\/p>\n<ol style=\"list-style-type: decimal;\">\n<li>Gather the outcome variables into key-value pairs<\/li>\n<li>Group by variable<\/li>\n<li>Compute the Levene\u2019s test<\/li>\n<\/ol>\n<pre class=\"r\"><code>iris2 %&gt;% \r\n  gather(key = \"variable\", value = \"value\", Sepal.Length, Petal.Length) %&gt;%\r\n  group_by(variable) %&gt;%\r\n  levene_test(value ~ Species)<\/code><\/pre>\n<pre><code>## # A tibble: 2 x 5\r\n##   variable       df1   df2 statistic            p\r\n##   &lt;chr&gt;        &lt;int&gt; &lt;int&gt;     &lt;dbl&gt;        &lt;dbl&gt;\r\n## 1 Petal.Length     2   147     19.5  0.0000000313\r\n## 2 Sepal.Length     2   147      6.35 0.00226<\/code><\/pre>\n<div class=\"success\">\n<p>The Levene\u2019s test is significant (p &lt; 0.05), so there was no homogeneity of variances.<\/p>\n<\/div>\n<div class=\"warning\">\n<p>Note that, if you do not have homogeneity of variances, you can try to transform the outcome (dependent) variable to correct for the unequal variances.<\/p>\n<p>Alternatively, you can continue, but accept a lower level of statistical significance (alpha level) for your MANOVA result. Additionally, any follow-up univariate ANOVAs will need to be corrected for this violation (i.e., you will need to use different post-hoc tests).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"computation\" class=\"section level2\">\n<h2>Computation<\/h2>\n<p>There are four different types of multivariate statistics that can be used for computing MANOVA. These are: \u201cPillai\u201d, \u201cWilks\u201d, \u201cHotelling-Lawley\u201d, or \u201cRoy\u201d.<\/p>\n<div class=\"warning\">\n<p>The most commonly recommended multivariate statistic to use is <strong>Wilks\u2019 Lambda<\/strong>.<\/p>\n<p>However, <strong>Pillai\u2019s Trace<\/strong> is more robust and is recommended when you have unbalanced design and also have a statistically significant Box\u2019s M result (as in our example, see previous section).<\/p>\n<p>Note that, \u201cPillai\u201d is the default in the R <code>Manova()<\/code> function [car package].<\/p>\n<\/div>\n<p>Compute MANOVA:<\/p>\n<pre class=\"r\"><code>model &lt;- lm(cbind(Sepal.Length, Petal.Length) ~ Species, iris2)\r\nManova(model, test.statistic = \"Pillai\")<\/code><\/pre>\n<pre><code>## \r\n## Type II MANOVA Tests: Pillai test statistic\r\n##         Df test stat approx F num Df den Df Pr(&gt;F)    \r\n## Species  2     0.989     71.8      4    294 &lt;2e-16 ***\r\n## ---\r\n## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1<\/code><\/pre>\n<div class=\"success\">\n<p>There was a statistically significant difference between the Species on the combined dependent variables (Sepal.Length and Petal.Length), F(4, 294) = 71.829, p &lt; 0.0001.<\/p>\n<\/div>\n<\/div>\n<div id=\"post-hoc-tests\" class=\"section level2\">\n<h2>Post-hoc tests<\/h2>\n<p>A statistically significant one-way MANOVA can be followed up by <strong>univariate one-way ANOVA<\/strong> examining, separately, each dependent variable. The goal is to identify the specific dependent variables that contributed to the significant global effect.<\/p>\n<div id=\"compute-univariate-one-way-anova\" class=\"section level3\">\n<h3>Compute univariate one-way ANOVA<\/h3>\n<p>Procedure:<\/p>\n<ol style=\"list-style-type: decimal;\">\n<li>Gather the outcome variables into key-value pairs<\/li>\n<li>Group by variable<\/li>\n<li>Compute one-way ANOVA test<\/li>\n<\/ol>\n<p>Note that, there are different R function to compute one-way ANOVA depending whether the assumptions are met or not:<\/p>\n<ul>\n<li><code>anova_test()<\/code> [rstatix]: can be used when normality and homogeneity of variance assumptions are met<\/li>\n<li><code>welch_anova_test()<\/code> [rstatix]: can be used when the homogeneity of variance assumption is violated, as in our example.<\/li>\n<li><code>kruskal_test()<\/code> [rstatix]: Kruskal-Wallis test, a non parametric alternative of one-way ANOVA test<\/li>\n<\/ul>\n<p>The following R codes shows how to use each of these functions:<\/p>\n<pre class=\"r\"><code># Group the data by variable\r\ngrouped.data &lt;- iris2 %&gt;%\r\n  gather(key = \"variable\", value = \"value\", Sepal.Length, Petal.Length) %&gt;%\r\n  group_by(variable)\r\n\r\n# Do welch one way anova test\r\ngrouped.data %&gt;% welch_anova_test(value ~ Species)\r\n# or do Kruskal-Wallis test\r\ngrouped.data %&gt;% kruskal_test(value ~ Species)\r\n# or use aov()\r\ngrouped.data %&gt;% anova_test(value ~ Species)<\/code><\/pre>\n<p>Here, we show the results of <code>anova_test()<\/code>:<\/p>\n<pre><code>## # A tibble: 2 x 8\r\n##   variable     Effect    DFn   DFd     F        p `p&lt;.05`   ges\r\n##   &lt;chr&gt;        &lt;chr&gt;   &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;    &lt;dbl&gt; &lt;chr&gt;   &lt;dbl&gt;\r\n## 1 Petal.Length Species     2   147 1180. 2.86e-91 *       0.941\r\n## 2 Sepal.Length Species     2   147  119. 1.67e-31 *       0.619<\/code><\/pre>\n<div class=\"success\">\n<p>There was a statistically significant difference in Sepal.Length (F(2, 147) = 119, p &lt; 0.0001 ) and Petal.Length (F(2, 147) = 1180, p &lt; 0.0001 ) between iris Species.<\/p>\n<\/div>\n<div class=\"warning\">\n<p>Note that, as we have two dependent variables, we need to apply Bonferroni multiple testing correction by decreasing the he level we declare statistical significance.<\/p>\n<p>This is done by dividing classic alpha level (0.05) by the number of tests (or dependent variables, here 2). This leads to a significance acceptance criteria of p &lt; 0.025 rather than p &lt; 0.05 because there are two dependent variables.<\/p>\n<\/div>\n<\/div>\n<div id=\"compute-multiple-pairwise-comparisons\" class=\"section level3\">\n<h3>Compute multiple pairwise comparisons<\/h3>\n<p>A statistically significant univariate ANOVA can be followed up by multiple pairwise comparisons to determine which groups are different.<\/p>\n<p>The R functions <code>tukey_hsd()<\/code> [rstatix package] can be used to compute Tukey post-hoc tests if the homogeneity of variance assumption is met.<\/p>\n<p>If you had violated the assumption of homogeneity of variances, as in our example, you might prefer to run a Games-Howell post-hoc test. It\u2019s also possible to use the function <code>pairwise_t_test()<\/code> [rstatix] with the option <code>pool.sd = FALSE<\/code> and <code>var.equal = FALSE<\/code> .<\/p>\n<pre class=\"r\"><code>pwc &lt;- iris2 %&gt;%\r\n  gather(key = \"variables\", value = \"value\", Sepal.Length, Petal.Length) %&gt;%\r\n  group_by(variables) %&gt;%\r\n  games_howell_test(value ~ Species) %&gt;%\r\n  select(-estimate, -conf.low, -conf.high) # Remove details\r\npwc<\/code><\/pre>\n<pre><code>## # A tibble: 6 x 6\r\n##   variables    .y.   group1     group2        p.adj p.adj.signif\r\n## * &lt;chr&gt;        &lt;chr&gt; &lt;chr&gt;      &lt;chr&gt;         &lt;dbl&gt; &lt;chr&gt;       \r\n## 1 Petal.Length value setosa     versicolor 1.85e-11 ****        \r\n## 2 Petal.Length value setosa     virginica  1.68e-11 ****        \r\n## 3 Petal.Length value versicolor virginica  4.45e-10 ****        \r\n## 4 Sepal.Length value setosa     versicolor 2.86e-10 ****        \r\n## 5 Sepal.Length value setosa     virginica  0.       ****        \r\n## 6 Sepal.Length value versicolor virginica  5.58e- 7 ****<\/code><\/pre>\n<div class=\"success\">\n<p>All pairwise comparisons were significant for each of the outcome variable (Sepal.Length and Petal.Length).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"report\" class=\"section level2\">\n<h2>Report<\/h2>\n<p>A one-way multivariate analysis of variance was performed to determine the effect of iris Species on Sepal.Length and Petal.Length. There are three different species: setosa, versicolor and virginica.<\/p>\n<p>There was a statistically significant difference between the Species on the combined dependent variables (Sepal.Length and Petal.Length), F(4, 294) = 71.829, p &lt; 0.0001.<\/p>\n<p>Follow-up univariate ANOVAs, using a Bonferroni adjusted alpha level of 0.025, showed that there was a statistically significant difference in Sepal.Length (F(2, 147) = 119, p &lt; 0.0001 ) and Petal.Length (F(2, 147) = 1180, p &lt; 0.0001 ) between iris Species.<\/p>\n<p>All pairwise comparisons between groups were significant for each of the outcome variable (Sepal.Length and Petal.Length).<\/p>\n<pre class=\"r\"><code># Visualization: box plots with p-values\r\npwc &lt;- pwc %&gt;% add_xy_position(x = \"Species\")\r\ntest.label &lt;- create_test_label(\r\n  description = \"MANOVA\", statistic.text = quote(italic(\"F\")),\r\n  statistic = 71.83, p= \"&lt;0.0001\", parameter = \"4,294\",\r\n  type = \"expression\", detailed = TRUE\r\n  )\r\nggboxplot(\r\n  iris2, x = \"Species\", y = c(\"Sepal.Length\", \"Petal.Length\"), \r\n  merge = TRUE, palette = \"jco\"\r\n  ) + \r\n  stat_pvalue_manual(\r\n    pwc, hide.ns = TRUE, tip.length = 0, \r\n    step.increase = 0.1, step.group.by = \"variables\",\r\n    color = \"variables\"\r\n    ) +\r\n  labs(\r\n    subtitle = test.label,\r\n    caption = get_pwc_label(pwc, type = \"expression\")\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-statistics-2-comparing-groups-means\/figures\/049-one-way-manova-one-way-MANOVA-boxplots-with-p-values-1.png\" width=\"576\" \/><\/p>\n<\/div>\n<div id=\"summary\" class=\"section level2\">\n<h2>Summary<\/h2>\n<p>This article describes how to compute and interpret one-way MANOVA in R. We show how to check the test assumptions and to perform post-hoc analyses.<\/p>\n<\/div>\n<div id=\"references\" class=\"section level2 unnumbered\">\n<h2>References<\/h2>\n<div id=\"refs\" class=\"references\">\n<div id=\"ref-tabachnick2012\">\n<p>Tabachnick, Barbara, and Linda.S. Fidell. 2012. <em>Using Multivarite Statistics<\/em>. 6th ed. Pearson.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><!--end rdoc--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Multivariate Analysis Of Variance (MANOVA) is an ANOVA with two or more continuous outcome (or response) variables.  The one-way MANOVA tests simultaneously statistical differences for multiple response variables by one grouping variables. This chapter describes how to compute one-way MANOVA in R.<\/p>\n","protected":false},"author":1,"featured_media":9094,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","class_list":["post-10877","dt_lessons","type-dt_lessons","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>One-Way MANOVA in R: The Ultimate Practical Guide - Datanovia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"One-Way MANOVA in R: The Ultimate Practical Guide - Datanovia\" \/>\n<meta property=\"og:description\" content=\"The Multivariate Analysis Of Variance (MANOVA) is an ANOVA with two or more continuous outcome (or response) variables. The one-way MANOVA tests simultaneously statistical differences for multiple response variables by one grouping variables. This chapter describes how to compute one-way MANOVA in R.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/\" \/>\n<meta property=\"og:site_name\" content=\"Datanovia\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X26731637_568112353528713_8932958110748919379_n.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/\",\"url\":\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/\",\"name\":\"One-Way MANOVA in R: The Ultimate Practical Guide - Datanovia\",\"isPartOf\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X26731637_568112353528713_8932958110748919379_n.jpg\",\"datePublished\":\"2019-11-29T06:57:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#primaryimage\",\"url\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X26731637_568112353528713_8932958110748919379_n.jpg\",\"contentUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X26731637_568112353528713_8932958110748919379_n.jpg\",\"width\":1024,\"height\":512},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.datanovia.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lessons\",\"item\":\"https:\/\/www.datanovia.com\/en\/lessons\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"One-Way MANOVA in R\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#website\",\"url\":\"https:\/\/www.datanovia.com\/en\/\",\"name\":\"Datanovia\",\"description\":\"Data Mining and Statistics for Decision Support\",\"publisher\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.datanovia.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#organization\",\"name\":\"Datanovia\",\"url\":\"https:\/\/www.datanovia.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png\",\"contentUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png\",\"width\":98,\"height\":99,\"caption\":\"Datanovia\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"One-Way MANOVA in R: The Ultimate Practical Guide - Datanovia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/","og_locale":"en_US","og_type":"article","og_title":"One-Way MANOVA in R: The Ultimate Practical Guide - Datanovia","og_description":"The Multivariate Analysis Of Variance (MANOVA) is an ANOVA with two or more continuous outcome (or response) variables. The one-way MANOVA tests simultaneously statistical differences for multiple response variables by one grouping variables. This chapter describes how to compute one-way MANOVA in R.","og_url":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/","og_site_name":"Datanovia","og_image":[{"width":1024,"height":512,"url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X26731637_568112353528713_8932958110748919379_n.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/","url":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/","name":"One-Way MANOVA in R: The Ultimate Practical Guide - Datanovia","isPartOf":{"@id":"https:\/\/www.datanovia.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#primaryimage"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#primaryimage"},"thumbnailUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X26731637_568112353528713_8932958110748919379_n.jpg","datePublished":"2019-11-29T06:57:43+00:00","breadcrumb":{"@id":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#primaryimage","url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X26731637_568112353528713_8932958110748919379_n.jpg","contentUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X26731637_568112353528713_8932958110748919379_n.jpg","width":1024,"height":512},{"@type":"BreadcrumbList","@id":"https:\/\/www.datanovia.com\/en\/lessons\/one-way-manova-in-r\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.datanovia.com\/en\/"},{"@type":"ListItem","position":2,"name":"Lessons","item":"https:\/\/www.datanovia.com\/en\/lessons\/"},{"@type":"ListItem","position":3,"name":"One-Way MANOVA in R"}]},{"@type":"WebSite","@id":"https:\/\/www.datanovia.com\/en\/#website","url":"https:\/\/www.datanovia.com\/en\/","name":"Datanovia","description":"Data Mining and Statistics for Decision Support","publisher":{"@id":"https:\/\/www.datanovia.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.datanovia.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.datanovia.com\/en\/#organization","name":"Datanovia","url":"https:\/\/www.datanovia.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.datanovia.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png","contentUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png","width":98,"height":99,"caption":"Datanovia"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/#\/schema\/logo\/image\/"}}]}},"multi-rating":{"mr_rating_results":[]},"_links":{"self":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/dt_lessons\/10877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/dt_lessons"}],"about":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/types\/dt_lessons"}],"author":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/comments?post=10877"}],"version-history":[{"count":0,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/dt_lessons\/10877\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/media\/9094"}],"wp:attachment":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/media?parent=10877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}