GoodnessOfFit.StandardError неправильный ответ

Почему я получаю неправильный ответ (err2) от GoodnessOfFit.StandardError? В приведенном ниже коде я выполняю вычисления самостоятельно и получаю правильный ответ (err3). Я получаю правильный ответ от GoodnessOfFit.RSquared. Примечание: esttime и phrf двойные []. Длина 63

    Tuple<double, double> p = Fit.Line(esttime, phrf);
    double ss = 0.0;
    for (int j = 0; j < esttime.Length; j++)
    {
        est[j] = p.Item1 + p.Item2 * esttime[j];
        ss += Math.Pow(est[j] - phrf[j], 2);
    }
    double err2 = GoodnessOfFit.StandardError(est, phrf, phrf.Length - 2);
    Console.WriteLine(err2.ToString()); //writes 70.91 which is wrong
    double err3 = Math.Sqrt(ss / est.Length - 2);
    Console.WriteLine(err3.ToString()); // writes 12.56 which is correct

1 ответ

Ответ: Третий аргумент, Степени свободы, на самом деле - количество степеней свободы, потерянных в регрессии. Таким образом, в примере это должно быть 2, а не phrf.Length - 2. Тем не менее, оно точно не соответствует моим расчетам и Excel.

Я получаю точно такой же результат с помощью excel и Math.NET для полиномиальной подгонки, когда я устанавливаю степени свободы равными порядку полиномиальной подгонки + 1. Итак, в следующем примере:

double[] paramsPoly = MathNet.Numerics.Fit.Polynomial(X.ToArray(),Y.ToArray(),6);

Функция StandardError должна получить 6 + 1 в качестве последнего параметра:

double sey = MathNet.Numerics.GoodnessOfFit.StandardError(Yest, Y, 7);
Другие вопросы по тегам