Source code for discrimintools.summary._summarycandisc
# -*- coding: utf-8 -*-
from pandas import concat
#intern function
from ._eval_predict import eval_predict
[docs]
def summaryCANDISC(
obj,digits=4,detailed=False,to_markdown=False,tablefmt="github",**kwargs
):
"""
Printing summaries of Canonical Discriminant Analysis model.
Parameters
----------
obj : `class <https://docs.python.org/3/tutorial/classes.html>`_
An object of class :class:`~discrimintools.CANDISC`.
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.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.summaryGFALDA`
Printing summaries of General Factor Analysis Linear Discriminant Analysis 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_wine
>>> from discrimintools import CANDISC, summaryCANDISC
>>> D = load_wine() # load training data
>>> y, X = D["Quality"], D.drop(columns=["Quality"]) # split into X and y
>>> clf = CANDISC()
>>> clf.fit(X,y)
CANDISC()
>>> summaryCANDISC(clf)
Canonical Discriminant Analysis - Results
Summary Information:
infos Value DF DF value
0 Total Sample Size 34 DF Total 33
1 Variables 4 DF Within Classes 31
2 Classes 3 DF Between Classes 2
Class Level Information:
Frequency Proportion Prior Probability
Mediocre 12 0.3529 0.3529
Moyen 11 0.3235 0.3235
Bon 11 0.3235 0.3235
Total-Sample Class Means:
Mediocre Moyen Bon
Temperature 3037.3333 3140.9091 3306.3636
Soleil 1126.4167 1262.9091 1363.6364
Chaleur 12.0833 16.4545 28.5455
Pluie 430.3333 339.6364 305.0000
Importance of components:
Eigenvalue Difference Proportion Cumulative
Can1 3.2789 3.1403 95.9451 95.9451
Can2 0.1386 NaN 4.0549 100.0000
Raw Canonical and Classification Functions Coefficients:
Can1 Can2 Mediocre Moyen Bon
Constant -32.8763 2.1653 65.6093 -7.1918 -72.5905
Temperature 0.0086 -0.0000 -0.0178 0.0013 0.0182
Soleil 0.0068 -0.0053 -0.0153 0.0037 0.0129
Chaleur -0.0271 0.1276 0.0845 -0.0694 -0.0227
Pluie -0.0059 0.0062 0.0136 -0.0040 -0.0108
"""
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#check if self is an object of class CANDISC
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
if obj.model_ != "candisc":
raise ValueError("'self' must be an object of class CANDISC")
print(" Canonical Discriminant Analysis - Results ")
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#summary information
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
print("\nSummary Information:")
summary = obj.summary_.infos
if to_markdown:
summary = summary.to_markdown(tablefmt=tablefmt,**kwargs)
print(summary)
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#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)
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#Class Means
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
print("\nTotal-Sample Class Means:")
wcenter = obj.classes_.center.T.round(decimals=digits)
if to_markdown:
wcenter = wcenter.to_markdown(tablefmt=tablefmt,**kwargs)
print(wcenter)
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#add eigenvalues informations
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
print("\nImportance of components:")
eig = obj.eig_.iloc[:obj.call_.n_components,:].round(decimals=digits)
if to_markdown:
eig = eig.to_markdown(tablefmt=tablefmt,**kwargs)
print(eig)
print("\nRaw Canonical and Classification Functions Coefficients:")
coef = concat((obj.cancoef_.raw,obj.coef_),axis=1).round(decimals=digits)
if to_markdown:
coef = coef.to_markdown(tablefmt=tablefmt,**kwargs)
print(coef)
if detailed:
print("\nTest of H0: The canonical correlations in the current row and all that follow are zero")
cancorr = obj.cancorr_.round(decimals=digits)
if to_markdown:
cancorr = cancorr.to_markdown(tablefmt=tablefmt,**kwargs)
print(cancorr)
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#classification summary for calibration data
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
eval_predict(obj,digits,to_markdown,tablefmt,**kwargs)