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

本文关键字:回归 方程时 出错 Mathnet | 更新日期: 2023-09-27 18:37:10

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

获取 MathNet.Numerics 中发生了类型为"System.ArgumentException"的未处理异常.dll

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

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

获取 MathNet.Numerics 中发生了类型为"System.ArgumentException"的未处理异常.dll

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

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

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

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

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

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

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

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