尝试求解多元回归方程时的Mathnet错误

时间:2015-01-11 15:21:55

标签: c# math mathnet

我有以下代码,我正在尝试用两种不同的方法来解决多元回归方程。数组太长,无法列出,但每个数组的匹配数为5704行。我尝试运行代码时遇到以下错误

//获取MathNet.Numerics.dll中出现未处理的“System.ArgumentException”类型异常

附加信息:Matrix必须是肯定的。

double[] p = Fit.MultiDim(
                new[] { shortRatingList.ToArray(), mediumRatingList.ToArray(), longRatingList.ToArray() },
                weekReturnList.ToArray(),
                intercept: true);

//获取MathNet.Numerics.dll中出现未处理的“System.ArgumentException”类型异常

其他信息:Matrix尺寸必须达成一致:3x5705。

                double[] q = MultipleRegression.QR(
                new[] { shortRatingList.ToArray(), mediumRatingList.ToArray(), longRatingList.ToArray() },
                weekReturnList.ToArray(),
                intercept: true);

1 个答案:

答案 0 :(得分:2)

问题中的代码片段计算带有3个样本点的回归(每个样本点都有5704个值),因此预计weekReturnList的长度为3。

但是,如果weekReturnList的长度为5704,并且您的数据实际上代表5704个数据点,每个数据点有3个值(短,中,长),那么您需要转置输入。

我认为按列而不是数据点组织的数据在实践中非常常见,因此我们应该考虑在Fit类中为此用例添加快捷函数。

与此同时,您可以使用以下内容,通过从列数组而不是行数组创建设计矩阵来转置输入:

MultipleRegression.NormalEquations(
    Matrix<double>.Build.DenseOfColumnArrays(shortRatingList, mediumRatingList, longRatingList),
    Vector<double>.Build.Dense(weekReturnList));