Showing posts with label regression. Show all posts
Showing posts with label regression. Show all posts

Saturday, September 24, 2022

LSQ2: An update to LSQ (Casio fx-9750GIII, TI-84 Plus CE)

LSQ2:  An update to LSQ (Casio fx-9750GIII, TI-84 Plus CE)


Least Square Matrix and Correlation


The program LSQ2 fits the allows to fit data to a function with minimal error possible. 


Multiple Linear Regression:

f(x1, x2, x3, ...) = b0 + b1 * x1 + b2 * x2 + b3 * x3 + ....


Polynomial Regression:

f(x) = b0 + b1 * x + b2 * x^2 + b3 * x^3 + ...


General:

f(x) = b0 + b1 * g1(x) + b2 * g2(x) + b3 * g3(x) + ...


f(x1, x2, x3, ...) = b0 * g0(x1, x2, x3, ...) + b1 * g1(x1, x2, x3, ...) + ...


The Matrices X, Y, and B



X is your data matrix and is set up as columns:


[  g0(x),  g1(x),  g2(x), ... ]


Where the function g(x) represents functions applied to every data point x_i.  


Example 1:   f(x) = b0 + b1 * x 


The columns of the data matrix are set up as:

[ 1,  x ]


A column of ones set up solving for a constant.


Example 2:  f(x) = b0 + b1 * x + b2 * x^2


The columns of the data matrix are set up as:

[ 1, x, x^2 ]


Example 3:  f(x0, x1) = b0 + b1 * x1 + b2 * x2


The columns of the data matrix are set up as:

[ 1, x1, x2 ]  (note, not x squared in this case)



Y is the answer matrix, of size n rows and 1 column.  There are n data points. We are fitting the function to y_i.


B is the coefficient matrix, consisting of values b0, b1, b2, ....



Simply put, to find B using the least squares method given the data points:


B = (X^T X)^-1 X^T Y


X^T is the transpose matrix of X



How well does the function fit?  


We can predict y values by multiplying X by B.  


P' = X B 



Determining Coefficient of Correlation:


r^2 = SSreg ÷ SStot = [ B^T X^T Y - (O Y)^2 ÷ n ] ÷ [ Y^T Y - (O Y)^2 ÷ n ]

where O is a ones matrix [[ 1, 1, 1, 1, ... ]] of size 1 x n.  



Casio fx-9750GIII Program:  LSQ2


From the text file:  


'ProgramMode:RUN

ClrText

"2022_-_07_-_19 EWS"

"LEAST SQUARES"

"_Mat _X"?->Mat X

"_Mat _Y"?->Mat Y

Dim Mat Y->List 26

List 26[1]->N

(Trn Mat X*Mat X)^-1*Trn Mat X*Mat Y->Mat B

"_Mat _B:"Disps

Mat BDisps

{1,N}->Dim Mat O

Fill(1,Mat O)

Mat O*Mat Y->Mat S

Mat S*Mat S/N->Mat S

(Trn Mat B*Trn Mat X*Mat Y)-Mat S->Mat R

Mat R*(Trn Mat Y*Mat Y-Mat S)^-1->Mat R

"R_^<2>_:"Disps

Mat R



Listing:


ClrText

"2022-07-19 EWS"

"LEAST SQUARES"

"Mat X"? → Mat X

"Mat Y"? → Mat Y

Dim Mat Y → List 26

List 26[1] → N

(Trn Mat X × Mat X)^-1 × Trn Mat X × Mat Y → Mat B

"Mat B:" ⊿

Mat B ⊿

{1, N} → Dim Mat O

Fill(1, Mat O)

Mat O × Mat Y → Mat S

Mat S × Mat S ÷ N → Mat S

(Trn Mat B × Trn Mat X × Mat Y) - Mat S → Mat R

Mat R × (Trn Mat Y × Mat Y - Mat S)^-1 → Mat R

"R^2:" ⊿

Mat R


Matrices:

Mat X:  data matrix, X

Mat Y:  answer matrix, Y

Mat B: coefficient matrix, B

Mat O: ones matrix

Mat S:  used for calculation

Mat R:  correlation




TI-84 Plus CE Program:  LSQ2  (TI-Basic)



Listing:

"2022-07-19 EWS"
ClrHome
Disp "LEAST SQUARES"
Input "[X]? ", [J]
Input "[Y]? ", [I]
dim([I]) → L6
L6(1) → N
([J]^T [J])^-1 [J]^T [I] → [B]
Disp "[B]: "
Pause [B]
{1,N} → dim([H])
Fill(1,[H])
[H] [I] → [G]
[G] [G] * N^-1 → [G]
[B]^T [J]^T [I] - [G] → [A]
[A] * ([I]^T [I] - [G])^-1 → [A]
Disp "R^2: "
Disp [A]

List:
L6:  [ 2nd ] [ 6 ]

Matrices:
[J]:  data matrix, X
[I]:  answer matrix, Y
[B]: coefficient matrix, B
[H]: ones matrix
[G]:  used for calculation
[A]:  correlation


Examples

Example 1:

Equation: y = b0 + b1 * x1 + b2 * x2

X = [ [ 1, 1, 3 ] [ 1, 2, 4 ] [ 1, 5, 6 ] [ 1, 7, 3 ] [ 1, 7, 2 ] ]
Y = [ [ 0.86 ] [ 0.89 ] [ 0.95 ] [ 0.98 ] [ 0.96 ] ]

Coefficients:  [ [ b0 ] [ b1 ] [ b2 ] ]
B = [ [ 0.8257514451 ] [ 0.01836705202 ] [ 5.953757225E-3 ] ]

Correlation: [ [ 0.9875030926 ] ]

Example 2:

Equation: y = b0 + b1 * x + b2 * x^2

X = [ [ 1, 1, 1^2 ] [ 1, 2, 2^2 ] [ 1, 3, 3^2 ] [ 1, 4, 4^2 ] [ 1, 5, 5^2 ] [ 1, 6, 6^2 ] ]
Y = [ [ 1000 ] [ 1294 ] [ 1511 ] [ 1233 ] [ 1006 ] [ 879 ] ]

Coefficients:
B = [ [ 681.7 ] [ 435.2107143 ] [ -69.30357143 ] ]

Correlation: [ [ 0.8119609681 ] ]


Summary

Function to fit:   
f(x1, x2, x3 ... ) = b0 + b1 * g1(x1, x2, x3, ...) + b2 * g2(x1, x2, x3, ...) + ...

X = data matrix
Y = answer matrix, size n x 1
B = coefficient matrix

Determining the Coefficients:   B = (X^T X)^-1 X^T Y

Predicting Values:  P = X B

Determining Coefficient of Correlation:

r^2 = SSreg ÷ SStot = [ B^T X^T Y - (O Y)^2 ÷ n ] ÷ [ Y^T Y - (O Y)^2 ÷ n ]
where O is a ones matrix [[ 1, 1, 1, 1, ... ]] of size 1 x n.  

Source

Abdi, Hervè.  "Multiple Correlation Coefficient"  Program in Cognition and Neurosciences   https://personal.utdallas.edu/~herve/Abdi-MCC2007-pretty.pdf   Retrieved July 17, 2022.  


All original content copyright, © 2011-2022.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author. 

Saturday, August 27, 2022

Lists in Numworks - Version 19.2

Lists in Numworks - Version 19.2


Introduction


In Version 19,  lists were added as an object in the Numworks calculator.  We can define and name lists with any values that we want. Lists are designated by the brackets { }. 


*   The values can be real number, complex numbers, numbers with units, scientific constants, and combinations of those types.   What is not allowed in lists are strings and matrices.


*  The indexing of lists starts with 1.   We can call a list's elements by the parenthesis after the list name.  For example,  xlist(10) recalls the 10th element of the list xlist.


*  { f(k) }_k≤value generates a list of f(k) from k=1 to value, step 1.   The variable can be almost any variable you want, except e and i.  e is designated as the exponential constant (about 2.71828...) and i is designated as the imaginary number √-1.   The limits are strictly from 1 to value.


*  Once a user defined list is created, the individual values cannot be changed.   Furthermore, there are no augment or delete commands.  In this sense, user defined lists acts like tuples in Python.


*  Lists can be recalled in the Statistics and Regression apps.   The system named lists V#, X#, and Y# are updated accordingly.


* Defining a list of random values will always change the randomized values every time a user defined list is recalled.  


Please note that this is for Version 19.2.  


Screenshots are captured using the Numworks Emulator on July 10, 2022:  www.numworks.com/emulator
















Note:  Casio fx-991EX Week - September 5, 2022 to September 9, 2022 


Eddie


All original content copyright, © 2011-2022.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author. 



Sunday, March 13, 2022

Casio fx-CG 50: Parametric Regression

Casio fx-CG 50:  Parametric Regression


Introduction


The program PARFIT2 attempts to pair data (x,y) using a pair of parametric equations [ x(t), y(t) ].   Each list of data will have its own curve.   


x(t), 1 ≤ t ≤ n

y(t), 1 ≤ t ≤ n

n = number of data points


Each point is assigned at t-value, which the program does automatically:

t = 1 refers to (x1, y1) → (t1, x1), (t1, y1)

t = 2 refers to (x2, y2) → (t2, x2), (t2, y2)

t = 3 refers to (x3, y3) → (t3, x3), (t3, y3)

and so on.


The program offers four regression types:


1.  Linear:  a + b*t

2.  Logarithm:  a + b*ln t

3.  Exponential:  a * b^t

4.  Power:  a * t^b


Variables used:


A = intercept for x(t)

B = slope for x(t)

R = correlation for x(t)


C = intercept for y(t)

D = slope for y(t)

S = correlation for y(t)


This allows for greater curve fitting control, which can accounts for different growth of the x data and y data, separately.


The program ends with a graph of the calculated parametric equation.  


Casio fx-CG 50 Program: PARTFIT


ClrText

Locate 1,1,"PARAMETRIC"

Locate 1,2,"FIT - 2022"

Locate 1,3,"EWS"

For 1→I To 750: Next

ParamType

ClrText

"X DATA"?→List 1

"Y DATA"?→List 2

Seq(x,x,1,Dim List 1, 1)→List 3


Menu "X=","A+BT",1,"A+Bln T",2,"A×B^T",3,"A×T^B",4

Lbl 1

LinearReg(a+bx) List 3, List 1

a→A: b→B: r→R

"A+BT"→Xt1

Goto 5

Lbl 2

LogReg List 3, List 1

a→A: b→B: r→R

"A+B×ln T"→Xt1

Goto 5

Lbl 3

ExpReg(a∙b^x) List 3, List 1

a→A: b→B: r→R

"A+B^T"→Xt1

Goto 5

Lbl 4

PowerReg List 3, List 1

a→A: b→B: r→R

"A+T^B"→Xt1

Goto 5

Lbl 5

"A, B, CORR=" ◢

[ [ A ] [ B ] [ R ] ] ◢


Menu "Y=","C+DT",A,"C+Dln T",B,"C×D^T",C,"C×T^D",D

Lbl A

LinearReg(a+bx) List 2, List 1

a→C: b→D: r→S

"C+DT"→Yt1

Goto E

Lbl B

LogReg List 2, List 1

a→C: b→D: r→S

"C+D×ln T"→Yt1

Goto E

Lbl C

ExpReg(a∙b^x) List 3, List 1

a→C: b→D: r→S

"C+D^T"→Yt1

Goto E

Lbl D

PowerReg List 3, List 1

a→C: b→D: r→S

"C+T^D"→Yt1

Goto E

Lbl E

"C, D, CORR=" ◢

[ [ C ] [ D ] [ S ] ] ◢


DrawGraph

ZoomAuto


Download the program here:  https://drive.google.com/file/d/1UVEHNZ7WILv3rSAgXy0_5kQ1lBPGEvKc/view?usp=sharing


Examples


Example 1:

(x,y):

(100.0, 10.0)

(101.3, 20.0)

(103.0, 31.7)

(104.3, 42.9)

(105.6, 54.2)

(107.0, 65.6)

(110.0, 77.0)


Fit x to linear and y to exponential.


Results:  

x(t) = 98.17142857 + 1.571428571*t,  corr = 0.9904886791

y(t) = 9.829695698 * 1.308085656^t, corr = 0.9639002639





Example 2:

(x,y):

(5.0, 0.41)

(2.9, 0.30)

(1.7, 0.20)

(0.9, 0.18)

(0.1, 0.12)


Fit x to logarithmic, y to power.


Results:  

x(t) = 5.002357022 - 3.010299732 * ln t, corr = -0.9997066364

y(t) = 0.4487684406* t^-0.7312889362,  corr = -0.9684707132




Eddie


All original content copyright, © 2011-2022.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author. 


Sunday, August 22, 2021

Numworks: Statistics and Regression Tutorial

Numworks:  Statistics and Regression Tutorial


Introduction


Numworks has two modes for statistical calculations and plotting:  Statistics and Regression.   Each of the two modes can hold up to three sets of data, each having their own separate graph color (red for the 1st, blue for the 2nd, green for the 3rd).  


Each mode has its own separate data, stored independently.   As far as I know so far, none of the data points or results can be accessed in any other mode.


Navigation of the modes are controlled by the keypad.  To change screens, keep press the up key until the header is selected.  


Statistics


The Statistics mode deals with univariate data (one-variable).   Two plots are offered:


*  Histogram Plots.  The bin width and starting point can be changed by pressing [ OK ] to bring up the options dialogue box.  


*  Box Plots.  Data for each lists calculated are:  minimum, 1st quarter, median, 3rd quarter, maximum



Regression


The Regression mode deals with bivariate data (two-variable).  The data and it's scatterplot are automatically displayed on the Graph screen.  The Data screen shows the mean, variance, and sums, along with regression model.


To change the regression, go to the Graph screen, scroll down to the regression model:


Linear:  ax + b

Proportional:  ax

Quadratic:  ax^2+bx+c

Cubic:  ax^3+bx^2+cx+d

Quartic:  ax^4+bx^3+cx^2+dx+e

Logarithmic: a*ln x+b

Exponential:  a*e^(bx)

Power: a*x^b

Trigonometric:  a*sin(bx+c)+d

Logistic:  c/(1+a*e^(-bx))


This menu will also to predict x and y values.



I hope you find this helpful, and highlight some of the other features of Numworks (other than Python).


Eddie 



All original content copyright, © 2011-2021.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author. 


Saturday, September 19, 2020

Casio fx-9750GIII: Beta Curve Fit

 Casio fx-9750GIII:  Beta Curve Fit


The program BETAFIT will fit data to the curve

Y = A * x^B * (1-x)^C

Restrictions:  0 < x < 1 and y > 0


Derivation


General Equation:

Y = A * x^B * (1-x)^C


The equation can be transformed into a multilinear regression form by:

Y = A * x^B * (1-x)^C

ln Y = ln (A * x^B * (1-x)^C)

ln Y = ln A + ln (x^B) + ln (1-x)^C

ln Y = ln A + B * ln x + C * ln (1 - x)


y' = a' + b * x1 + c * x2

where:

y = ln Y

a = ln A,  A = e^a

x1 = ln x

x2 = ln(1 - x)


To find a Beta regression fit:

1.  Enter the x data.  Take two transformations:  ln x and ln(1 - x).   Recall 0 < x < 1.

2.  Enter the y data.  The the transformation ln y.  Recall y > 0.

3.  Execute multilinear regression: y' = a + b * x1 + c * x2.   See the notes above.  

4.  Solve for the coefficients:


A = e^A

B = b

C = c


Matrix Setup:


X a = y


X Columns:  [ 1, ln x, ln(1 - x) ]

y Columns: [ ln y ]


Casio fx-9750GIII Program:  BETAFIT

Size: 300 Bytes


"2020-08-30 EWS"

"X DATA"? → List 1

"Y DATA"? → List 2

List 1 → List 3

Fill(1, List 3)

ln List 1 → List 4

ln (1 - List 1) → List 5

ln List 2 → List 6

List→Mat(List 3, List 4, List 5) → Mat B

List→Mat(List 6)→Mat C

(Trn Mat B × Mat B)^-1 × Trn Mat B × Mat C → Mat A

e^Mat A[1,1] → A

Mat A[2, 1] → B

Mat A[3, 1] → C

ClrText 

Locate 1,3,"Y = A X^B (1-X)^C"

Locate 1,4,"A="

Locate 4,4,A

Locate 1,5,"B="

Locate 4,5,B

Locate 1,6,"C="

Locate 4,6,C


Examples


Graphs are not included in the program. 


Example 1:

Data:

(0.1, 0.74)

(0.3, 0.7681)

(0.5, 0.55)

(0.7, 0.2779)

(0.9, 0.053)


A = 2.199360522

B = 0.3998640121

C = 1.599725605



Example 2:

Data:

(0.1, 0.015)

(0.3, 0.228)

(0.5, 1.24)

(0.7, 6.75)

(0.9, 100.44)


A = 1.261477517

B = 2.015236182

C = -1.992644053


Source:

Kolb, William M.  Curve Fitting For Programmable Calculators IMTEC.  Bowie, MD 20716.  1982.  ISBN-10:  0-943494-00-01


Stay safe and sane everyone.  Happy Birthday Press Your Luck (no whammies) Blessings,

Eddie 

All original content copyright, © 2011-2020.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author. 


Thursday, September 12, 2019

HP 32SII and TI-66: Curve Fitting

HP 32SII and TI-66:  Curve Fitting

Introduction

The curve fitting program uses the linear regression module to determine the parameters b ("intercept") and m ("slope") in non-linear curves using following transformations:

Logarithmic Regression:  y = b + m * ln x
Transformations:  ( ln x, y, b, m )

Inverse Regression:  y = b + m / x
Transformations:  ( 1/x, y, b, m )

Exponential Regression:  y = b * e^(m * x)
Transformation:  ( x, ln y, e^b, m )

Power Regression:  y = b * x^m
Transformation:  ( ln x, ln y, e^b, m )

Geometric (Exponent) Regression:  y = b * m^x
Transformation:  ( x, ln y, e^b, e^m )

Simple Logistic Regression:  y = 1 / (b + m * e^(-x))
Transformation:  ( e^(-x), 1/y, b, m )

HP 32SII Program:  Curve Fitting

Note:
1.  This can be adapted into the HP 35S under one label.  Just take note of the where the label points are.
2.  The total amount of bytes used is 90.
3.  Flags 1 and 2 are used.  If flag 1 is set, e^m is calculated as slope.  If flag 2 is set, e^b is calculated as intercept.

Program:
// Initialize - LBL X
LBL X
CF 1
CF 2
CLÎŁ
0
RTN

// Calculation - LBL Y
LBL Y
b 
FS? 2
e^x
STO B
VIEW B
m
FS? 1
e^x
STO M
VIEW M
r 
STO R
VIEW R
RTN

// Logarithmic Regression - LBL L
LBL L
LN 
R/S
GTO L

// Inverse Regression - LBL I
LBL I
1/x
R/S
GTO I

// Exponential Regression - LBL E
LBL E
SF 2
x<>y
LN 
x<>y
R/S
GTO E

// Power Regression - LBL P
LBL P
SF 2
LN 
x<>y
LN 
x<>y
R/S
GTO P

// Geometric/Exponent Regression - LBL G
LBL G
SF 1
SF 2
x<>y
LN
x<>y
R/S 
GTO G

// Simple Logistic Regression - LBL S
LBL S
+/-
e^x
x<>y
1/x 
x<>y
STOP 
GTO S

Instructions:
1.  Clear the statistics data and flags by pressing [XEQ] X.
2.  Enter data points, run the proper label, and press [ ÎŁ+ ] or [ ÎŁ- ].

For example, for Logarithmic fit:
y_data [ENTER] x_data [XEQ] L [ ÎŁ+ ]

Subsequent Data:
y_data [ENTER] x_data [R/S] [ ÎŁ+ ]

This scheme allows for undoing data:
y_data [ENTER] x_data [XEQ] L [ ÎŁ- ]

3.  Calculate intercept (B), slope (M), and correlation (R), press [XEQ] Y.

TI-66 Program:  Curve Fitting

Notes:
1.  This program should be able to entered on a TI-58, TI-58C, or TI-59.  At the time of the posting, I have not done it, so I don't have the key codes.
2.  94 steps are used.  [INV] [SBR] is merged into the RTN step.
3.  Flags 1 and 2 are used.  If flag 1 is set, e^m is calculated as slope.  If flag 2 is set, e^b is calculated as intercept.

Program:
// Initialize - key [ A ]
000 LBL
001 A
002 INV
003 ST.F
004 01
005 INV
006 ST.F
007 02
008 CSR
009 0
010 RTN

// Calculation - key [ A' ]
011 LBL
012 A'
013 OP
014 12
015 INV
016 IF.F
017 02
018 (   // left parenthesis
019 INV
020 LN X
021 LBL
022 (  // left parenthesis
023 STO
024 08
025 R/S
026 X<>T
027 INV
028 IF.F
029 01
030 )  // right parenthesis
031 INV
032 LN X
033 LBL
034 )  // right parenthesis
035 STO 
036 07
037 R/S
038 OP
039 13
040 STO
041 09
042 RTN

// Logarithmic Regression - key [ B ]
043 LBL
044 B
045 LN X
046 X<>T
047 R/S
048 RTN

// Inverse Regression - key [ C ]
049 LBL 
050 C
051 1/X
052 X<>T
053 R/S
054 RTN

// Exponential Regression - [ D ]
055 LBL 
056 D
057 ST.F
058 02
059 X<>T
060 R/S
061 LN X
062 R/S
063 RTN

// Power Regression - [ B' ]
064 LBL
065 B'
066 ST.F
067 02
068 LN X
069 X<>T
070 R/S
071 LN X
072 R/S
073 RTN

// Geometric/Exponent Regression - [ C' ]
074 LBL
075 C'
076 ST.F
077 01
078 ST.F
079 02
080 X<>T
081 R/S
082 LN X
083 R/S
084 RTN

// Simple Logistic Regression - [ D' ]
085 LBL
086 D'
087 +/-
088 INV
089 LN X
090 X<>T
091 R/S
092 1/X
093 R/S
094 RTN

Instructions:
1.  Clear the statistics data and flags by pressing [  ].
2.  Enter data points: enter x, run the proper label, enter y, press [R/S] and press [2nd] ( ÎŁ+ ) or [INV] [2nd] ( ÎŁ+ )  (for  ÎŁ- ).

For example, for Logarithmic fit:
x_data [ B ] y_data [R/S]  [2nd] (ÎŁ+)

This scheme allows for undoing data:
x_data [B] y_data [R/S] [INV] [2nd] (ÎŁ+)

3.  Calculate intercept (B), slope (M), and correlation (R), press [2nd] [ A' ].

Examples

All results are rounded.

Example 1: Logarithmic Regression
Data (x,y):
(33.8, 102.4)
(34.6, 103.8)
(36.1, 105.1)
(37.8, 106.9)

Results:
B:  -33.4580
M:  38.6498
R:  0.9941

y ≈ -33.4580 + 38.6498 ln x

Example 2:  Inverse Regression
Data (x,y):
(100, 425)
(105, 429)
(110, 444)
(115, 480)

B:  823.80396
M:  -40664.72143
R:  -0.91195

y ≈ 823.80396 - 40664.72143/x

Example 3: Simple Logistic Regression
Data (x,y):
(1, 11)
(1.3, 9.615)
(1.6, 8.75)
(1.9, 8.158)
(2.6, 7.308)

B: 0.14675
M: -0.15487
R:  -0.99733

y ≈ 1 / (0.14675 - 0.15487*e^(-x))


Eddie

All original content copyright, © 2011-2019.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.


Thursday, August 15, 2019

TI Nspire CX II: Distributing Money Among Friends

TI Nspire CX II:  Distributing Money Among Friends

The Problem

This post is inspired from a Instagram post by @gercekboss at www.eylemmath.weebly.com.  The problem states that:

$100 is to be distributed among 100 friends:
1% is given to the 1st friend
2% is given to the 2nd friend
3% is given to the 3rd friend
and so on.

I have a TI Nspire CX II Document that covers this problem, which can be downloaded here:  https://drive.google.com/file/d/1aewZ-8wU2JjZxgGyBpNHivEYLU5QAt31/view?usp=sharing

Name of the document:  distribute percent.tns 

Using the TI Nspire CX II to set up two sequences to model this problem as two sequences:

Balance Sequence (Problem 1.3, plot is in green)

u1(n) = u1(n-1) - u1(n-1) * n%
Intial Terms: 100
0 ≤ n ≤ 99 step 1

Amount Sequence (Problem Page 1.7, plot is in red)

u2(n) = u1(n-1) *n%
Initial Terms: 0
0 ≤ n ≤ 99 step 1

By analysis, the 10th friend will get the biggest distribution under this plan, $6.28.  By the time we get to the 38th friends, the distribution becomes meaningless because the calculated amount will be less than one penny.



Regression Analysis

I performed curve fitting analysis for the balance and amount distributed on problems page 1.5 and 1.9, respectively.

Balance can be estimated by the logistic equation:

balance(n) ≈ 112.84/(1 + 0.1*e^(0.23n)) - 0.54  for 1 ≤ n ≤ 40

The maximum absolute error is 0.67. 

Amount can be estimated by the quartic polynomial:

amount(n) ≈ -4.01E-5*n^4 + 4.31E-3 * n^3 - 0.15 * n^2 + 1.89 * n - 1.26
for 1 ≤ n ≤ 40

I did slightly better, the maximum absolute error is 0.52.



Generalizing the Problem

Now, let's take any money of money and any amount of friends for whom to distribute that money.  The rate can increase per friend by at different rates:

a*n% + b%

If you want 2%, 4%, 6%, etc, let a = 2, b = 0



If you want each friend to get 1/2% more than the last, let a = 1/2, b = 0.

If you want the first friend to get 2%, second to get 3%, etc, let a = 1, b =  1.

The sequences are set up as:

Balance Sequence

u1(n) = u1(n-1) - u1(n-1) * (a*n% + b%)
Intial Terms: c
0 ≤ n ≤ l step 1

Amount Sequence

u2(n) = u1(n-1) *(a*n% + b%)
Initial Terms: 0
0 ≤ n ≤ l step 1

Variables:
a = rate parameter
b = rate parameter
c = initial amount of money
l = number of friends

You can customize the problem in Problem 2 of the document.  Change the variables on Problem Page 2.2 and see the results on Problem Pages 2.3 and 2.4. 

Source:

Question 251. eleymmath.    https://eylemmath.weebly.com/algebra/100-question  Retrieved July 21, 2019. 

Eddie

All original content copyright, © 2011-2019.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.

Saturday, November 4, 2017

HP Prime: Best Regression Fit

HP Prime:  Best Regression Fit

The program BESTFIT compares a set of regressions to determine a best fit.  This simulates a feature presented on the Hewlett Packard HP 48S, HP 48G, HP 49G, and HP 50g.  BESTFIT compares the correlations of the following four regression models:

1.  Linear:  y = a * x + b
2.  Logarithmic:  y = a * ln x + b
3.  Exponential:  y = b * a^x   (y = b * e^(ln a * x))
4.  Power: y = b * x^a

The output is a two element list:  a string of the best fit equation and its corresponding correlation.

HP Prime Program:  BESTFIT

EXPORT BESTFIT(L1,L2)
BEGIN
// 2017-11-02 EWS
// Simulate Best Fit
// HP 48GX,49G,50g

// initialize
LOCAL clist,m,c,v,s,n;
clist:={0,0,0,0};

// test
// correlation is linear only
// requires approx()
// linear y=a*x+b
clist[1]:=approx(correlation(L1,L2));
// log y=a*LN(x)+b
c:=approx(correlation(LN(L1),L2));
IF IM(c)==0 THEN
clist[2]:=c;
END;
// exponential y=b*e^(a*x)
c:=approx(correlation(L1,LN(L2)));
IF IM(c)==0 THEN
clist[3]:=c;
END;

// power y=b*a^x
c:=approx(correlation(LN(L1),LN(L2)));
IF IM(c)==0 THEN
clist[4]:=c;
END;

// test
// POS(L0^2,MAX(L0^2))
m:=POS(clist^2,MAX(clist^2));
c:=clist[m];

IF m==1 THEN
v:=linear_regression(L1,L2);
s:=STRING(v[2])+"+"+STRING(v[1])+
"*X";
RETURN {s,c};
END;

IF m==2 THEN
v:=logarithmic_regression(L1,L2);
s:=STRING(v[2])+"+"+STRING(v[1])+
"*LN(X)";
RETURN {s,c};
END;

IF m==3 THEN
v:=exponential_regression(L1,L2);
s:=STRING(v[2])+"*"+STRING(v[1])+
"^X";
RETURN {s,c};
END;

IF m==4 THEN
v:=power_regression(L1,L2);
s:=STRING(v[2])+"*X^"+
STRING(v[1]);
RETURN {v,s};
END;

END;

Examples – BESTFIT:

Example 1:

X
y
1.05
10.45
2.28
11.33
4.20
16.38
6.34
28.87

Result: {“7.78250037344*1.21713132288^X”, 0.981261724397}
Example 2:

X
Y
-10
82
-5
41
5
-42
10
-79

Result:  {“0.5+ -8.1*X”, -0.999801918343}


Example 3:

X
Y
10
2.278
11
2.666
12
2.931
13
3.212

Result:  {“-5.79464870365+3.51429873838*LN(X)”, 0.998295735284}

BESTFIT2:  An Extended Version

Version 2 adds the following regressions: 

5.  Inverse:  y = b + a/x
6.  Simple Logistic:  y = 1/(b + a*e^(-x))
7.  Simple Quadratic:  y = b + a*x^2
8.  Square Root:  y = √(a*x + b)

HP Prime Program:  BESTFIT2

EXPORT BESTFIT2(L1,L2)
BEGIN
// 2017-11-02 EWS
// Simulate Best Fit
// HP 48GX,49G,50g
// additional models

// initialize
LOCAL clist,m,c,v,s;
clist:={0,0,0,0,0,0,0,0};

// test
// correlation is linear only
// requires approx()

// linear y=a*x+b
clist[1]:=approx(correlation(L1,L2));

// log y=a*LN(x)+b
c:=approx(correlation(LN(L1),L2));
IF IM(c)==0 THEN
clist[2]:=c;
END;

// exponential y=b*e^(a*x)
c:=approx(correlation(L1,LN(L2)));
IF IM(c)==0 THEN
clist[3]:=c;
END;

// power y=b*a^x
c:=approx(correlation(LN(L1),LN(L2)));
IF IM(c)==0 THEN
clist[4]:=c;
END;

// inverse y=b+a/x
IF POS(L1,0)==0 THEN
clist[5]:=approx(correlation(1/L1,
L2));
END;

// simple logistic
IF POS(L2,0)==0 THEN
clist[6]:=approx(correlation(e^(−L1),
1/L2));
END;

// simple quadratic
clist[7]:=approx(correlation(L1^2,
L2));

// square root
IF ÎŁLIST(L2≥0)==SIZE(L2) THEN
clist[8]:=approx(correlation(L1,
L2^2));
END;



// test
// POS(L0^2,MAX(L0^2))
m:=POS(clist^2,MAX(clist^2));
c:=clist[m];

IF m==1 THEN
v:=linear_regression(L1,L2);
s:=STRING(v[2])+"+"+STRING(v[1])+
"*X";
END;

IF m==2 THEN
v:=logarithmic_regression(L1,L2);
s:=STRING(v[2])+"+"+STRING(v[1])+
"*LN(X)";
END;

IF m==3 THEN
v:=exponential_regression(L1,L2);
s:=STRING(v[2])+"*"+STRING(v[1])+
"^X";
END;

IF m==4 THEN
v:=power_regression(L1,L2);
s:=STRING(v[2])+"*X^"+
STRING(v[1]);
END;

// inverse
IF m==5 THEN
v:=linear_regression(1/L1,L2);
s:=STRING(v[2])+"+"+STRING(v[1])+
"/X";
END;

// simple logistic
IF m==6 THEN
v:=linear_regression(e^(−L1),
1/L2);
s:="1/("+STRING(v[2])+"+"+
STRING(v[1])+"*e^(−X))";
END;

// simple quadratic
IF m==7 THEN
v:=linear_regression(L1^2,L2);
s:=STRING(v[2])+"+"+STRING(v[1])+
"*X^2";
END;

// square root
IF m==8 THEN
v:=linear_regression(L1,L2^2);
s:="√("+STRING(v[2])+"+"+
STRING(v[1])+"*X)";
END;

RETURN {s,c};
END;

Examples – BESTFIT2:

Example 4:

X
y
1.05
10.45
2.28
11.33
4.20
16.38
6.34
28.87

Result:  {“9.0573970192+0.48023219108*X^2”, 0.994491728382}

Example 5:

X
y
1
8.4853
2
8.9443
4
9.7980
7
10.9546

Result: {“√(63.9995089183+8.00048914762*X”, 0.999999999759}

Example 6:

X
y
1
1
2
-0.5
3
-1
4
-1.25

Result:  {“-2+3/X”, 1}

Eddie

This blog is property of Edward Shore, 2017

HP 67 Collection: October 2026

HP 67 Collection: Oct ober 2026 All examples are done in FIX 4. (DSP 4) Earth's Gravity at a Specific Latitude The true ea...