Does anyone have more information on how the procedure for Varimax rotation operates? The description written for the help file (Help file: "WM Procedures Index.ihf") is not helpful and only refers the user to a paper written by Kaiser in 1959 (and the PCA operation to a textbook by Malinowski, both of which I have read in detail). Specifically, the procedure employs the use of an epsilon value which places a tight or loose restriction on convergence (the closer to 0 the tighter the restriction and more decimal places that can be returned). The procedure also generates a wave called "varimaxWave", however, it is not clear how this wave can be used or what it represents. In other statistical software (like SAS), after rotation, a matrix is generated which contains pearson correlation coefficient (r, values between 1 and -1). When I apply this "varimaxWave" as a transformation matrix (i.e., multiply the loading matrix by varimaxWave) the result is not a matrix containing pearson correlation coefficients. So, more simply, my question is: what does "varimaxWave" represent physically (transformation matrix?, rotated loading matrix?, etc.) and how can it be applied to generated a matrix of pearson correlation coefficients?
I wrote both the PCA and the Varimax procedure. I'm however completely confused by your post so I will attempt to respond as well as I can.
Part 1:
Quote:
"varimaxWave", however, it is not clear how this wave can be used or what it represents
I suggest you try the PCA Demo experiment. You can find it under File Menu->Example Experiments->Analysis. Using that experiment and executing the full example you should end up with a display of columns of the varimaxWave. I would hope that the example is sufficiently self explanatory. If not, feel free to contact support@wavemetrics.com with any question.
Part 2:
Quote:
a matrix is generated which contains pearson correlation coefficient
Igor has a number of tools to compute correlations. In this case you are probably interested in the function StatsCorrelation(). I'm afraid I am not familiar with SAS so I will have to guess that the matrix that you are speaking of is one where element (i,j) is the Pearson's correlation between say component 'i' in one representation and component 'j' in another representation. If that is the case you could generate such a matrix using something similar to this:
Function makeCorrelationMatrix(waveA,waveB,numComponents) Wave waveA,waveB Variable numComponents
if(DimSize(waveA,1)<numComponents ||DimSize(waveB,1)<numComponents) doAlert0,"Bad number of components" return0 endif Make/O/N=(numComponents,numComponents) myCorMatrix=0 Variablei,j for(i=0;i<numComponents;i+=1) MatrixOP/O/Free aa=col(waveA,i) for(j=0;j<=i;j+=1) MatrixOP/O/Free bb=col(waveB,j)
myCorMatrix=StatsCorrelation(aa,bb) endfor endfor End
Note that I am only computing half the matrix as the rest can be obtained by symmetry.
I should also mention that if you are performing PCA and rotations, you might want to check out the ICA operation.
Part 1:
I suggest you try the PCA Demo experiment. You can find it under File Menu->Example Experiments->Analysis. Using that experiment and executing the full example you should end up with a display of columns of the varimaxWave. I would hope that the example is sufficiently self explanatory. If not, feel free to contact support@wavemetrics.com with any question.
Part 2:
Igor has a number of tools to compute correlations. In this case you are probably interested in the function StatsCorrelation(). I'm afraid I am not familiar with SAS so I will have to guess that the matrix that you are speaking of is one where element (i,j) is the Pearson's correlation between say component 'i' in one representation and component 'j' in another representation. If that is the case you could generate such a matrix using something similar to this:
Wave waveA,waveB
Variable numComponents
if(DimSize(waveA,1)<numComponents || DimSize(waveB,1)<numComponents)
doAlert 0,"Bad number of components"
return 0
endif
Make/O/N=(numComponents,numComponents) myCorMatrix=0
Variable i,j
for(i=0;i<numComponents;i+=1)
MatrixOP/O/Free aa=col(waveA,i)
for(j=0;j<=i;j+=1)
MatrixOP/O/Free bb=col(waveB,j)
myCorMatrix=StatsCorrelation(aa,bb)
endfor
endfor
End
Note that I am only computing half the matrix as the rest can be obtained by symmetry.
I should also mention that if you are performing PCA and rotations, you might want to check out the ICA operation.
I hope this helps,
A.G.
WaveMetrics, Inc.
July 27, 2017 at 01:29 pm - Permalink