The code calls for the range of the original series, and the number of lags we wanted for the autoregression. then OLS in matrix form is performed with the output of the betas and coefficient of the model. Again this is not dynamic
And oh..I'm getting the used to adding watches and stops.
Sub regression()
'calling for fixed range and lag values
orig = Range("B3:B100")
lag = 2
r = Range("B3:B100").Rows.Count - lag
y = Range(Cells(1, 1), Cells(r, 1))
For i = 1 To r
y(i, 1) = orig(i + lag, 1)
Next i
'creating x range
c = lag + 1
x = Range(Cells(1, 1), Cells(r, c))
'individual, not dynamic
'For i1 = 1 To r
' x(i1, 1) = 1
'Next i1
'For i2 = 1 To r
' x(i2, 2) = orig(i2 + 1, 1)
'Next i2
'For i3 = 1 To r
' x(i3, 3) = orig(i3 + 0, 1)
'Next i3
For j = 1 To c
For i = 1 To r
x(i, j) = orig(i + c - j, 1)
If j = 1 Then x(i, j) = 1
Next i
Next j
'Range("i7").Select
'ActiveCell.Range(Cells(1, 1), Cells(r, 1)) = y
'Range("j7").Select
'ActiveCell.Range(Cells(1, 1), Cells(r, c)) = x
'regression, getting b solution
xtrans = Application.WorksheetFunction.Transpose(x)
xtx = Application.WorksheetFunction.MMult(xtrans, x)
xtxinv = Application.WorksheetFunction.MInverse(xtx)
xtxinvxt = Application.WorksheetFunction.MMult(xtxinv, xtrans)
bsol = Application.WorksheetFunction.MMult(xtxinvxt, y)
'output in the excel
Range("H6") = "b="
Range("I6").Select
ActiveCell.Range(Cells(1, 1), Cells(c, 1)) = bsol
End Sub
No comments:
Post a Comment