我有以下代码,我正在尝试用两种不同的方法来解决多元回归方程。数组太长,无法列出,但每个数组的匹配数为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);
答案 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));