Матрица загрузки повернутых компонентов - PullRequest
0 голосов
/ 18 июня 2019

Я ищу способ показать в Python Rotated PCA Component Matrix.

Я написал функцию Python, которая принимает фрейм данных Pandas и возвращает некоторые важные элементы анализа PCA. У меня также есть функция вращения "varimax", упомянутая в другом месте. Тем не менее, я не могу найти ничего, чтобы показать "повернутую" компонентную матрицу. В настоящее время PCA показывает только матрицу загрузки компонентов без вращения. В первой функции ниже x_comp2 возвращает отсортированную, не повернутую матрицу загрузки. В отличие от этого, SPSS (и другие) вернет повернутую матрицу загрузки, если вы попросите «вращение» как часть PCA или FA. Вращенная матрица компонентов помогает в интерпретации загрузки переменных на каждый компонент.

#function to run PCA analysis.  yes, I'm sure this can be cleaner... first attempt. x is the name of the dataframe, n is the number of Principal Components to extract.

def pca(x, n):
   pca = PCA(n_components=n)
   l = len(x.columns)
   x_pca = pca.fit(x.iloc[:,0:l])
   pca_t = pca.transform(x.iloc[:,0:l])
   e = pca.explained_variance_
   x_comp = pd.DataFrame(x_pca.components_.T * np.sqrt(x_pca.explained_variance_))
   x_comp['variable'] = np.array(x.columns[0:l])
   x_comp1 = pd.DataFrame(x_comp.set_index('variable'))
   x_comp2 = x_comp1.apply(lambda x: np.where(x < .2,'',round(x,2)))
   x_comp2.sort_values([0,1], ascending=False)
   var=pd.DataFrame(np.cumsum(np.round(x_pca.explained_variance_ratio_, decimals=3)*100))
return x_comp2, var, pca_t, e



#function to perform Varimax rotation
def varimax(Phi, gamma = 1.0, q = 20, tol = 1e-6):
    from scipy import eye, asarray, dot, sum, linalg
    p,k = Phi.shape
    R = eye(k)
    d=0
    for i in range(q):
       d_old = d
       Lambda = dot(Phi, R)
       u,s,vh = linalg.svd(dot(Phi.T,asarray(Lambda)**3 - (gamma/p) * dot(Lambda, np.diag(np.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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...