Activity 3.4 - Multiple Correspondence Analysis KEY

Problem 1

Consider the following table summarizing students:

Variable Category Count
Part-time job Yes 110
No 90
Major Science 80
Arts 60
Business 50
Education 10
Commute Car 100
Bus 50
Bike 36
Walk 14
Housing On campus 70
Off campus 90
With family 40

A)

What is the total inertia in this table?

\[\text{Total Inertia} = \frac{P - Q}{Q} = \frac{13 - 4}{4} = \frac{9}{4} = 2.25\]

B)

How many dimensions are needed to explain 100% of the inertia?

\[P - Q = 13 - 4 = 9\text{ dimensions}\] ## C)

The code below creates a microdata version of this table, one row per student:

library(tidyverse)
library(FactoMineR)
set.seed(1)
students <- data.frame(
  Part_time_job = sample(rep(c("Yes", "No"), c(110, 90))),
  Major         = sample(rep(c("Science", "Arts", "Business", "Education"),
                             c(80, 60, 50, 10))),
  Commute       = sample(rep(c("Car", "Bus", "Bike", "Walk"),
                             c(100, 50, 36, 14))),
  Housing       = sample(rep(c("On campus", "Off campus", "With family"),
                             c(70, 90, 40)))
)

head(students)
  Part_time_job    Major Commute     Housing
1           Yes Business     Car With family
2            No     Arts    Bike  Off campus
3            No     Arts     Car  Off campus
4            No  Science     Car   On campus
5           Yes     Arts    Bike  Off campus
6           Yes  Science     Car With family

Perform MCA on this data set, setting ncp= to the number of dimensions you specified in part B. Verify that the sum of the eigenvalues equal your answer to part A.

library(FactoMineR)

students_mca <- MCA(students, ncp = 9, graph = FALSE)
sum(students_mca$eig[, 1])
[1] 2.25

Problem 2

In this problem, we consider the hobbies data set which comes preloaded with the FactoMineR package. The data used here concern a questionnaire on hobbies. 8403 individuals were asked questions about their hobbies, as well as demographic information. Use the following subset of the data, called hobbies_use:

library(FactoMineR)
library(tidyverse)
library(factoextra)
Welcome to factoextra!
Want to learn more? See two factoextra-related books at https://www.datanovia.com/library/principal-component-methods
library(patchwork)
library(ggrepel)
data(hobbies)
hobbies_use <- hobbies %>% select(Reading:Fishing, Sex:`Marital status`)
head(hobbies_use)
         Reading Listening music Cinema Show Exhibition Computer Sport Walking
11000210       1               1      1    1          1        0     1       1
11000410       1               0      0    0          1        0     1       1
11000610       1               1      0    0          1        0     0       0
11000710       1               0      0    0          1        0     1       0
11000810       1               1      1    1          0        0     0       1
11000910       0               0      0    0          0        0     0       0
         Travelling Playing music Collecting Volunteering Mechanic Gardening
11000210          1             0          0            1        1         0
11000410          0             0          1            1        1         1
11000610          1             0          0            0        0         0
11000710          1             0          0            0        0         0
11000810          0             0          0            0        0         0
11000910          0             0          0            0        1         0
         Knitting Cooking Fishing Sex     Age Marital status
11000210        0       0       0   F (55,65]        Married
11000410        0       0       0   M (45,55]        Married
11000610        0       0       0   F (25,35]      Remarried
11000710        0       0       0   M (75,85]        Married
11000810        0       0       0   M (55,65]        Married
11000910        0       0       0   M (45,55]        Married

A)

What percent of the inertia is explained by the first two dimensions?

hobbies_mca <- MCA(hobbies_use, quali.sup = c('Sex', 'Age', 'Marital status'), graph = FALSE)
summary(hobbies_mca)

Call:
MCA(X = hobbies_use, quali.sup = c("Sex", "Age", "Marital status"),  
     graph = FALSE) 


Eigenvalues
                      Dim.1  Dim.2  Dim.3  Dim.4  Dim.5
Variance              0.207  0.085  0.075  0.061  0.060
% of var.            20.712  8.477  7.528  6.146  6.000
Cumulative % of var. 20.712 29.189 36.717 42.863 48.862

Individuals (the 10 first)
                     Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
11000210          |  0.668  0.026  0.362 | -0.195  0.005  0.031 |  0.076  0.001
11000410          |  0.165  0.002  0.016 |  0.491  0.034  0.143 |  0.210  0.007
11000610          | -0.141  0.001  0.031 | -0.249  0.009  0.097 | -0.228  0.008
11000710          | -0.146  0.001  0.026 | -0.259  0.009  0.082 | -0.075  0.001
11000810          | -0.026  0.000  0.001 | -0.338  0.016  0.174 | -0.181  0.005
11000910          | -0.663  0.025  0.599 | -0.030  0.000  0.001 |  0.228  0.008
11001010          | -0.218  0.003  0.064 | -0.301  0.013  0.122 |  0.395  0.025
11001110          |  0.354  0.007  0.143 | -0.567  0.045  0.368 | -0.123  0.002
11001210          |  0.586  0.020  0.311 | -0.562  0.044  0.286 | -0.006  0.000
11001310          |  0.176  0.002  0.031 |  0.018  0.000  0.000 |  0.044  0.000
                    cos2  
11000210           0.005 |
11000410           0.026 |
11000610           0.081 |
11000710           0.007 |
11000810           0.050 |
11000910           0.071 |
11001010           0.210 |
11001110           0.017 |
11001210           0.000 |
11001310           0.002 |

Categories (the 10 first)
                      Dim.1     ctr    cos2  v.test     Dim.2     ctr    cos2
Reading_0         |  -0.698   4.538   0.238 -44.698 |  -0.031   0.022   0.000
Reading_1         |   0.341   2.216   0.238  44.698 |   0.015   0.011   0.000
Listening music_0 |  -0.815   5.516   0.274 -48.017 |   0.278   1.572   0.032
Listening music_1 |   0.337   2.278   0.274  48.017 |  -0.115   0.649   0.032
Cinema_0          |  -0.510   4.438   0.391 -57.309 |   0.286   3.414   0.123
Cinema_1          |   0.766   6.664   0.391  57.309 |  -0.430   5.127   0.123
Show_0            |  -0.397   3.183   0.388 -57.121 |   0.102   0.513   0.026
Show_1            |   0.978   7.846   0.388  57.121 |  -0.251   1.266   0.026
Exhibition_0      |  -0.423   3.521   0.401 -58.075 |  -0.014   0.009   0.000
Exhibition_1      |   0.948   7.880   0.401  58.075 |   0.031   0.020   0.000
                   v.test     Dim.3     ctr    cos2  v.test  
Reading_0          -1.971 |   0.444   5.063   0.096  28.466 |
Reading_1           1.971 |  -0.217   2.472   0.096 -28.466 |
Listening music_0  16.402 |   0.148   0.499   0.009   8.704 |
Listening music_1 -16.402 |  -0.061   0.206   0.009  -8.704 |
Cinema_0           32.158 |  -0.057   0.151   0.005  -6.382 |
Cinema_1          -32.158 |   0.085   0.227   0.005   6.382 |
Show_0             14.676 |   0.040   0.088   0.004   5.732 |
Show_1            -14.676 |  -0.098   0.217   0.004  -5.732 |
Exhibition_0       -1.872 |   0.087   0.413   0.017  11.986 |
Exhibition_1        1.872 |  -0.196   0.923   0.017 -11.986 |

Categorical variables (eta2)
                    Dim.1 Dim.2 Dim.3  
Reading           | 0.238 0.000 0.096 |
Listening music   | 0.274 0.032 0.009 |
Cinema            | 0.391 0.123 0.005 |
Show              | 0.388 0.026 0.004 |
Exhibition        | 0.401 0.000 0.017 |
Computer          | 0.326 0.060 0.055 |
Sport             | 0.291 0.046 0.059 |
Walking           | 0.172 0.111 0.003 |
Travelling        | 0.356 0.000 0.000 |
Playing music     | 0.214 0.003 0.003 |

Supplementary categories (the 10 first)
                      Dim.1    cos2  v.test     Dim.2    cos2  v.test     Dim.3
M                 |  -0.024   0.000  -1.982 |  -0.044   0.002  -3.669 |   0.572
F                 |   0.020   0.000   1.982 |   0.036   0.002   3.669 |  -0.469
[15,25]           |   0.372   0.016  11.483 |  -0.872   0.086 -26.949 |   0.305
(25,35]           |   0.267   0.013  10.467 |  -0.323   0.019 -12.693 |   0.143
(35,45]           |   0.205   0.010   9.264 |  -0.011   0.000  -0.476 |   0.153
(45,55]           |   0.018   0.000   0.866 |   0.220   0.014  10.687 |  -0.004
(55,65]           |  -0.155   0.004  -5.948 |   0.381   0.026  14.646 |  -0.133
(65,75]           |  -0.444   0.025 -14.424 |   0.296   0.011   9.621 |  -0.299
(75,85]           |  -0.702   0.030 -15.875 |   0.091   0.001   2.059 |  -0.423
(85,100]          |  -1.019   0.011  -9.438 |  -0.227   0.001  -2.100 |  -0.479
                     cos2  v.test  
M                   0.268  47.475 |
F                   0.268 -47.475 |
[15,25]             0.011   9.426 |
(25,35]             0.004   5.613 |
(35,45]             0.006   6.910 |
(45,55]             0.000  -0.196 |
(55,65]             0.003  -5.112 |
(65,75]             0.011  -9.700 |
(75,85]             0.011  -9.565 |
(85,100]            0.002  -4.441 |

Supplementary categorical variables (eta2)
                    Dim.1 Dim.2 Dim.3  
Sex               | 0.000 0.002 0.268 |
Age               | 0.098 0.137 0.042 |
Marital status    | 0.046 0.098 0.032 |

Dimension 1 explains 8.55% of the inertia.

Dimension 2 explains 5.86% of the inertia.

B)

Perform MCA on this data set. For each of the first two dimensions of the MCA, find the top-10 variables contributing to these dimensions. Discuss your findings.

fviz_contrib(hobbies_mca, choice = 'var', axes = 1, top = 10) +
  scale_x_discrete(limits = rev) +
  coord_flip() +
  labs(x = '') +
  theme(axis.text = element_text(color = 'black', size = 14),
        axis.text.x = element_text(angle = 0))

fviz_contrib(hobbies_mca, choice = 'var', axes = 2, top = 10) +
  scale_x_discrete(limits = rev) +
  coord_flip() +
  labs(x = '') +
  theme(axis.text = element_text(color = 'black', size = 14),
        axis.text.x = element_text(angle = 0))

Dimension 1 is primarily built by Show_1, Playing music_1, Exhibition_1, Cinema_1, and Computer_1. which shows us Levels for participating in hobbies (_1) have positive coordinates, while levels for non-participation (_0, such as Listening music_0) have negative coordinates. This axis separates individuals who participate in many cultural and leisure activities from those who do not.

Dimension 2 is primarily driven by Knitting_1, Gardening_1, and Fishing_1 on the positive side, and Computer_1 and Cinema_1 on the negative side. its shows that It contrasts home-based and outdoor activities (positive coordinates) against screen and entertainment based activities (negative coordinates).

C)

Use fviz_mca_var() with repel=TRUE to plot the coordinates of the active variables and supplementary variables. Discuss the shortcomings of this plot.

fviz_mca_var(hobbies_mca, repel = TRUE)

There are too many labels on the biplot, so even with repel = TRUE they overlap and become illegible.

Most of the non-participation levels (_0) sit right near the origin (0, 0) because they are the baseline, meaning they contribute very little to inertia and only clutter the display.

fviz_mca_var() lumps all the supplementary categories together under one color instead of using separate colors to distinguish the different demographic variables (Sex, Age, Marital status).

D)

Note that the plot from C has too many labels and isn’t doing a good job repelling them even with repel = TRUE. Let’s use ggplot layers to improve this plot; unfortunately this will require some data wrangling to create the data set we need “from scratch.”

Use the MCA() output to create active_df and supp_df, containing the coordinates of the active and supplementary variables, respectively. Keep only the “top 10” levels of the active variables, as measured by the sum-of-squared coordinates. The first 6 rows of each data frame are shown:

head(active_df)
               level       Dim.1       Dim.2 sum_sq_coord        category
1    Playing music_1  1.00952955 -0.12540594    1.0348766 active_variable
2             Show_1  0.97841609 -0.25138634    1.0204931 active_variable
3       Exhibition_1  0.94785218  0.03055321    0.8993572 active_variable
4         Knitting_1  0.23757658  0.89493428    0.8573500 active_variable
5        Gardening_1  0.26247657  0.84523534    0.7833167 active_variable
head(supp_df)
   level       Dim.1       Dim.2 sum_sq_coord category
1       M -0.02387308 -0.04419050  0.002522725      Sex
2       F  0.01958565  0.03625421  0.001697965      Sex
3 [15,25]  0.37173828 -0.87241775  0.899302081      Age
4 (25,35]  0.26667450 -0.32338199  0.175691199      Age
5 (35,45]  0.20477079 -0.01052354  0.042041822      Age
6 (45,55]  0.01785855  0.22042748  0.048907200      Age

Then row-bind these together:

final_plot_df <- bind_rows(active_df, supp_df)

Use final_plot_df to reproduce this plot:

active_df <- hobbies_mca$var$coord %>%
  data.frame() %>%
  rownames_to_column('level') %>%
  select(level, Dim.1, Dim.2) %>%
  mutate(sum_sq_coord = Dim.1^2 + Dim.2^2,
         category = 'Active variable') %>%
  arrange(desc(sum_sq_coord)) %>%
  slice(1:10)


supp_df <- hobbies_mca$quali.sup$coord %>%
  data.frame() %>%
  rownames_to_column('level') %>%
  select(level, Dim.1, Dim.2) %>%
  mutate(sum_sq_coord = Dim.1^2 + Dim.2^2,
         category = c(rep('Sex', 2), rep('Age', 7), rep('Marital status', 6)))

final_plot_df <- bind_rows(active_df, supp_df)

ggplot(data = final_plot_df, aes(x = Dim.1, y = Dim.2, col = category)) +
  geom_point() +
  geom_text_repel(aes(label = level), show.legend = FALSE) +
  geom_hline(aes(yintercept = 0), linetype = 2) +
  geom_vline(aes(xintercept = 0), linetype = 2) +
  theme_classic(base_size = 14) +
  scale_color_discrete(name = '') +
  labs(x = 'Dimension 1', y = 'Dimension 2')

E)

What does this plot suggest about the relationships between hobbies, age, marital status, and sex? Credit will be awarded proportional to thoroughness of response.

Age:

Moving from left to right along Dimension 1, age decreases from (85,100] on the far left to [15,25] on the right. Older individuals on the left with Listening music_0 (fewer hobbies), while younger and middle aged individuals sit on the right with active hobby levels (_1).

Moving from bottom to top along Dimension 2, age increases from [15,25] and (25,35] at the bottom to (45,55], (55,65], and (65,75] near the top. Younger respondents tend to be together with Computer_1 and Cinema_1 in the bottom-right, while older adults align with Knitting_1, Gardening_1, and Fishing_1 at the top.

Marital status:

Single sits in the bottom-right near [15,25] and (25,35], tending to occur together with Cinema_1 and Computer_1.

Married and Remarried sit near the center top alongside (45,55] and (55,65], closer to Gardening_1 and Knitting_1.

Widower sits in the upper-left near (65,75] and (75,85], tending to occur together with Listening music_0. Divorcee sits right near the origin (0, 0), it contributes very little to the inertia on these first two dimensions.

Sex:

Both M and F sit very close to the origin (0, 0) (F slightly positive on Dimension 2 toward Knitting_1/Gardening_1, M slightly negative), showing that sex is not responsible for much inertia compared to age and marital status.

Problem 3

On the public television show The Joy of Painting Bob Ross taught people how to paint lovely scenic landscapes consisting of “snowcapped peaks” and “happy little clouds.” This dataset is a table consisting of different elements (e.g. mountain, river, waterfall, etc.) commonly found within in his paintings. Thus each painting can be thought of as survey respondent where they are asked a series of yes (1) or no (0) questions. This data set contains characteristics of paintings created in 316 of the 403 “Joy of Painting” episodes. Note that MCA requires everything to be factors (aka “categorical”) variables, hence the mutate() command below.

bobross <- read.csv('Data/BobRossCommon.csv') %>% 
  column_to_rownames('TITLE') %>% 
  mutate(across(everything(), as.factor))

Our goal is to understand what elements Ross tended to use together in paintings, and to find representative paintings with various characteristics.

A)

Perform MCA on the data set, and plot the first two dimensions of the variable coordinates. How would you characterize paintings in each of the four quadrants of this plot? Where are the “summer” and “winter” paintings?

bobross_mca <- MCA(bobross, graph = FALSE)


bobross_var_df <- bobross_mca$var$coord %>%
  data.frame() %>%
  rownames_to_column('element') %>%
  filter(str_detect(element, '_1$'))

ggplot(data = bobross_var_df, aes(x = Dim.1, y = Dim.2)) +
  geom_point(col = '#E16A86') +
  geom_text_repel(aes(label = element), col = '#E16A86', show.legend = FALSE) +
  geom_hline(aes(yintercept = 0), linetype = 2) +
  geom_vline(aes(xintercept = 0), linetype = 2) +
  theme_classic(base_size = 14) +
  labs(x = 'Dimension 1', y = 'Dimension 2')

Quadrant I (Dim.1 > 0, Dim.2 > 0): DECIDUOUS_1, GRASS_1, FLOWERS_1, PATH_1, RIVER_1, ROCKS_1, and WATERFALL_1 tend to occur together here. These are warm weather forest, stream, and meadow paintings without snow or mountains.

Quadrant II (Dim.1 < 0, Dim.2 > 0): WINTER_1, SNOW_1, CABIN_1, STRUCTURE_1, FENCE_1, and SUN_1 tend to occur together here along with MOUNTAIN_0. These are snow covered winter paintings featuring cabins and fences rather than mountains.

Quadrant III (Dim.1 < 0, Dim.2 < 0): WINTER_1, SNOW_1, SNOWY_MOUNTAIN_1, MOUNTAIN_1, CONIFER_1, LAKE_1, and CLOUDS_1 tend to occur together here (along with DECIDUOUS_0). These are winter mountain paintings with snow capped peaks, conifers, and lakes.

Quadrant IV (Dim.1 > 0, Dim.2 < 0): SNOWY_MOUNTAIN_1, MOUNTAIN_1, CUMULUS_1, CLOUDS_1, BUSHES_1, WATERFALL_1, ROCKS_1, and RIVER_1 tend to occur together here (along with WINTER_0 and SNOW_0). These are non winter mountain paintings with cumulus clouds, bushes, and waterfalls.

Winter paintings sit on the left side (Dim.1 < 0), where WINTER_1 and SNOW_1 have strong negative coordinates.

Summer (non-winter) paintings sit on the right side (Dim.1 > 0), where WINTER_0, SNOW_0, GRASS_1, FLOWERS_1, RIVER_1, ROCKS_1, and WATERFALL_1 have positive coordinates.

B)

Plot the MCA scores, the coordinates of the individual paintings, filtering to paintings that are “most representative” of each quadrant using the cos2 values. From here, Google image search to find one painting that is representative of each quadrant. Include screenshots of these in your submission, along with discussion of how your selected paintings exemplify the quadrant.

ind_coords <- bobross_mca$ind$coord %>%
  data.frame() %>%
  rownames_to_column('TITLE') %>%
  select(TITLE, Dim.1, Dim.2)

ind_cos2 <- bobross_mca$ind$cos2 %>%
  data.frame() %>%
  rownames_to_column('TITLE') %>%
  mutate(cos2_12 = Dim.1 + Dim.2) %>%
  select(TITLE, cos2_12)

paintings_df <- left_join(ind_coords, ind_cos2, by = 'TITLE') %>%
  mutate(quadrant = case_when(
    Dim.1 > 0 & Dim.2 > 0 ~ 'Q1 (Top-Right)',
    Dim.1 < 0 & Dim.2 > 0 ~ 'Q2 (Top-Left)',
    Dim.1 < 0 & Dim.2 < 0 ~ 'Q3 (Bottom-Left)',
    Dim.1 > 0 & Dim.2 < 0 ~ 'Q4 (Bottom-Right)'
  ))

top_quadrant_paintings <- paintings_df %>%
  group_by(quadrant) %>%
  arrange(desc(cos2_12)) %>%
  slice(1:5)

top_quadrant_paintings
# A tibble: 20 × 5
# Groups:   quadrant [4]
   TITLE                       Dim.1    Dim.2 cos2_12 quadrant         
   <chr>                       <dbl>    <dbl>   <dbl> <chr>            
 1 WINTER_NIGHT               0.826   0.145     0.699 Q1 (Top-Right)   
 2 SNOWY_MORN                 0.826   0.145     0.699 Q1 (Top-Right)   
 3 PURPLE_SPLENDOR            0.850   0.0636    0.698 Q1 (Top-Right)   
 4 WINTER_HIDEAWAY            0.974   0.466     0.677 Q1 (Top-Right)   
 5 FROZEN_BEAUTY_IN_VIGNETTE  0.810   0.0946    0.663 Q1 (Top-Right)   
 6 LAZY_RIVER                -0.328   0.373     0.566 Q2 (Top-Left)    
 7 HIDDEN_CREEK              -0.328   0.373     0.566 Q2 (Top-Left)    
 8 CYPRESS_CREEK             -0.328   0.373     0.566 Q2 (Top-Left)    
 9 WHISPERING_STREAM         -0.434   0.370     0.520 Q2 (Top-Left)    
10 BUBBLING_STREAM           -0.434   0.370     0.520 Q2 (Top-Left)    
11 FINAL_GRACE               -0.0162 -0.709     0.717 Q3 (Bottom-Left) 
12 DOUBLE_OVAL_FANTASY       -0.0162 -0.709     0.717 Q3 (Bottom-Left) 
13 MOUNTAIN_WATERFALL1       -0.157  -0.719     0.532 Q3 (Bottom-Left) 
14 MOUNTAIN_REFLECTIONS      -0.269  -0.623     0.511 Q3 (Bottom-Left) 
15 DIVINE_ELEGANCE           -0.0767 -0.637     0.489 Q3 (Bottom-Left) 
16 ARCTIC_WINTER_DAY          0.886  -0.359     0.801 Q4 (Bottom-Right)
17 FROZEN_SOLITUDE            0.840  -0.434     0.751 Q4 (Bottom-Right)
18 PERFECT_WINTERS_DAY        0.816  -0.353     0.684 Q4 (Bottom-Right)
19 CHRISTMAS_EVE_SNOW         0.827  -0.415     0.676 Q4 (Bottom-Right)
20 SPLENDOR_OF_A_SNOWY_WHITE  0.809  -0.00953   0.628 Q4 (Bottom-Right)
ggplot(data = top_quadrant_paintings, aes(x = Dim.1, y = Dim.2, col = quadrant)) +
  geom_point(size = 3) +
  geom_text_repel(aes(label = TITLE), show.legend = FALSE) +
  geom_hline(aes(yintercept = 0), linetype = 2) +
  geom_vline(aes(xintercept = 0), linetype = 2) +
  theme_classic(base_size = 14) +
  scale_color_discrete(name = '') +
  labs(x = 'Dimension 1', y = 'Dimension 2')

Quadrant I: Lazy River

Lazy River has positive coordinates on both Dimension 1 and Dimension 2 (Dim.1 = 0.33, Dim.2 = 0.37) and is well represented by the first two dimensions (cos2 = 0.57).

The painting shows a winding river bordered by green grass and deciduous trees, with no snow and no mountains. This exemplifies Quadrant I because RIVER_1, GRASS_1, DECIDUOUS_1, MOUNTAIN_0, and WINTER_0 all cluster together in the top-right quadrant.

Quadrant II: Winter Hideaway

Winter Hideaway sits in the top-left quadrant (Dim.1 = -0.97, Dim.2 = 0.47, cos2 = 0.68).

The painting shows a snow-covered winter scene centered around a wooden cabin and fence with conifers and deciduous trees, and no mountains in the background.

This exemplifies Quadrant II because WINTER_1, SNOW_1, CABIN_1, STRUCTURE_1, FENCE_1, and MOUNTAIN_0 tend to occur together here.

Quadrant III: Arctic Winter Day

Arctic Winter Day sits in the bottom-left quadrant (Dim.1 = -0.89, Dim.2 = -0.36) and has the highest two-dimensional cos2 (0.80) in the data set.

The painting shows snow capped mountains under a cloudy sky, a frozen lake, heavy snow, evergreen conifers, and a cabin, with no deciduous trees.

This exemplifies Quadrant III because WINTER_1, SNOW_1, SNOWY_MOUNTAIN_1, MOUNTAIN_1, CONIFER_1, LAKE_1, and CLOUDS_1 all sit together in the bottom-left.

Quadrant IV: Mountain Waterfall

Mountain Waterfall sits in the bottom-right quadrant (Dim.1 = 0.16, Dim.2 = -0.72, cos2 = 0.53).

The painting shows mountains in the background feeding a waterfall framed by green conifers and bushes, with no winter snow on the ground.

This exemplifies Quadrant IV because MOUNTAIN_1, WATERFALL_1, CONIFER_1, BUSHES_1, WINTER_0, and SNOW_0 tend to occur together here.