Hello Hamish,<br><br><div class="gmail_quote">2009/8/18 Hamish <span dir="ltr">&lt;<a href="mailto:hamish_b@yahoo.com" target="_blank">hamish_b@yahoo.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div>Soeren wrote:<br>
&gt; I have verified every step between the old and the new<br>
&gt; version of i.cca. The difference is only in the eigen vector<br>
&gt; computation.<br>
&gt;<br>
&gt; So the big question is ... which result is correct???<br>
<br>
</div>is it more a matter of popular convention than correctness?<br>
i.e. does it depend on your reference frame / POV ?</blockquote><div><br>I don&#39;t know. That may be the point. <br>I faced similar problems while implementing the Karhunen-Loeve-Transformation for 3d geometric body alignment. Dependent on the sign of the eigen vectors, the bodies are rotated by 180° on the principal axes. So i had to rotate the bodies for correct alignment by 180°.<br>
In case of a sphere or a cube, the rotation was irrelevant.<br>So maybe the sign is irrelevant and the result must be interpreted dependent on the POV?<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<br>
<div><br>
&gt; The new one looks more reasonable to me, but well this is<br>
&gt; only one example ... .<br>
&gt;<br>
&gt; Do i have found a bug in the numerical recipes eigen vector<br>
&gt; code, or is the sign of eigen vectors not fixed and changes<br>
&gt; with the chosen algorithm?<br>
<br>
</div>perhaps the output of the i.pca module, the m.eigensystem module (addons),<br>
and R-stats can give you some confidence in one flavour over another.</blockquote><div><br>I notice the same behavior with i.pca. The eigen vectors between old and new version have different signs.<br>I have tested this with the landsat satellite images from the north carolina data set.<br>
<br>For validation i have put the sources of my development version of grass6 and a patched grass6.4RC5 version (for eigen vector output of i.cca) on my web side:<br><br><a href="http://www-pool.math.tu-berlin.de/~soeren/grass/files/grass6_devel_soeren.tar.gz">http://www-pool.math.tu-berlin.de/~soeren/grass/files/grass6_devel_soeren.tar.gz</a><br>
<a href="http://www-pool.math.tu-berlin.de/~soeren/grass/files/grass-6.4.0RC5_soeren.tar.gz">http://www-pool.math.tu-berlin.de/~soeren/grass/files/grass-6.4.0RC5_soeren.tar.gz</a><br><br>Anybody who is interested in this issue, can compile them and run the following script for each grass version with the nc data set:<br>
<br># Set the region to the landsat images<br>g.region rast=lsat5_1987_10<br>i.group group=LandSat input=lsat5_1987_10,lsat5_1987_20,lsat5_1987_30,lsat5_1987_40,lsat5_1987_50,lsat5_1987_60,lsat5_1987_70<br>i.group group=LandSat subgroup=visible input=lsat5_1987_10,lsat5_1987_20,lsat5_1987_30,lsat5_1987_40<br>
i.cluster group=LandSat subgroup=visible sigfile=sig.txt classes=5<br>i.cca --v group=LandSat subgroup=visible signature=sig.txt output=test_cca_1<br><br>i.group group=LandSat subgroup=infra input=lsat5_1987_50,lsat5_1987_60,lsat5_1987_70<br>
i.cluster group=LandSat subgroup=infra sigfile=sig.txt classes=4<br>i.cca --v group=LandSat subgroup=infra signature=sig.txt output=test_cca_2<br><br># Compute the principal components<br>i.pca --o input=lsat5_1987_10,lsat5_1987_20,lsat5_1987_30 output=test_pca_1<br>
i.pca --o input=lsat5_1987_20,lsat5_1987_30,lsat5_1987_40 output=test_pca_2<br>i.pca --o input=lsat5_1987_30,lsat5_1987_40,lsat5_1987_50 output=test_pca_3<br><br><br>You will see the different eigen vector signs.<br></div>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
I&#39;d guess it is highly likely that you are correct and this source was<br>
adapted from Fortran beginnings.<br>
<font color="#888888"></font></blockquote><div><br>I dont know. The code of i.pca and i.cca seems to be correct. I guess the cca developer was not very familiar with the C way of counting but the code seems to be well structured.<br>
<br>The only way to validate i.pca and i.cca are analytical results which can be <br>adopted to grass using r.mapcalc to create the input raster maps for i.cca and i.pca.<br>But i strongly guess ... there are no analytical results for validation. :/<br>
<br>I guess, the sign of the eigen vectors are not of great important&#39;s.<br>So the new versions of i.pca and .icca are working correctly  ... like the old ones. :)<br><br>Best regards<br>Soeren<br><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<font color="#888888"><br>
<br>
Hamish<br>
<br>
<br>
<br>
<br>
<br>
</font></blockquote></div><br>