2
$\begingroup$

IO have those data as a text file

tmp = {
{"Canada", 57.9, 14.5, 25.7, 2., 0.966},
{"USA", 6.3, 19.1, 71.7, 2.4, 0.956},
{"Mexique", 10.6, 3.8, 81.7, 4., 0.854},
{"Bresil", 83.9, 2.8, 9.3, 4., 0.813},
{"Allemagne", 4.3, 21.9, 62.3, 10.8, 0.947},
{"Belgique", 1.9, 54.4, 40.2, 2.7, 0.953},
{"Espagne", 9.9, 17.8, 61.7, 10., 0.955},
{"Finlande", 17.4, 28.8, 40.6, 12.9, 0.959},
{"France", 11.2, 77., 9.9, 1.5, 0.961},
{"Pays-Bas", 0.1, 4.3, 86.9, 7.2, 0.964},
{"Royaume-Uni", 2.3, 15.6, 76.8, 4.1, 0.947},
{"Suede", 44.7, 44.7, 3.9, 6.1, 0.963},
{"Suisse", 53.9, 41., 1.5, 1.7, 0.96},
{"Tchequie", 2.9, 29.6, 66.5, 1., 0.903},
{"Hongrie", 0.5, 36.7, 54.3, 8.1, 0.879},
{"Russie", 18.7, 15.9, 65., 0., 0.817},
{"Ukraine", 6.4, 48.1, 45.5, 0.1, 0.796},
{"Afrique.du.Sud", 2.3, 4.3, 93.3, 0.1, 0.683},
{"Chine", 14.2, 2., 83.5, 0.3, 0.772},
{"Japon", 7.5, 24.2, 65.6, 2.2, 0.96},
{"Inde", 15.2, 2.6, 80.4, 1.8, 0.612},
{"Nouvelle-Zelande", 54.4, 0., 34.2, 11.5, 0.95}
}

And I Imported it as a text file with option "data".

Then I can select only the data by

 tmp1 = Rest[tmp[[All, 2 ;; 6]]]

Then I can calculate the matrix of correlations

 Correlation[tmp1] 

No problem and easy done. But I want to make a nice presentation of the correlation coefficient in a grid or a table with the name of the items as entry in line and column and positive correlation in blue - or the background of its cell in LightBlue and in LightRed the negative correlations.

At the end, I would like to conduct an acp and make presentation as in R. One can find an example here.

How can I do this ?

$\endgroup$
  • $\begingroup$ Do you want Correlation[tmp1]? Or do you actually want Correlation[Transpose[tmp1]], giving the correlation between countries? $\endgroup$ – mikado Sep 11 '16 at 21:29
9
$\begingroup$

For corr = Correlation[tmp1];:

ticks = {{Table[{i, "row " <> ToString[i]}, {i, 1, Length@corr}], None}, 
{None, Table[{i, "column " <> ToString[i]}, {i, 1, Length@corr}]}};

matplot1 = 
 MatrixPlot[corr, 
  Epilog -> {Black, 
    MapIndexed[Text[#1, Reverse[#2 - 1/2]] &, Reverse[corr], {2}]}, 
  Mesh -> True, 
  ColorFunction -> ColorData[{"Temperature", "Reverse"}], 
  FrameTicks -> ticks]

enter image description here

I took the Epilog for placing the values in respective cells from here.


If you want the correlation between countries:

names = tmp[[All, 1]];

corr1 = Correlation[Transpose@tmp1];

ticks = {{Table[{i, names[[i]]}, {i, 1, Length@corr1}], None}, 
{None, Table[{i, Rotate[names[[i]], 90 Degree]}, {i, 1, Length@corr1}]}};

matplot2 = 
 MatrixPlot[corr1, Mesh -> True, 
  ColorFunction -> ColorData[{"Temperature", "Reverse"}], 
  FrameTicks -> ticks]

enter image description here

I rotated the ticks of the columns to be better visible, and removed the Epilog as it was unreadable.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.