2
$\begingroup$

I have a correlation matrix, which I want to display in the following format:

  • 2 decimal places (e.g., -0.56)
  • number signs "+" and "-" (e.g., +0.76 or -0.34)

I've tried many different things, but I had no success so far... The code I'm using to generate the data is:

randomWalk[x_] := Accumulate[Prepend[RandomVariate[NormalDistribution[0, 1], x], 0]]
exchange = Table[Subscript[asset, i] = randomWalk[500], {i, 1, 5}];

Now the code I'm using to generate the correlation matrix:

N[Correlation[Transpose[exchange][[1 ;; 500, All]]], 2]//MatrixForm

However, the numbers generated are displayed with $MachinePrecision, and not 2 decimal places (although I've used N[#,2]). I've tried another code:

MatrixForm[Round[Correlation[Transpose[exchange][[1 ;; 500, All]]], 0.01]]

In this case I get the correlation matrix with 2 decimal places, but it's still missing the "+" signal before the number. So I've tried this last code:

NumberForm[Round[Correlation[Transpose[exchange][[1 ;; 500, All]]], 0.01],NumberSigns -> {"-", "+"}]//MatrixForm

In this last case I get the numbers correctly formatted, but I'm not able to put them in MatrixForm. Can someone give me a hint to solve this?

$\endgroup$
  • $\begingroup$ Why not NumberForm[MatrixForm[Round[...,NumbersSigns->{"-","+"}]? $\endgroup$ – andre314 Apr 9 '13 at 16:00
  • $\begingroup$ @ andre Thanks A LOT !!! It works perfectly now! $\endgroup$ – Rod Apr 9 '13 at 16:02
3
$\begingroup$

It is perfectly possible to wrap NumberForm around MatrixForm :

NumberForm[MatrixForm[Round[...,NumbersSigns->{"-","+"}] does the job

$\endgroup$
3
$\begingroup$

Of course there are many ways of doing this. Here's one:

mat = RandomReal[{-1, 1}, {4, 4}]
Table[NumberForm[mat[[i, j]], {3, 2}, NumberSigns -> {"-", "+"}], 
     {i, 1, 4}, {j, 1, 4}] // MatrixForm

You get:

enter image description here

$\endgroup$
  • $\begingroup$ Imagine you have mat defined... try to use: NumberForm[mat, NumberSigns -> {"-", "+"}] // TableForm. It doesn't work... $\endgroup$ – Rod Apr 9 '13 at 14:47
  • $\begingroup$ what's wrong with the output of the above, either Table or Map? $\endgroup$ – bill s Apr 9 '13 at 14:50
  • $\begingroup$ You've generated numbers with 2 decimal places... try something with $MachinePrecision... $\endgroup$ – Rod Apr 9 '13 at 14:52
  • $\begingroup$ mat has full real precision, it's the argument {3,2} that does the truncating to 3 significant digits plus two to the right of the decimal place. $\endgroup$ – bill s Apr 9 '13 at 14:54
  • $\begingroup$ Ok, but the problem is: I'm already using mat[[1 ;; 500, All]] inside a DynamicModule environment... so, I can't use Table[mat[[i,j]],{i,1,4},{j,1,4}]... $\endgroup$ – Rod Apr 9 '13 at 15:06

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.