#!/usr/bin/env python3
"``naginterface.library.correg.pls`` Python Example."
# NAG Copyright 2017-2019.
# pylint: disable=invalid-name,too-many-locals
from naginterfaces.library import correg
[docs]def main():
"""
Example for :func:`naginterfaces.library.correg.pls`.
Partial least squares (PLS) regression using singular value decomposition,
parameter estimates, predictions.
>>> main()
naginterfaces.library.correg.pls Python Example Results.
PLS regression using SVD; param. estimates; predictions.
Begin regression.
Begin estimation.
Begin prediction.
Predictions:
[
0.2133
0.5153
0.1438
0.4460
0.1716
2.4808
0.0963
1.4476
-0.1546
-0.5492
0.5393
0.2685
-1.1333
1.7974
0.4972
]
"""
print('naginterfaces.library.correg.pls Python Example Results.')
print('PLS regression using SVD; param. estimates; predictions.')
print('Begin regression.')
# The predictor and response observations:
x, y = get_data()
# The inclusion array:
isx = [1]*len(x[0])
ip = isx.count(1)
# The scaling mode:
iscale = 1
# Scalings, not required:
xstd = [0.]*ip
ystd = [0.]*len(y[0])
# The number of latent variables to calculate:
maxfac = 4
svd = correg.pls_svd(
x, isx, y, iscale, xstd, ystd, maxfac,
)
print('Begin estimation.')
# Number of factors to include:
nfact = 2
# Singular-value threshold:
rcond = -1.
# Calculation mode:
orig = 1
# Mean values of the variables:
xbar = [
-2.6137, -2.3614, -1.0449, 2.8614, 0.3156,
-0.2641, -0.3146, -1.1221, 0.2401, 0.4694,
-1.9619, 0.1691, 2.5664, 1.3741, -2.7821,
]
ybar = [0.4520]
# Variable Influence Projection mode:
vipopt = 1
fit = correg.pls_fit(
nfact, svd.p, svd.c, svd.w, rcond, orig, xbar, ybar, iscale,
svd.xstd, svd.ystd, vipopt, svd.ycv[:nfact, :],
)
print('Begin prediction.')
# Estimate mode:
orig = -1
yhat = correg.pls_pred(
orig, xbar, ybar, iscale, svd.xstd, svd.ystd, fit.b, isx, x,
)
print('Predictions:')
print('[')
for i in range(yhat.shape[0]):
print(
' ' +
', '.join(
['{:6.4f}']*yhat.shape[1]
).format(*yhat[i, :])
)
print(']')
def get_data():
"""
The predictor and response observations.
"""
x = [
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, 1.9607, -1.6324, 0.5746, 1.9607,
-1.6324, 0.5740, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, 1.9607, -1.6324, 0.5746, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, 0.0744, -1.7333, 0.0902, 1.9607,
-1.6324, 0.5746, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, 0.0744, -1.7333, 0.0902, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 2.8369, 1.4092,
-3.1398, 0.0744, -1.7333, 0.0902, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, -4.7548, 3.6521, 0.8524, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, 0.0744, -1.7333, 0.0902, 0.0744,
-1.7333, 0.0902, -1.2201, 0.8829, 2.2253,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, 2.4064, 1.7438, 1.1057, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 0.0744, -1.7333,
0.0902, 0.0744, -1.7333, 0.0902, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
2.2261, -5.3648, 0.3049, 3.0777, 0.3891,
-0.0701, 0.0744, -1.7333, 0.0902, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-4.1921, -1.0285, -0.9801, 3.0777, 0.3891,
-0.0701, 0.0744, -1.7333, 0.0902, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-4.9217, 1.2977, 0.4473, 3.0777, 0.3891,
-0.0701, 0.0744, -1.7333, 0.0902, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, 2.2261, -5.3648, 0.3049, 2.2261,
-5.3648, 0.3049, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, -4.9217, 1.2977, 0.4473, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
[
-2.6931, -2.5271, -1.2871, 3.0777, 0.3891,
-0.0701, -4.1921, -1.0285, -0.9801, 0.0744,
-1.7333, 0.0902, 2.8369, 1.4092, -3.1398,
],
]
y = [
[0.00],
[0.28],
[0.20],
[0.51],
[0.11],
[2.73],
[0.18],
[1.53],
[-0.10],
[-0.52],
[0.40],
[0.30],
[-1.00],
[1.57],
[0.59],
]
return x, y
if __name__ == '__main__':
import doctest
import sys
sys.exit(
doctest.testmod(
None, verbose=True, report=False,
optionflags=doctest.REPORT_NDIFF,
).failed
)