One of the case studies of the Analyse de données (L3
Informatique) course, for which fdm2id was written.
How many factorial axes a dataset really needs, how to read them, and
what a supplementary variable is for.
The other case studies are listed by
vignette (package = "fdm2id"); they use the same handful of
functions on other data, and can be read in any order.
A database on breast cancer, built in 1992 by Dr W. H. Wolberg at the University of Wisconsin. Of the 699 patients, 458 carried a benign tumour and 241 a malignant one. Each tumour is described by nine criteria (size, shape of the cells, and so on), each graded from 1 to 10.
Sixteen records have a missing value, all of them on
Bare.nuclei. Rather than dropping those patients, the value
is predicted from the eight other criteria and rounded back to the 1–10
scale – a regression used as an imputation, which is the first thing the
package’s LINREG is good for here.
library (mlbench)
data (BreastCancer)
BreastCancer = BreastCancer [, -1]
BreastCancer [, -10] = lapply (BreastCancer [, -10], function (x) as.numeric (as.character (x)))
names (which (colSums (is.na (BreastCancer)) > 0))
#> [1] "Bare.nuclei"
train = BreastCancer [!is.na (BreastCancer$Bare.nuclei), ]
BreastCancer [is.na (BreastCancer$Bare.nuclei), 6] =
round (predict (LINREG (train [, -c (6, 10)], train [, 6]),
BreastCancer [is.na (BreastCancer$Bare.nuclei), -6]))
summary (BreastCancer)
#> Cl.thickness Cell.size Cell.shape Marg.adhesion
#> Min. : 1.000 Min. : 1.000 Min. : 1.000 Min. : 1.000
#> 1st Qu.: 2.000 1st Qu.: 1.000 1st Qu.: 1.000 1st Qu.: 1.000
#> Median : 4.000 Median : 1.000 Median : 1.000 Median : 1.000
#> Mean : 4.418 Mean : 3.134 Mean : 3.207 Mean : 2.807
#> 3rd Qu.: 6.000 3rd Qu.: 5.000 3rd Qu.: 5.000 3rd Qu.: 4.000
#> Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
#> Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli
#> Min. : 1.000 Min. : 1.000 Min. : 1.000 Min. : 1.000
#> 1st Qu.: 2.000 1st Qu.: 1.000 1st Qu.: 2.000 1st Qu.: 1.000
#> Median : 2.000 Median : 1.000 Median : 3.000 Median : 1.000
#> Mean : 3.216 Mean : 3.528 Mean : 3.438 Mean : 2.867
#> 3rd Qu.: 4.000 3rd Qu.: 6.000 3rd Qu.: 5.000 3rd Qu.: 4.000
#> Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
#> Mitoses Class
#> Min. : 1.000 benign :458
#> 1st Qu.: 1.000 malignant:241
#> Median : 1.000
#> Mean : 1.589
#> 3rd Qu.: 1.000
#> Max. :10.000Answer. Both Kaiser’s rule and the elbow of the scree plot say that a single factorial axis is enough. It carries 65.6% of the variance on its own, the second one 8.6%.
Answer. On the correlation circle, every
variable is strongly tied to the first axis. The second one depends
mainly on Mitoses – the only variable whose coordinate
on it is large.
The class was declared as a supplementary variable, so it played no part in building the axes. Nothing stops us from colouring the individuals by it afterwards – that is the whole point of declaring it supplementary.
Answer. The benign tumours form a very homogeneous group, the malignant ones a much more scattered one. The position on the first principal axis is related to the type of the tumour: the higher the value, the more likely the tumour is malignant.
round (tapply (pca$ind$coord [, 1], BreastCancer [, 10], mean), 2)
#> benign malignant
#> -1.57 2.99
round (tapply (pca$ind$coord [, 1], BreastCancer [, 10], sd), 2)
#> benign malignant
#> 0.69 1.60The two means are far apart, and the standard deviation of the malignant group is more than twice that of the benign one.