выполните вращение varimax в python с помощью numpy
Я работаю над анализом главных компонентов матрицы. Я уже нашел компонентную матрицу, показанную ниже
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]])
Мне нужно выполнить вращение varimax в этой компонентной матрице, но не удалось найти точный метод и степень вращения. Большинство примеров показано в R. Однако мне нужен метод в python.
3 ответов
Вы можете найти много примеров с Python. Вот пример, который я нашел для Python, используя только numpy
, on Википедия:
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)
Википедия имеет пример в python здесь!
подъем примера и пошив его для включает в себя:
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)
Я столько раз искал решения для факторного анализа в python на Stack-overflow, что недавно сделал свой собственный пакет,fa-kit. Несмотря на то, что это старый пост, я бросаю эту ссылку на случай, если в будущем кто-то еще попадет сюда через google.