Develop a R program to calculate and visualize correlation matrix for a given dataset, with color coded cells indicating the strength and relations of correlations, using ggplot2::geom_tile function.
Step 1 : Load the required library
library (ggplot2)
library (tidyr)
library (dplyr)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
Step 2 : Load the dataset
data (mtcars)
head (mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
cor_matrix <- cor (mtcars)
cor_df <- as.data.frame (as.table (cor_matrix))
cor_df
Var1 Var2 Freq
1 mpg mpg 1.00000000
2 cyl mpg -0.85216196
3 disp mpg -0.84755138
4 hp mpg -0.77616837
5 drat mpg 0.68117191
6 wt mpg -0.86765938
7 qsec mpg 0.41868403
8 vs mpg 0.66403892
9 am mpg 0.59983243
10 gear mpg 0.48028476
11 carb mpg -0.55092507
12 mpg cyl -0.85216196
13 cyl cyl 1.00000000
14 disp cyl 0.90203287
15 hp cyl 0.83244745
16 drat cyl -0.69993811
17 wt cyl 0.78249579
18 qsec cyl -0.59124207
19 vs cyl -0.81081180
20 am cyl -0.52260705
21 gear cyl -0.49268660
22 carb cyl 0.52698829
23 mpg disp -0.84755138
24 cyl disp 0.90203287
25 disp disp 1.00000000
26 hp disp 0.79094859
27 drat disp -0.71021393
28 wt disp 0.88797992
29 qsec disp -0.43369788
30 vs disp -0.71041589
31 am disp -0.59122704
32 gear disp -0.55556920
33 carb disp 0.39497686
34 mpg hp -0.77616837
35 cyl hp 0.83244745
36 disp hp 0.79094859
37 hp hp 1.00000000
38 drat hp -0.44875912
39 wt hp 0.65874789
40 qsec hp -0.70822339
41 vs hp -0.72309674
42 am hp -0.24320426
43 gear hp -0.12570426
44 carb hp 0.74981247
45 mpg drat 0.68117191
46 cyl drat -0.69993811
47 disp drat -0.71021393
48 hp drat -0.44875912
49 drat drat 1.00000000
50 wt drat -0.71244065
51 qsec drat 0.09120476
52 vs drat 0.44027846
53 am drat 0.71271113
54 gear drat 0.69961013
55 carb drat -0.09078980
56 mpg wt -0.86765938
57 cyl wt 0.78249579
58 disp wt 0.88797992
59 hp wt 0.65874789
60 drat wt -0.71244065
61 wt wt 1.00000000
62 qsec wt -0.17471588
63 vs wt -0.55491568
64 am wt -0.69249526
65 gear wt -0.58328700
66 carb wt 0.42760594
67 mpg qsec 0.41868403
68 cyl qsec -0.59124207
69 disp qsec -0.43369788
70 hp qsec -0.70822339
71 drat qsec 0.09120476
72 wt qsec -0.17471588
73 qsec qsec 1.00000000
74 vs qsec 0.74453544
75 am qsec -0.22986086
76 gear qsec -0.21268223
77 carb qsec -0.65624923
78 mpg vs 0.66403892
79 cyl vs -0.81081180
80 disp vs -0.71041589
81 hp vs -0.72309674
82 drat vs 0.44027846
83 wt vs -0.55491568
84 qsec vs 0.74453544
85 vs vs 1.00000000
86 am vs 0.16834512
87 gear vs 0.20602335
88 carb vs -0.56960714
89 mpg am 0.59983243
90 cyl am -0.52260705
91 disp am -0.59122704
92 hp am -0.24320426
93 drat am 0.71271113
94 wt am -0.69249526
95 qsec am -0.22986086
96 vs am 0.16834512
97 am am 1.00000000
98 gear am 0.79405876
99 carb am 0.05753435
100 mpg gear 0.48028476
101 cyl gear -0.49268660
102 disp gear -0.55556920
103 hp gear -0.12570426
104 drat gear 0.69961013
105 wt gear -0.58328700
106 qsec gear -0.21268223
107 vs gear 0.20602335
108 am gear 0.79405876
109 gear gear 1.00000000
110 carb gear 0.27407284
111 mpg carb -0.55092507
112 cyl carb 0.52698829
113 disp carb 0.39497686
114 hp carb 0.74981247
115 drat carb -0.09078980
116 wt carb 0.42760594
117 qsec carb -0.65624923
118 vs carb -0.56960714
119 am carb 0.05753435
120 gear carb 0.27407284
121 carb carb 1.00000000
Step 3 : Visualize using ggplot2::geom_tile
ggplot (cor_df, aes (x = Var1, y = Var2, fill = Freq)) +
geom_tile (color = "white" ) +
scale_fill_gradient2 (
low = "blue" , mid = "white" , high = "red" ,
midpoint = 0 , limit = c (- 1 , 1 ),
name = "Correlation"
) +
geom_text (aes (label = round (Freq,2 )), size = 3 ) +
labs ( title = "Correlation Matrix (mtcars)" ,
x = "Var1" ,
y = "Var2" ) +
theme_minimal () +
theme (axis.text.x = element_text (angle = 45 , hjust = 1 ))