VB.NET 中的 MathNet 多元回归
MathNet Multiple Regression in VB.NET
我正在尝试使用该模型函数在 MathNet 中实施 多元回归(稍后可能会添加另一个预测变量):
Y = a + bX1 + cX2 + dX1X2+ eX1^2 + fX2^2
Dim impvol(IV(0).Count) As Double
Dim predictors1 As Double()() = New Double(2)() {} ' MN,DTE
Dim predictors2 As Double()() = New Double(2)() {} ' STRIKE,DTE
Try
For i = 1 To MN(0).Count
predictors1(i) = New Double() {CType(MN(0).Item(i), Double), CType(IV(0).Item(i), Double)}
Next
For i = 1 To Strike(0).Count
predictors2(i) = New Double() {CType(Strike(0).Item(i), Double), CType(IV(0).Item(i), Double)}
Next
For i = 1 To UBound(impvol)
impvol(i) = CType(IV(0).Item(i), Double)
Next
Catch exc As Exception
MessageBox.Show("Conversion Error (Vol Surface)")
End Try
' Model Surface is Y = a + bX1 + cX2 + dX1X2 + eX1^2 + fX2^2
' The following inline model functions are needed here to regress the 3D surface
'Dim p0 As Func(Of Double, Double) = Function(x) 1
'Dim p1 As Func(Of Double, Double) = Function(x) x
'Dim p2 As Func(Of Double(), Double) = Function(x) x(1) * x(2)
'Dim p3 As Func(Of Double, Double) = Function(x) x ^ 2
Dim p0 = Function(x As Double) 1
Dim p1 = Function(x As Double) x
Dim p2 = Function(x As Double, y As Double) x * y
Dim p3 = Function(x As Double) x ^ 2
Dim regparams1() As Double = MathNet.Numerics.Fit.LinearMultiDim(predictors1, impvol,
p0, p1(predictors1(0)), p1(predictors1(1)), p2(predictors1(0), predictors1(1)), p3(predictors1(0)), p3(predictors1(1)))
Dim regparams2() As Double = MathNet.Numerics.Fit.LinearMultiDim(predictors2, impvol, False)
第二个回归编译正常(错误)但不是第一个。
这更像是一个 VB.NET 问题:如何实现 C# 回归页面上描述的功能?
提前致谢
你可以试试这个(这是我对它需要什么的猜测):
Dim f As Func(Of Double, Double)
f = Fit.LinearCombinationFunc(
{61.0, 62.0, 63.0, 65.0},
{3.6, 3.8, 4.8, 4.1},
Function(x) 1.0,
Function(x) Math.Log(x)
)
Debug.Print(f(66.0))
'And For Linearizing non-linear models by transformation...
Dim xy = {{1.0, 4.0},
{2.0, 5.0},
{3.0, 2.0}}
Dim z = {15.0, 20, 10}
Dim z_hat = z.[Select](Function(r) Math.Log(r)).ToArray()
Dim p_hat As Double() = Fit.LinearMultiDim(xy, z_hat, Function(d) 1.0,
Function(d) Math.Log(d(0)), Function(d) Math.Log(d(1)))
Dim u As Double = Math.Exp(p_hat(0))
Dim v As Double = p_hat(1)
Dim w As Double = p_hat(2)
我正在尝试使用该模型函数在 MathNet 中实施 多元回归(稍后可能会添加另一个预测变量):
Y = a + bX1 + cX2 + dX1X2+ eX1^2 + fX2^2
Dim impvol(IV(0).Count) As Double
Dim predictors1 As Double()() = New Double(2)() {} ' MN,DTE
Dim predictors2 As Double()() = New Double(2)() {} ' STRIKE,DTE
Try
For i = 1 To MN(0).Count
predictors1(i) = New Double() {CType(MN(0).Item(i), Double), CType(IV(0).Item(i), Double)}
Next
For i = 1 To Strike(0).Count
predictors2(i) = New Double() {CType(Strike(0).Item(i), Double), CType(IV(0).Item(i), Double)}
Next
For i = 1 To UBound(impvol)
impvol(i) = CType(IV(0).Item(i), Double)
Next
Catch exc As Exception
MessageBox.Show("Conversion Error (Vol Surface)")
End Try
' Model Surface is Y = a + bX1 + cX2 + dX1X2 + eX1^2 + fX2^2
' The following inline model functions are needed here to regress the 3D surface
'Dim p0 As Func(Of Double, Double) = Function(x) 1
'Dim p1 As Func(Of Double, Double) = Function(x) x
'Dim p2 As Func(Of Double(), Double) = Function(x) x(1) * x(2)
'Dim p3 As Func(Of Double, Double) = Function(x) x ^ 2
Dim p0 = Function(x As Double) 1
Dim p1 = Function(x As Double) x
Dim p2 = Function(x As Double, y As Double) x * y
Dim p3 = Function(x As Double) x ^ 2
Dim regparams1() As Double = MathNet.Numerics.Fit.LinearMultiDim(predictors1, impvol,
p0, p1(predictors1(0)), p1(predictors1(1)), p2(predictors1(0), predictors1(1)), p3(predictors1(0)), p3(predictors1(1)))
Dim regparams2() As Double = MathNet.Numerics.Fit.LinearMultiDim(predictors2, impvol, False)
第二个回归编译正常(错误)但不是第一个。 这更像是一个 VB.NET 问题:如何实现 C# 回归页面上描述的功能?
提前致谢
你可以试试这个(这是我对它需要什么的猜测):
Dim f As Func(Of Double, Double)
f = Fit.LinearCombinationFunc(
{61.0, 62.0, 63.0, 65.0},
{3.6, 3.8, 4.8, 4.1},
Function(x) 1.0,
Function(x) Math.Log(x)
)
Debug.Print(f(66.0))
'And For Linearizing non-linear models by transformation...
Dim xy = {{1.0, 4.0},
{2.0, 5.0},
{3.0, 2.0}}
Dim z = {15.0, 20, 10}
Dim z_hat = z.[Select](Function(r) Math.Log(r)).ToArray()
Dim p_hat As Double() = Fit.LinearMultiDim(xy, z_hat, Function(d) 1.0,
Function(d) Math.Log(d(0)), Function(d) Math.Log(d(1)))
Dim u As Double = Math.Exp(p_hat(0))
Dim v As Double = p_hat(1)
Dim w As Double = p_hat(2)