neurostatx.utils.factor
Classes
| Name | Description |
|---|---|
MethodTypes | Factor extraction methods for exploratory factor analysis. |
RotationTypes | Factor rotation methods for exploratory factor analysis. |
Functions
| Name | Description |
|---|---|
cfa | Fit a confirmatory factor analysis model with semopy. |
efa | Fit an exploratory factor analysis with factor_analyzer. |
horn_parallel_analysis | Estimate the number of factors and components with Horn's method. |
MethodTypesclass#
class MethodTypes(StrEnum, Enum)Bases: StrEnum, Enum
Factor extraction methods for exploratory factor analysis.
RotationTypesclass#
class RotationTypes(StrEnum, Enum)Bases: StrEnum, Enum
Factor rotation methods for exploratory factor analysis.
equamaxattributeclass attributeinstance attribute#
equamax = 'equamax'oblimaxattributeclass attributeinstance attribute#
oblimax = 'oblimax'obliminattributeclass attributeinstance attribute#
oblimin = 'oblimin'promaxattributeclass attributeinstance attribute#
promax = 'promax'quartimaxattributeclass attributeinstance attribute#
quartimax = 'quartimax'quartiminattributeclass attributeinstance attribute#
quartimin = 'quartimin'varimaxattributeclass attributeinstance attribute#
varimax = 'varimax'cfafunction#
def cfa(df, model)Fit a confirmatory factor analysis model with semopy.
Parameters
| Name | Type | Description |
|---|---|---|
df | pd.DataFrame | Observed indicators included in the CFA. |
model | str | semopy model specification. |
Returns
fittedsemopy.Model- Fitted CFA model.
scorespd.DataFrame- Predicted factor scores.
statspd.DataFrame- Parameter estimates from
inspect.
Examples
>>> import pandas as pd>>> import numpy as np>>> from neurostatx.utils.factor import cfa>>> rng = np.random.RandomState(0)>>> f = rng.randn(40)>>> df = pd.DataFrame({"x1": f + 0.1 * rng.randn(40),... "x2": f + 0.1 * rng.randn(40),... "x3": f + 0.1 * rng.randn(40)})>>> fitted, scores, stats = cfa(df, "F =~ x1 + x2 + x3")>>> "F" in scores.columnsTrueefafunction#
def efa(df, method, rotation, nfactors=1)Fit an exploratory factor analysis with factor_analyzer.
Parameters
Returns
modelFactorAnalyzer- Fitted factor analyzer.
evnp.array- Original eigenvalues.
vnp.array- Common-factor eigenvalues.
scoresnp.array- Factor scores.
loadingsnp.array- Factor loadings.
communalitiesnp.array- Communalities.
Examples
>>> import pandas as pd>>> import numpy as np>>> from neurostatx.utils.factor import efa>>> rng = np.random.RandomState(0)>>> df = pd.DataFrame(rng.rand(40, 4), columns=list("abcd"))>>> model, ev, v, scores, loadings, communalities = efa(... df, method="minres", rotation="varimax", nfactors=1... )>>> scores.shape[0]40horn_parallel_analysisfunction#
def horn_parallel_analysis(x, output_folder, method='minres', rotation=None, nfactors=1, niter=20)Estimate the number of factors and components with Horn’s method.
Compares observed eigenvalues to those from random data, following
psych’s fa.parallel.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
x | np.array | required | Variables to include in the analysis. |
output_folder | str | required | Directory where horns_parallel_screeplot.png is written. |
method | str | 'minres' | Extraction method: "minres", "ml", or "principal".
Defaults to "minres". |
rotation | str | None | Rotation applied when fitting. Defaults to None. |
nfactors | int | 1 | Number of factors extracted while computing eigenvalues. Defaults to 1. |
niter | int | 20 | Number of random-data iterations. Defaults to 20. |
Examples
>>> import numpy as np>>> from neurostatx.utils.factor import horn_parallel_analysis>>> rng = np.random.RandomState(0)>>> x = rng.rand(40, 5)>>> suggfactors, suggcomponents = horn_parallel_analysis(... x, output_folder=".", niter=2... )