1

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

// 在 MathNet.Numerics.dll 中发生“System.ArgumentException”类型的未处理异常

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

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

// 在 MathNet.Numerics.dll 中发生“System.ArgumentException”类型的未处理异常

附加信息:矩阵尺寸必须一致:3x5705。

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

1 回答 1

2

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

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

我假设按列而不是数据点组织的数据在实践中很常见,所以我们应该考虑在Fit类中为这个用例添加一个快捷功能。

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

MultipleRegression.NormalEquations(
    Matrix<double>.Build.DenseOfColumnArrays(shortRatingList, mediumRatingList, longRatingList),
    Vector<double>.Build.Dense(weekReturnList));
于 2015-01-11T16:05:45.103 回答