import pymc3 as pm
import semopy
import stan
structural model
import numpy as np
import pandas as pd
import semopy
# https://semopy.com/tutorial.html
X = np.random.normal(size=(300, 3))
data = pd.DataFrame(X, columns=map(lambda i: 'X' + str(i), range(X.shape[1])))
data['y'] = 3*data['X0'] + 2*data['X1'] + 1*data['X2'] + np.random.normal(0, 5, size=300) # structural error model
# https://semopy.com/syntax.html
model = semopy.Model("""y ~ X0 + X1 + X2""") # structural equation
model.fit(data, obj=['MLW', 'ULS', 'GLS', 'FIML'][1])
print(model.inspect())
semopy.semplot(model, "pd.png")
measurement model
import numpy as np
import pandas as pd
import statsmodels.api as sm
import semopy
# https://semopy.com/tutorial.html
X = np.random.normal(size=(300, 3))
data = pd.DataFrame(X, columns=map(lambda i: 'X' + str(i), range(X.shape[1])))
# https://semopy.com/syntax.html
model = semopy.Model(
mimic_lavaan=False, baseline=False, cov_diag=False,
description="""
L0, L1 =~ X0 + X1 + X2
""") # measurement equation
model.fit(data, obj=['MLW', 'ULS', 'GLS', 'FIML'][1], clean_slate=True)
print(model.inspect())
display(semopy.semplot(model, "pd.png"))
result = sm.Factor(endog=data, n_factor=3, corr=None, method=['pa', 'ml'][0], smc=True, endog_names=None, nobs=None, missing='drop').fit()
result.rotate(method=['varimax', 'quartimax', 'biquartimax', 'equamax', 'oblimin', 'parsimax', 'parsimony', 'biquartimin', 'promax'][-1])
result.loadings
Confirmative Factor Analysis
import semopy
semopy.efa.explore_cfa_model
semopy.efa.explore_pine_model
Path Analysis
Hierarchical Structural Equation Modeling (H-SEM / ML-SEM)
Bayesian Hierarchical Structural Equation Modeling
Reference
- https://en.wikipedia.org/wiki/Structural_equation_modeling
- https://en.wikipedia.org/wiki/Path_analysis_(statistics)
'quantitative analysis > statistics' 카테고리의 다른 글
Elasticity, Equilibrium and Stability (0) | 2023.09.08 |
---|---|
Causal Discovery (0) | 2023.08.11 |
Survival Analysis (0) | 2023.07.06 |
Bayesian Estimation (0) | 2023.05.31 |
Panel Analysis (4) | 2023.05.20 |