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)