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

Mathnet errors when trying to solve a multiple regression equation

我有以下代码,我正在尝试使用 2 种不同的方法来求解多元回归方程。数组太长而无法列出,但每个数组的计数在 5704 行处匹配。当我尝试 运行 代码

时出现以下错误

// getting 'System.ArgumentException' 类型的未处理异常发生在 MathNet.Numerics.dll

附加信息:矩阵必须是正定的。

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

// getting 'System.ArgumentException' 类型的未处理异常发生在 MathNet.Numerics.dll

附加信息:矩阵维度必须一致:3x5705。

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

问题中的代码片段使用 3 个样本点(每个样本点有 5704 个值)计算回归,因此它期望 weekReturnList 的长度为 3。

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

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

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

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