Source code for discrimintools.summary._summarygfalda
# -*- coding: utf-8 -*-
from pandas import concat
#intern function
from ._eval_predict import eval_predict
[docs]
def summaryGFALDA(
obj,digits=4,detailed=False,to_markdown=False,tablefmt="github",**kwargs
):
"""
Printing summaries of General Factor Analysis Linear Discriminant Analysis model.
Parameters
----------
obj : `class <https://docs.python.org/3/tutorial/classes.html>`_
an object of class :class:`~discrimintools.GFALDA`.
digits : `int <https://docs.python.org/3/library/functions.html#int>`_, default = 4
The number of decimal printed.
detailed : `bool <https://docs.python.org/3/library/functions.html#bool>`_, default = `False <https://docs.python.org/3/library/constants.html#False>`_
To print detailed summaries.
to_markdown: `bool <https://docs.python.org/3/library/functions.html#bool>`_, default = `False <https://docs.python.org/3/library/constants.html#False>`_
To print summaries in `markdown <https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_markdown.html>`_-friendly format. Requires the `tabulate <https://pypi.org/project/tabulate/>`_. package.
tablefmt : `str <https://docs.python.org/3/library/functions.html#func-str>`_, default = "github"
The table format.
**kwargs :
additionals parameters. These parameters will be passed to `tabulate <https://pypi.org/project/tabulate/>`_.
Returns
-------
NoneType
See also
--------
:class:`~discrimintools.summaryCANDISC`
Printing summaries of Canonical Discriminant Analysis model.
:class:`~discrimintools.summaryCPLS`
Printing summaries of Partial Least Squares for Classification model.
:class:`~discrimintools.summaryDA`
Printing summaries of Discriminant Analysis model.
:class:`~discrimintools.summaryDiCA`
Printing summaries of Discriminant Correspondence Analysis model.
:class:`~discrimintools.summaryDISCRIM`
Printing summaries of Discriminant Analysis (linear and quadratic) model.
:class:`~discrimintools.summaryMDA`
Printing summaries of Mixed Discriminant Analysis model.
:class:`~discrimintools.summaryPLSDA`
Printing summaries of Partial Least Squares Discriminant Analysis model.
:class:`~discrimintools.summaryPLSLDA`
Printing summaries of Partial Least Squares Linear Discriminant Analysis model.
:class:`~discrimintools.summarySTEPDISC`
Printing summaries of Stepwise Discriminant Analysis model.
Examples
--------
>>> from discrimintools.datasets import load_alcools, load_vote, load_heart
>>> from discrimintools import GFALDA, summaryGFALDA
The :class:`~discrimintools.GFALDA` class performs principal component analysis - discriminant analysis (PCADA)...
>>> #PCA + LDA = PCADA
>>> D = load_alcools("train")
>>> y, X = D["TYPE"], D.drop(columns=["TYPE"])
>>> clf = GFALDA()
>>> clf.fit(X,y)
GFALDA()
>>> summaryGFALDA(clf)
General Factor Analysis Linear Discriminant Analysis - Results
Class Level Information:
Frequency Proportion Prior Probability
KIRSCH 17 0.3269 0.3269
MIRAB 15 0.2885 0.2885
POIRE 20 0.3846 0.3846
Importance of components:
Eigenvalue Difference Proportion (%) Cumulative (%)
Can1 2.7988 1.0799 34.9848 34.9848
Can2 1.7188 0.3154 21.4856 56.4703
Raw Canonical Coefficients:
Can1 Can2
Constant -3.9272 -2.1923
MEOH 0.0014 0.0001
ACET 0.0005 0.0029
BU1 0.0418 -0.0025
BU2 -0.0005 0.0107
ISOP 0.0096 0.0002
MEPR 0.0264 0.0048
PRO1 -0.0003 0.0010
ACAL 0.0230 0.0432
Projection functions coefficients:
Can1 Can2
MEOH 0.0651 0.0057
ACET 0.0076 0.0434
BU1 0.0570 -0.0034
BU2 -0.0037 0.0721
ISOP 0.0575 0.0012
MEPR 0.0604 0.0110
PRO1 -0.0244 0.0807
ACAL 0.0230 0.0431
discriminant analysis on qualitative variables (`DISQUAL <https://lemakistatheux.wordpress.com/2016/12/07/lalgorithme-disqual/>`_)...
>>> #MCA + LDA = DISQUAL
>>> D = load_vote("train")
>>> y, X = D["group"], D.drop(columns=["group"])
>>> clf = GFALDA(n_components=5)
>>> clf.fit(X,y)
GFALDA(n_components=5)
>>> summaryGFALDA(clf)
General Factor Analysis Linear Discriminant Analysis - Results
Class Level Information:
Frequency Proportion Prior Probability
democrat 154 0.6553 0.6553
republican 81 0.3447 0.3447
Importance of components:
Eigenvalue Difference Proportion (%) Cumulative (%)
Can1 0.4912 0.2018 24.5584 24.5584
Can2 0.2893 0.1926 14.4672 39.0255
Can3 0.0968 0.0023 4.8380 43.8635
Can4 0.0945 0.0095 4.7226 48.5861
Can5 0.0850 0.0065 4.2499 52.8360
Raw Canonical Coefficients:
Can1 Can2 Can3 Can4 Can5
Constant -3.6423 -71.5330 -0.5466 -0.3136 -8.7288
handicapped_infants_n 1.4104 -0.0444 -1.3628 -1.3368 -0.9953
handicapped_infants_other -7.7080 112.3077 228.0942 -137.3374 118.7663
handicapped_infants_y -1.8593 -0.5920 0.5157 2.6020 0.6542
water_project_cost_sharin_n -0.3863 -0.8587 -3.4385 -3.4936 0.8114
...
duty_free_exports_other 6.4025 76.2179 -70.0049 -26.0326 -51.8400
duty_free_exports_y -2.6233 -0.4362 -0.3366 -0.4600 -0.1570
export_administration_act_n 14.1955 -2.4783 9.4113 10.6011 -8.8429
export_administration_act_other -2.4658 3.0700 -2.1882 6.4082 2.9454
export_administration_act_y -0.1613 -0.4680 -0.0029 -1.6712 -0.1645
Projection functions coefficients:
Can1 Can2 Can3 Can4 Can5
handicapped_infants_n 0.0458 -0.0014 -0.0442 -0.0434 -0.0323
handicapped_infants_other -0.0164 0.2390 0.4853 -0.2922 0.2527
handicapped_infants_y -0.0519 -0.0165 0.0144 0.0727 0.0183
water_project_cost_sharin_n -0.0106 -0.0235 -0.0942 -0.0957 0.0222
water_project_cost_sharin_other -0.0006 0.1209 0.1482 -0.1715 0.0665
...
duty_free_exports_other 0.0204 0.2432 -0.2234 -0.0831 -0.1654
duty_free_exports_y -0.0712 -0.0118 -0.0091 -0.0125 -0.0043
export_administration_act_n 0.1133 -0.0198 0.0751 0.0846 -0.0706
export_administration_act_other -0.0407 0.0506 -0.0361 0.1057 0.0486
export_administration_act_y -0.0061 -0.0178 -0.0001 -0.0636 -0.0063
and discriminant analysis on mixed predictors (DISMIX).
>>> #FAMD + LDA = DISMIX
>>> D = load_heart("subset")
>>> y, X = D["disease"], D.drop(columns=["disease"])
>>> clf = GFALDA(n_components=5)
>>> clf.fit(X,y)
GFALDA(n_components=5)
>>> summaryGFALDA(clf)
General Factor Analysis Linear Discriminant Analysis - Results
Class Level Information:
Frequency Proportion Prior Probability
negative 117 0.5598 0.5598
positive 92 0.4402 0.4402
Importance of components:
Eigenvalue Difference Proportion (%) Cumulative (%)
Can1 2.3749 1.2131 23.7495 23.7495
Can2 1.1618 0.0978 11.6184 35.3678
Can3 1.0641 0.0398 10.6408 46.0086
Can4 1.0243 0.0441 10.2431 56.2517
Can5 0.9802 0.0131 9.8024 66.0541
Raw Canonical Coefficients:
Can1 Can2 Can3 Can4 Can5
Constant -1.8294 -4.1264 -2.2226 -3.4631 -3.2657
age 0.0518 0.0394 -0.0015 0.0005 0.0217
restbpress 0.0170 0.0138 0.0133 0.0246 0.0163
max_hrate -0.0213 0.0028 0.0038 0.0011 0.0003
asympt 0.4341 -0.3523 -0.1561 -0.3150 -0.2125
...
left_vent_hyper -0.5277 3.1395 -2.1900 0.6887 -3.1521
normal -0.0688 -0.0481 -0.0640 -0.2254 0.0214
st_t_wave_abnormality 0.4870 -0.2444 0.7363 1.1923 0.4011
no -0.3450 0.1151 0.0791 0.0815 0.1269
yes 0.6565 -0.2189 -0.1505 -0.1550 -0.2415
Projection functions coefficients:
Can1 Can2 Can3 Can4 Can5
age 0.1389 0.1054 -0.0040 0.0012 0.0581
restbpress 0.0983 0.0803 0.0771 0.1428 0.0944
max_hrate -0.1687 0.0224 0.0298 0.0086 0.0028
asympt 0.1672 -0.0949 -0.0403 -0.0797 -0.0526
atyp_angina -0.1671 -0.0151 0.1161 0.2078 -0.1317
...
left_vent_hyper -0.2033 0.8460 -0.5648 0.1743 -0.7802
normal -0.0265 -0.0130 -0.0165 -0.0570 0.0053
st_t_wave_abnormality 0.1876 -0.0659 0.1899 0.3017 0.0993
no -0.1329 0.0310 0.0204 0.0206 0.0314
yes 0.2529 -0.0590 -0.0388 -0.0392 -0.0598
"""
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#check if self is an object of class GFALDA
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
if obj.model_ != "gfalda":
raise ValueError("'self' must be an object of class GFALDA")
print(" General Factor Analysis Linear Discriminant Analysis - Results ")
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#class level information
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
print("\nClass Level Information:")
class_infos = obj.classes_.infos.round(decimals=digits)
if to_markdown:
class_infos = class_infos.to_markdown(tablefmt=tablefmt,**kwargs)
print(class_infos)
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#add eigenvalues informations
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
print("\nImportance of components:")
eig = obj.pipe_["gfa"].eig_.iloc[:obj.call_.n_components,:].round(decimals=digits)
if to_markdown:
eig = eig.to_markdown(tablefmt=tablefmt,**kwargs)
print(eig)
print("\nRaw Canonical Coefficients:")
can_coef_raw = obj.cancoef_.raw.round(decimals=digits)
if to_markdown:
can_coef_raw = can_coef_raw.to_markdown(tablefmt=tablefmt,**kwargs)
print(can_coef_raw)
print("\nProjection functions coefficients:")
proj_coef = obj.cancoef_.projection.round(decimals=digits)
if to_markdown:
proj_coef = proj_coef.to_markdown(tablefmt=tablefmt,**kwargs)
print(proj_coef)
if detailed:
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#manova summary
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
print("\nMultivariate Analysis of Variance (MANOVA) Summary:")
manova = obj.pipe_["lda"].statistics_.performance.round(decimals=digits)
if to_markdown:
manova = manova.to_markdown(tablefmt=tablefmt,**kwargs)
print(manova)
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#classification functions coefficients
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
print("\nLDA Classification functions & Statistical Evaluation:")
class_eval = concat((obj.pipe_["lda"].coef_,obj.pipe_["lda"].vip_.vip),axis=1).round(decimals=digits)
if to_markdown:
class_eval = class_eval.to_markdown(tablefmt=tablefmt,**kwargs)
print(class_eval)
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#classification summary for calibration data
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
eval_predict(obj,digits,to_markdown,tablefmt,**kwargs)