import numpy as np
import pandas as pd
import os
from spotoptim.factor_analyzer import (ConfirmatoryFactorAnalyzer,
ModelSpecificationParser)
from spotoptim.utils import get_internal_datasets_folder
X = pd.read_csv(os.path.join(get_internal_datasets_folder(), 'test11.csv'))
model_dict = {"F1": ["V1", "V2", "V3", "V4"],
"F2": ["V5", "V6", "V7", "V8"]}
model_spec = ModelSpecificationParser.parse_model_specification_from_dict(X, model_dict)
cfa = ConfirmatoryFactorAnalyzer(model_spec, disp=False)
cfa = cfa.fit(X.values)
print(np.round(cfa.get_model_implied_cov(), 2))
# array([[2.08, 0.46, 0.35, 0.58, 0.17, 0.13, 0.06, 0.09],
# [0.46, 1.17, 0.16, 0.27, 0.08, 0.06, 0.03, 0.04],
# [0.35, 0.16, 1.07, 0.2 , 0.06, 0.04, 0.02, 0.03],
# [0.58, 0.27, 0.2 , 1.29, 0.1 , 0.07, 0.04, 0.05],
# [0.17, 0.08, 0.06, 0.1 , 2.04, 0.72, 0.37, 0.49],
# [0.13, 0.06, 0.04, 0.07, 0.72, 1.48, 0.28, 0.37],
# [0.06, 0.03, 0.02, 0.04, 0.37, 0.28, 1.12, 0.19],
# [0.09, 0.04, 0.03, 0.05, 0.49, 0.37, 0.19, 1.29]])