'Use Index of the Loadings (IL) method to calculate the optimal number of principal components
I want to use Index of the Loadings method to calculate the optimal number of principal components using the index_of_loadings_matrix
function. My dataframe was converted into a matrix before I feed it into the function. My code is raising "self._check_indexing_error(key)" error.
import pandas as pd
# Choose the optimal number of principal components using Index of the Loadings
mat = df.cov()
def index_of_loadings_matrix(cov_matrix):
eig_val, eig_vec = np.linalg.eig(cov_matrix)
r = np.zeros((len(eig_vec), cov_matrix.shape[0]))
for i in range(len(eig_vec)):
for j in range(cov_matrix.shape[0]):
r[i][j] = (eig_vec[i][j]**2 * eig_val[i])**2 / np.sqrt(cov_matrix[j][j])
return r
index_of_loadings_matrix(mat)
Traceback:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
File ~/env/lib/python3.8/site-packages/pandas/core/indexes/base.py:3621, in Index.get_loc(self, key, method, tolerance)
3620 try:
-> 3621 return self._engine.get_loc(casted_key)
3622 except KeyError as err:
File ~/env/lib/python3.8/site-packages/pandas/_libs/index.pyx:136, in pandas._libs.index.IndexEngine.get_loc()
File ~/env/lib/python3.8/site-packages/pandas/_libs/index.pyx:163, in pandas._libs.index.IndexEngine.get_loc()
File pandas/_libs/hashtable_class_helper.pxi:5198, in pandas._libs.hashtable.PyObjectHashTable.get_item()
File pandas/_libs/hashtable_class_helper.pxi:5206, in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 0
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
Input In [555], in <cell line: 12>()
9 r[i][j] = (eig_vec[i][j]**2 * eig_val[i])**2 / np.sqrt(cov_matrix[j][j])
10 return r
---> 12 index_of_loadings_matrix(mat)
Input In [555], in index_of_loadings_matrix(cov_matrix)
7 for i in range(len(eig_vec)):
8 for j in range(cov_matrix.shape[0]):
----> 9 r[i][j] = (eig_vec[i][j]**2 * eig_val[i])**2 / np.sqrt(cov_matrix[j][j])
10 return r
File ~/env/lib/python3.8/site-packages/pandas/core/frame.py:3505, in DataFrame.__getitem__(self, key)
3503 if self.columns.nlevels > 1:
3504 return self._getitem_multilevel(key)
-> 3505 indexer = self.columns.get_loc(key)
3506 if is_integer(indexer):
3507 indexer = [indexer]
File ~/env/lib/python3.8/site-packages/pandas/core/indexes/base.py:3623, in Index.get_loc(self, key, method, tolerance)
3621 return self._engine.get_loc(casted_key)
3622 except KeyError as err:
-> 3623 raise KeyError(key) from err
3624 except TypeError:
3625 # If we have a listlike key, _check_indexing_error will raise
3626 # InvalidIndexError. Otherwise we fall through and re-raise
3627 # the TypeError.
3628 self._check_indexing_error(key)
KeyError: 0
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|