У меня есть следующий код, и я пытаюсь использовать два разных метода для решения уравнения множественной регрессии. Массивы слишком длинны, чтобы перечислить, но подсчет по каждому соответствует 5704 строкам. Я получаю следующие ошибки, когда пытаюсь запустить код
//получение Необработанное исключение типа "System.ArgumentException" произошло в MathNet.Numerics.dll
Дополнительная информация: Матрица должна быть положительно определена.
double[] p = Fit.MultiDim(
new[] { shortRatingList.ToArray(), mediumRatingList.ToArray(), longRatingList.ToArray() },
weekReturnList.ToArray(),
intercept: true);
//получение Необработанное исключение типа "System.ArgumentException" произошло в MathNet.Numerics.dll
Дополнительная информация: Размеры матрицы должны совпадать: 3x5705.
double[] q = MultipleRegression.QR(
new[] { shortRatingList.ToArray(), mediumRatingList.ToArray(), longRatingList.ToArray() },
weekReturnList.ToArray(),
intercept: true);
Фрагмент кода в вопросе вычисляет регрессию с тремя точками выборки (каждая из них с 5704 значениями), поэтому она ожидает, что weekReturnList
будет иметь длину 3.
Однако, если weekReturnList
имеет длину 5704, а ваши данные фактически представляют 5704 точек данных с 3 значениями каждый (короткий, средний, длинный), тогда вам нужно транспонировать вход.
Я полагаю, что данные, организованные столбцами вместо точек данных, довольно распространены на практике, поэтому мы должны рассмотреть возможность добавления функции быстрого доступа для этого варианта использования в классе Fit
.
Тем временем вы можете использовать следующее, которое переносит ввод, создавая матрицу дизайна из массивов столбцов вместо массивов строк:
MultipleRegression.NormalEquations(
Matrix<double>.Build.DenseOfColumnArrays(shortRatingList, mediumRatingList, longRatingList),
Vector<double>.Build.Dense(weekReturnList));