Calculating Autocorrelations for Large Data Sets in Excel: Tips and Alternatives

AI Thread Summary
To calculate autocorrelations for 9,999 equi-spaced data points in Excel, users can utilize the CORREL function, but it does not extend well for multiple lags. A suggested formula using OFFSET can help automate the process by dynamically adjusting ranges based on lag values. However, Excel 2008 for Mac lacks support for VB Macros, making it challenging for extensive calculations. Alternatives like Python with numpy and scipy, as well as FreeMat, Scilab, and Octave, are recommended for more efficient computation and plotting of autocorrelation. Additionally, users are seeking guidance on implementing a correlogram in Mathematica, indicating a preference for more robust programming solutions over Excel for handling large datasets.
MichalXC
Messages
39
Reaction score
0
I have a set of 9,999 equi-spaced data points, and I would like to calculate the autocorrelations for ALL lags up to 5,000.

In Excel, I want to have this code:

=CORREL(B1:B9998,B2:B9999)
=CORREL(B1:B9997,B3:B9999)
=CORREL(B1:B9996,B4:B9999)
...
=CORREL(B1:B5000,B5000:B9999)

Unfortunately, the formula does not "translate" nicely when I extend it downwards.

Also I have Excel 2008 for Mac, which does not handle VB Macros.

Can anyone direct me? Or suggest a better way of doing it? I don't have MatLab, but I do have Mathematica.

Thanks in advance.
 
Computer science news on Phys.org
Well, I am going to suggest Python, but only because you thought of Matlab, in the first place...which shows that you might be inclined to some scripting.

Actually, there is FreeMat which is an a-la-matlab application.

But also, there is Python with its numpy and scipy (scipy.stats) modules you can do anything you want and plot it right away with matplotlib.

...just a thought
 
Try:
=CORREL(OFFSET($B$1, 0, 0, 9999-A1, 1 ),OFFSET($B$1, A1, 0, 9999-A1, 1 ))
=CORREL(OFFSET($B$1, 0, 0, 9999-A2, 1 ),OFFSET($B$1, A2, 0, 9999-A2, 1 ))

after you have filled column A with the consecutive row numbers (1, 2, 3, ...)
 
Gsal, sorry, I don't know Python.

The above-posted formula works great though!

Thanks, both, for your replies!
 
Glad to be of help! :smile:
 
Hi again.

Excel (understandably) becomes unresponsive when asked to do some of these calculations. Seeing as much, I would be most grateful if someone could show me how to implement a correlogram (autocorrelation plot) in Mathematica.
 
since you mentioned MATLAB (deja vu?), another program you might want to check out is Scilab. not a full clone, but very similar to matlab.
 
Then, there is Octave and Freemat. And of course, Python with numpy/scipy.
 

Similar threads

Replies
1
Views
5K
Replies
7
Views
1K
Replies
2
Views
2K
Replies
1
Views
3K
Replies
5
Views
3K
Replies
3
Views
10K
Back
Top