Hi ! I have recently been faced with a problem on spectral analysis which may find a solution with data clustering techniques. I have an energy spectrum with around 200 energy levels: many of them separated by less or comparable to the error on energy, and so I would like to cluster them to consider the levels very close in energy (with respect to their errors) as only one. Data are organised in a table of four columns where the first one is the energy, the second and third are level intensity and its errors (irrelevant for the clustering),and the fourth is the error on energy.
level52={{6430, 0.93, 0.0808, 12}, {6452, 0.56, 0.112, 13}, {6485, 2.03, \
0.0848, 15}, {6531, 0.78, 0.0579, 18}, {6584, 0.56, 0.0488, 21}, \
{6659, 0.83, 0.0483, 25}}
etc…
I therefore tried:
FindClusters[Drop[level52, None, {2, 3, 4}] -> level52, 40]
but this does not cluster levels properly. Does anyone know what it if the appropriate distance method to use in the case ? Is there a way to define a distance function using the error on energy on the fourth column of the table ? For example a distance which is the difference in energy between the levels divided by the sum of their errors.
Many thanks for the help.