Re: Principal component analysis [message #57133] |
Wed, 05 December 2007 08:13  |
Haje Korth
Messages: 651 Registered: May 1997
|
Senior Member |
|
|
Mort,
thanks for validating this. I tend to just go with PCOMP since I don't
really know what the IMSL routine actually does. As I wrote in the response
to David I just got thrown off by not being able to reconcile the output
from the different routines.
Thanks,
Haje
"mort canty" <m.canty@fz-juelich.de> wrote in message
news:fj6fp9$4jl8$1@zam602.zam.kfa-juelich.de...
> Haje Korth schrieb:
>> Hi,
>> I am puzzled by principal component analysis. I calculated the
>> eigenvalues using both PCOMP and IMSP_PRINC_COMP routines. Could someone
>> enlighten me why the results are completely different? I have tried
>> different keywords to see whether I can match them by trial and error,
>> but I had no success. There must be someone out there who undertstands
>> this much better than I do.
>>
>> Thanks so much,
>> Haje
>>
>>
>> IDL> a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
>> IDL> pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
>> 2.24227 0.757732 0.000000
>> IDL> ev=imsl_princ_comp(a) & print,ev
>> 9.53359 -5.19751 2.66392
>
> Haven't the foggiest what imsl_princ_comp() does, but pcomp() is correct:
>
> pro pca
> a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
> ; covariance matrix
> s1 = correlate(a,/covariance)
> print, s1, ' '
> ; correlation matrix
> s2 = correlate(a)
> print, s2, ' '
> ; diagonalize
> print, eigenql(s1)
> print, eigenql(s2), ' '
> ; compare
> pca=pcomp(a,eigenvalues=ev,/covariance) & print,transpose(ev)
> pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
> end
>
> 12.3333 2.33333 -19.6667
> 2.33333 4.33333 -5.66667
> -19.6667 -5.66667 32.3333
>
> 1.00000 0.319173 -0.984839
> 0.319173 1.00000 -0.478731
> -0.984839 -0.478731 1.00000
>
> 45.2906 3.70938-1.52795e-006
> 2.24227 0.757732-5.49480e-008
>
> 45.2906 3.70938-1.52795e-006
> 2.24227 0.757732 0.000000
>
> Mort
|
|
|
|
Re: Principal component analysis [message #57136 is a reply to message #57134] |
Wed, 05 December 2007 08:13   |
Vince Hradil
Messages: 574 Registered: December 1999
|
Senior Member |
|
|
On Dec 5, 10:08 am, "Haje Korth" <haje.ko...@nospam.jhuapl.edu> wrote:
> I have tried that, it gives
> IDL> ev=imsl_princ_comp(correlate(a,/cov)) & print,ev
> 45.2906 3.70938-2.65683e-006
>
> These EVs are the same as you get using PCOMP with /COV keyword.
>
> "Vince Hradil" <hrad...@yahoo.com> wrote in message
>
> news:54fc6ed8-ccd7-4ac6-8e0d-09f5d190eeac@o6g2000hsd.googleg roups.com...
>
>> On Dec 5, 9:12 am, Vince Hradil <hrad...@yahoo.com> wrote:
>>> On Dec 5, 8:00 am, "Haje Korth" <haje.ko...@nospam.jhuapl.edu> wrote:
>
>>>> Hi,
>>>> I am puzzled by principal component analysis. I calculated the
>>>> eigenvalues
>>>> using both PCOMP and IMSP_PRINC_COMP routines. Could someone enlighten
>>>> me
>>>> why the results are completely different? I have tried different
>>>> keywords to
>>>> see whether I can match them by trial and error, but I had no success.
>>>> There
>>>> must be someone out there who undertstands this much better than I do.
>
>>>> Thanks so much,
>>>> Haje
>
>>>> IDL> a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
>>>> IDL> pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
>>>> 2.24227 0.757732 0.000000
>>>> IDL> ev=imsl_princ_comp(a) & print,ev
>>>> 9.53359 -5.19751 2.66392
>
>>> From the HELP:
>
>>> Syntax
>>> Result = IMSL_PRINC_COMP(covariances [, /COV_MATRIX]
>>> [, /CORR_MATRIX] [, CORRELATIONS=variable] [, CUM_PERCENT=variable] [,
>>> DF=variable] [, /DOUBLE] [, EIGENVECTORS=variable] [,
>>> STDEV=variable] )
>
>>> Note that IMSL_PRINC_COMP requires that you pass the covariance or
>>> correlation matrix - not the vectors.
>
>> so maybe try
>> ev=imsl_princ_comp(correlate(a,/covariance) & print, ev
>> (I don't have an analyst license)
There you go 8^)
How about
ev=imsl_princ_comp(correlate(a)) & print, ev
|
|
|
Re: Principal component analysis [message #57137 is a reply to message #57134] |
Wed, 05 December 2007 08:08   |
Haje Korth
Messages: 651 Registered: May 1997
|
Senior Member |
|
|
I have tried that, it gives
IDL> ev=imsl_princ_comp(correlate(a,/cov)) & print,ev
45.2906 3.70938-2.65683e-006
These EVs are the same as you get using PCOMP with /COV keyword.
"Vince Hradil" <hradilv@yahoo.com> wrote in message
news:54fc6ed8-ccd7-4ac6-8e0d-09f5d190eeac@o6g2000hsd.googleg roups.com...
> On Dec 5, 9:12 am, Vince Hradil <hrad...@yahoo.com> wrote:
>> On Dec 5, 8:00 am, "Haje Korth" <haje.ko...@nospam.jhuapl.edu> wrote:
>>
>>> Hi,
>>> I am puzzled by principal component analysis. I calculated the
>>> eigenvalues
>>> using both PCOMP and IMSP_PRINC_COMP routines. Could someone enlighten
>>> me
>>> why the results are completely different? I have tried different
>>> keywords to
>>> see whether I can match them by trial and error, but I had no success.
>>> There
>>> must be someone out there who undertstands this much better than I do.
>>
>>> Thanks so much,
>>> Haje
>>
>>> IDL> a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
>>> IDL> pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
>>> 2.24227 0.757732 0.000000
>>> IDL> ev=imsl_princ_comp(a) & print,ev
>>> 9.53359 -5.19751 2.66392
>>
>> From the HELP:
>>
>> Syntax
>> Result = IMSL_PRINC_COMP(covariances [, /COV_MATRIX]
>> [, /CORR_MATRIX] [, CORRELATIONS=variable] [, CUM_PERCENT=variable] [,
>> DF=variable] [, /DOUBLE] [, EIGENVECTORS=variable] [,
>> STDEV=variable] )
>>
>> Note that IMSL_PRINC_COMP requires that you pass the covariance or
>> correlation matrix - not the vectors.
>
> so maybe try
> ev=imsl_princ_comp(correlate(a,/covariance) & print, ev
> (I don't have an analyst license)
|
|
|
Re: Principal component analysis [message #57141 is a reply to message #57137] |
Wed, 05 December 2007 07:24   |
Mort Canty
Messages: 134 Registered: March 2003
|
Senior Member |
|
|
Haje Korth schrieb:
> Hi,
> I am puzzled by principal component analysis. I calculated the eigenvalues
> using both PCOMP and IMSP_PRINC_COMP routines. Could someone enlighten me
> why the results are completely different? I have tried different keywords to
> see whether I can match them by trial and error, but I had no success. There
> must be someone out there who undertstands this much better than I do.
>
> Thanks so much,
> Haje
>
>
> IDL> a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
> IDL> pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
> 2.24227 0.757732 0.000000
> IDL> ev=imsl_princ_comp(a) & print,ev
> 9.53359 -5.19751 2.66392
>
>
Haven't the foggiest what imsl_princ_comp() does, but pcomp() is correct:
pro pca
a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
; covariance matrix
s1 = correlate(a,/covariance)
print, s1, ' '
; correlation matrix
s2 = correlate(a)
print, s2, ' '
; diagonalize
print, eigenql(s1)
print, eigenql(s2), ' '
; compare
pca=pcomp(a,eigenvalues=ev,/covariance) & print,transpose(ev)
pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
end
12.3333 2.33333 -19.6667
2.33333 4.33333 -5.66667
-19.6667 -5.66667 32.3333
1.00000 0.319173 -0.984839
0.319173 1.00000 -0.478731
-0.984839 -0.478731 1.00000
45.2906 3.70938-1.52795e-006
2.24227 0.757732-5.49480e-008
45.2906 3.70938-1.52795e-006
2.24227 0.757732 0.000000
Mort
|
|
|
Re: Principal component analysis [message #57143 is a reply to message #57141] |
Wed, 05 December 2007 07:14   |
Vince Hradil
Messages: 574 Registered: December 1999
|
Senior Member |
|
|
On Dec 5, 9:12 am, Vince Hradil <hrad...@yahoo.com> wrote:
> On Dec 5, 8:00 am, "Haje Korth" <haje.ko...@nospam.jhuapl.edu> wrote:
>
>> Hi,
>> I am puzzled by principal component analysis. I calculated the eigenvalues
>> using both PCOMP and IMSP_PRINC_COMP routines. Could someone enlighten me
>> why the results are completely different? I have tried different keywords to
>> see whether I can match them by trial and error, but I had no success. There
>> must be someone out there who undertstands this much better than I do.
>
>> Thanks so much,
>> Haje
>
>> IDL> a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
>> IDL> pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
>> 2.24227 0.757732 0.000000
>> IDL> ev=imsl_princ_comp(a) & print,ev
>> 9.53359 -5.19751 2.66392
>
> From the HELP:
>
> Syntax
> Result = IMSL_PRINC_COMP(covariances [, /COV_MATRIX]
> [, /CORR_MATRIX] [, CORRELATIONS=variable] [, CUM_PERCENT=variable] [,
> DF=variable] [, /DOUBLE] [, EIGENVECTORS=variable] [,
> STDEV=variable] )
>
> Note that IMSL_PRINC_COMP requires that you pass the covariance or
> correlation matrix - not the vectors.
so maybe try
ev=imsl_princ_comp(correlate(a,/covariance) & print, ev
(I don't have an analyst license)
|
|
|
Re: Principal component analysis [message #57144 is a reply to message #57143] |
Wed, 05 December 2007 07:12   |
Vince Hradil
Messages: 574 Registered: December 1999
|
Senior Member |
|
|
On Dec 5, 8:00 am, "Haje Korth" <haje.ko...@nospam.jhuapl.edu> wrote:
> Hi,
> I am puzzled by principal component analysis. I calculated the eigenvalues
> using both PCOMP and IMSP_PRINC_COMP routines. Could someone enlighten me
> why the results are completely different? I have tried different keywords to
> see whether I can match them by trial and error, but I had no success. There
> must be someone out there who undertstands this much better than I do.
>
> Thanks so much,
> Haje
>
> IDL> a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
> IDL> pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
> 2.24227 0.757732 0.000000
> IDL> ev=imsl_princ_comp(a) & print,ev
> 9.53359 -5.19751 2.66392
From the HELP:
Syntax
Result = IMSL_PRINC_COMP(covariances [, /COV_MATRIX]
[, /CORR_MATRIX] [, CORRELATIONS=variable] [, CUM_PERCENT=variable] [,
DF=variable] [, /DOUBLE] [, EIGENVECTORS=variable] [,
STDEV=variable] )
Note that IMSL_PRINC_COMP requires that you pass the covariance or
correlation matrix - not the vectors.
|
|
|
|
|
|
|
Re: Principal component analysis [message #57326 is a reply to message #57136] |
Wed, 05 December 2007 08:47  |
Haje Korth
Messages: 651 Registered: May 1997
|
Senior Member |
|
|
Yup, that'll do it. I am still not sure I understand the logic behind this.
I though the correlation is part of the PCA.
"Vince Hradil" <hradilv@yahoo.com> wrote in message
news:8362380a-217a-45d2-b7c4-0198e5931b39@y5g2000hsf.googleg roups.com...
> On Dec 5, 10:08 am, "Haje Korth" <haje.ko...@nospam.jhuapl.edu> wrote:
>> I have tried that, it gives
>> IDL> ev=imsl_princ_comp(correlate(a,/cov)) & print,ev
>> 45.2906 3.70938-2.65683e-006
>>
>> These EVs are the same as you get using PCOMP with /COV keyword.
>>
>> "Vince Hradil" <hrad...@yahoo.com> wrote in message
>>
>> news:54fc6ed8-ccd7-4ac6-8e0d-09f5d190eeac@o6g2000hsd.googleg roups.com...
>>
>>> On Dec 5, 9:12 am, Vince Hradil <hrad...@yahoo.com> wrote:
>>>> On Dec 5, 8:00 am, "Haje Korth" <haje.ko...@nospam.jhuapl.edu> wrote:
>>
>>>> > Hi,
>>>> > I am puzzled by principal component analysis. I calculated the
>>>> > eigenvalues
>>>> > using both PCOMP and IMSP_PRINC_COMP routines. Could someone
>>>> > enlighten
>>>> > me
>>>> > why the results are completely different? I have tried different
>>>> > keywords to
>>>> > see whether I can match them by trial and error, but I had no
>>>> > success.
>>>> > There
>>>> > must be someone out there who undertstands this much better than I
>>>> > do.
>>
>>>> > Thanks so much,
>>>> > Haje
>>
>>>> > IDL> a=[[1,-2,-6],[-2,1,-3],[-6,-3,5]]
>>>> > IDL> pca=pcomp(a,eigenvalues=ev) & print,transpose(ev)
>>>> > 2.24227 0.757732 0.000000
>>>> > IDL> ev=imsl_princ_comp(a) & print,ev
>>>> > 9.53359 -5.19751 2.66392
>>
>>>> From the HELP:
>>
>>>> Syntax
>>>> Result = IMSL_PRINC_COMP(covariances [, /COV_MATRIX]
>>>> [, /CORR_MATRIX] [, CORRELATIONS=variable] [, CUM_PERCENT=variable] [,
>>>> DF=variable] [, /DOUBLE] [, EIGENVECTORS=variable] [,
>>>> STDEV=variable] )
>>
>>>> Note that IMSL_PRINC_COMP requires that you pass the covariance or
>>>> correlation matrix - not the vectors.
>>
>>> so maybe try
>>> ev=imsl_princ_comp(correlate(a,/covariance) & print, ev
>>> (I don't have an analyst license)
>
> There you go 8^)
> How about
> ev=imsl_princ_comp(correlate(a)) & print, ev
|
|
|
Re: Principal component analysis [message #57331 is a reply to message #57133] |
Wed, 05 December 2007 08:25  |
David Fanning
Messages: 11724 Registered: August 2001
|
Senior Member |
|
|
Haje Korth writes:
> thanks for validating this. I tend to just go with PCOMP since I don't
> really know what the IMSL routine actually does. As I wrote in the response
> to David I just got thrown off by not being able to reconcile the output
> from the different routines.
It looks to me like passing the CORRELATE results
to EIGENQL just scales the eigenvalues into -1 to 1. That
would seem to be a sensible choice to me.
Cheers,
David
--
David Fanning, Ph.D.
Fanning Software Consulting, Inc.
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Sepore ma de ni thui. ("Perhaps thou speakest truth.")
|
|
|