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 に答える