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);