Source code for discrimintools.summary._summarydiscrim
# -*- coding: utf-8 -*-
#intern function
from ._eval_predict import eval_predict
[docs]
def summaryDISCRIM(
obj,digits=4,detailed=False,to_markdown=False,tablefmt="github",**kwargs
):
"""
Printing summaries of Discriminant Analysis (linear and quadratic) model.
Parameters
----------
obj : `class <https://docs.python.org/3/tutorial/classes.html>`_
an object of class :class:`~discrimintools.DISCRIM`.
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.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_alcools
>>> from discrimintools import DISCRIM, summaryDISCRIM
>>> D = load_alcools()
>>> y, X = D["TYPE"], D.drop(columns=["TYPE"])
>>> clf = DISCRIM()
>>> clf.fit(X,y)
DISCRIM(priors='prop')
>>> summaryDISCRIM(clf)
Discriminant Analysis - Results
Summary Information:
Infos Value DF DF value
0 Total Sample Size 52 DF Total 51
1 Variables 8 DF Within Classes 49
2 Classes 3 DF Between Classes 2
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
Linear Discriminant Function for TYPE:
KIRSCH MIRAB POIRE
Constant -5.0165 -18.8407 -24.7649
MEOH 0.0034 0.0290 0.0334
ACET 0.0064 0.0164 0.0075
BU1 -0.0637 0.4054 0.3180
BU2 -0.0009 0.0714 0.1150
ISOP 0.0231 0.0298 -0.0085
MEPR 0.0375 -0.1289 0.0618
PRO1 0.0020 -0.0054 -0.0083
ACAL 0.0662 -0.2264 -0.1303
"""
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#check if obj is an object of class DISCRIM
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
if obj.model_ != "discrim":
raise ValueError("'obj' must be an object of class DISCRIM")
print(" 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)
if detailed:
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#covariance matrix information
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
if obj.method == "linear":
print("\nPooled Covariance Matrix Information:")
cov_mat = obj.cov_.infos.loc["Pooled",:].to_frame().T.round(decimals=digits)
else:
print("\nWithin Covariance Matrix Information:")
cov_mat = obj.cov_.infos.round(decimals=digits)
cov_mat["Rank"] = cov_mat["Rank"].astype(int)
if to_markdown:
cov_mat = cov_mat.to_markdown(tablefmt=tablefmt,**kwargs)
print(cov_mat)
if obj.method == "quad":
print("\nTest of Homogeneity of Within Covariance Matrices:")
equal_cov = obj.cov_.test.round(decimals=digits)
if to_markdown:
equal_cov = equal_cov.to_markdown(tablefmt=tablefmt,**kwargs)
print(equal_cov)
#chi-square pvalue
p_value, tol = obj.cov_.test.iloc[0,6], obj.call_.tol
if p_value > tol:
print(f"\nSince the Chi-Square value is not significant at the {tol} level, a pooled covariance matrix has been used in the discriminant function.\nReference: Morrison, D.F. (1976) Multivariate Statistical Methods p252.")
elif p_value <= tol:
print(f"\nSince the Chi-Square value is significant at the {tol} level, the within covariance matrices has been used in the discriminant function.\nReference: Morrison, D.F. (1976) Multivariate Statistical Methods p252.")
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#linear discriminant function
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
p_value, tol = obj.cov_.test.iloc[0,6], obj.call_.tol
if (obj.method == "linear") or (obj.method == "quad" and p_value > tol):
print("\nLinear Discriminant Function for {}:".format(obj.call_.target))
coef = obj.coef_.round(decimals=digits)
if to_markdown:
coef = coef.to_markdown(tablefmt=tablefmt,**kwargs)
print(coef)
if detailed:
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
#classification summary for calibration data
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
eval_predict(obj,digits,to_markdown,tablefmt,**kwargs)