effectuer la rotation de varimax en python en utilisant numpy
je travaille sur l'analyse en composantes principales d'une matrice. J'ai déjà trouvé la matrice des composants ci-dessous
A = np.array([[-0.73465832 -0.24819766 -0.32045055]
[-0.3728976 0.58628043 -0.63433607]
[-0.72617152 0.53812819 -0.22846634]
[ 0.34042864 -0.08063226 -0.80064174]
[ 0.8804307 0.17166265 0.04381426]
[-0.66313032 0.54576874 0.37964986]
[ 0.286712 0.68305196 0.21769803]
[ 0.94651412 0.14986739 -0.06825887]
[ 0.40699665 0.73202276 -0.08462949]])
j'ai besoin d'effectuer la rotation varimax dans cette matrice de composants mais n'ai pas pu trouver la méthode exacte et le degré de rotation. La plupart des exemples sont affichés en R. cependant, j'ai besoin de la méthode en python.
3 réponses
Vous pouvez trouver beaucoup d'exemples avec Python. Voici un exemple que j'ai trouvé pour Python en utilisant seulement numpy
Wikipédia:
def varimax(Phi, gamma = 1, q = 20, tol = 1e-6):
from numpy import eye, asarray, dot, sum, diag
from numpy.linalg import svd
p,k = Phi.shape
R = eye(k)
d=0
for i in xrange(q):
d_old = d
Lambda = dot(Phi, R)
u,s,vh = svd(dot(Phi.T,asarray(Lambda)**3 - (gamma/p) * dot(Lambda, diag(diag(dot(Lambda.T,Lambda))))))
R = dot(u,vh)
d = sum(s)
if d/d_old < tol: break
return dot(Phi, R)
Wikipédia a un exemple en python ici!
la Levée de l'exemple et en l'adaptant pour num PY:
from numpy import eye, asarray, dot, sum, diag
from numpy.linalg import svd
def varimax(Phi, gamma = 1.0, q = 20, tol = 1e-6):
p,k = Phi.shape
R = eye(k)
d=0
for i in xrange(q):
d_old = d
Lambda = dot(Phi, R)
u,s,vh = svd(dot(Phi.T,asarray(Lambda)**3 - (gamma/p) * dot(Lambda, diag(diag(dot(Lambda.T,Lambda))))))
R = dot(u,vh)
d = sum(s)
if d_old!=0 and d/d_old < 1 + tol: break
return dot(Phi, R)
j'ai cherché des solutions pour faire l'analyse factorielle en python sur stack-overflow tellement de fois, que j'ai récemment fait mon propre paquet, fa-kit. Même si c'est un vieux post, je vomis ce lien au cas où il ya quelqu'un d'autre dans le futur qui arrive ici via google.