#!/usr/bin/env python3
"``naginterface.library.correg.lars`` Python Example."
# NAG Copyright 2017-2019.
# pylint: disable=invalid-name,too-many-locals
from math import floor
import numpy as np
from naginterfaces.library import correg
[docs]def main():
"""
Example for :func:`naginterfaces.library.correg.lars`.
Least angle regression.
>>> main()
naginterfaces.library.correg.lars Python Example Results.
Least angle regression.
Step Parameter Estimate
-----------------------------------------------------------------
1 0.000 0.000 3.125 0.000 0.000 0.000
2 0.000 0.000 3.792 0.000 0.000 -0.713
3 -0.446 0.000 3.998 0.000 0.000 -1.151
4 -0.628 -0.295 4.098 0.000 0.000 -1.466
5 -1.060 -1.056 4.110 -0.864 0.000 -1.948
6 -1.073 -1.132 4.118 -0.935 -0.059 -1.981
-----------------------------------------------------------------
alpha: -50.037
-----------------------------------------------------------------
Step Sum RSS df Cp Ck Step Size
-----------------------------------------------------------------
1 72.446 8929.855 2 13.355 123.227 72.446
2 103.385 6404.701 3 7.054 50.781 24.841
3 126.243 5258.247 4 5.286 30.836 16.225
4 145.277 4657.051 5 5.309 19.319 11.587
5 198.223 3959.401 6 5.016 12.266 24.520
6 203.529 3954.571 7 7.000 0.910 2.198
-----------------------------------------------------------------
sigma^2: 304.198
"""
print('naginterfaces.library.correg.lars Python Example Results.')
print('Least angle regression.')
# The data:
d = np.array([
[10.28, 1.77, 9.69, 15.58, 8.23, 10.44],
[9.08, 8.99, 11.53, 6.57, 15.89, 12.58],
[17.98, 13.10, 1.04, 10.45, 10.12, 16.68],
[14.82, 13.79, 12.23, 7.00, 8.14, 7.79],
[17.53, 9.41, 6.24, 3.75, 13.12, 17.08],
[7.78, 10.38, 9.83, 2.58, 10.13, 4.25],
[11.95, 21.71, 8.83, 11.00, 12.59, 10.52],
[14.60, 10.09, -2.70, 9.89, 14.67, 6.49],
[3.63, 9.07, 12.59, 14.09, 9.06, 8.19],
[6.35, 9.79, 9.40, 12.79, 8.38, 16.79],
[4.66, 3.55, 16.82, 13.83, 21.39, 13.88],
[8.32, 14.04, 17.17, 7.93, 7.39, -1.09],
[10.86, 13.68, 5.75, 10.44, 10.36, 10.06],
[4.76, 4.92, 17.83, 2.90, 7.58, 11.97],
[5.05, 10.41, 9.89, 9.04, 7.90, 13.12],
[5.41, 9.32, 5.27, 15.53, 5.06, 19.84],
[9.77, 2.37, 9.54, 20.23, 9.33, 8.82],
[14.28, 4.34, 14.23, 14.95, 18.16, 11.03],
[10.17, 6.80, 3.17, 8.57, 16.07, 15.93],
[5.39, 2.67, 6.37, 13.56, 10.68, 7.35],
])
# The model type:
mtype = 1
# The dependent observations:
y = [
-46.47, -35.80, -129.22, -42.44, -73.51, -26.61,
-63.90, -76.73, -32.64, -83.29, -16.31, -5.82,
-47.75, 18.38, -54.71, -55.62, -45.28, -22.76,
-104.32, -55.94,
]
ip, nstep, b, fitsum = correg.lars(
mtype, d, y, mnstep=6,
)
sep_len = 5 + ip*10
print('Step' + ' '*15 + 'Parameter Estimate')
print('-'*sep_len)
for k in range(nstep):
print(
' ' + str(k+1) + ' ' +
' '.join('{:6.3f}'.format(bi) for bi in b[:ip, k])
)
print('-'*sep_len)
print('alpha: {:.3f}'.format(fitsum[0, nstep]))
print('-'*sep_len)
print('Step Sum RSS df Cp Ck Step Size')
print('-'*sep_len)
for k in range(nstep):
print(
'{:3d} {:9.3f} {:9.3f} {:6.0f} {:9.3f} {:9.3f} {:9.3f}'.format(
k+1, fitsum[0, k], fitsum[1, k],
floor(fitsum[2, k] + 0.5),
fitsum[3, k], fitsum[4, k], fitsum[5, k]
)
)
print('-'*sep_len)
print('sigma^2: {:9.3f}'.format(fitsum[4, nstep]))
if __name__ == '__main__':
import doctest
import sys
sys.exit(
doctest.testmod(
None, verbose=True, report=False,
optionflags=doctest.REPORT_NDIFF,
).failed
)