Во-первых, всегда ли формула TSS = ESS + RSS
верна? Даже для экспоненциальной модели? Если это так, я просто не понимаю, где я не прав.
У меня есть 2 массива значений x и y, где y зависит от x.
x = np.array([1.5, 2.1, 2.4, 2.7, 3.2, 3.4, 3.6, 3.7, 4.0, 4.5, 5.1, 5.6])
y = np.array([0.6, 1.2, 1.3, 1.4, 1.45, 1.5, 1.6, 1.8, 1.9, 1.95, 2.1, 2.2])
У меня есть функция, которая определяет коэффициенты a и b и возвращает уравнение линейной регрессии (или просто a и b, если необходимо)
def Linear(x, y, getAB = False):
AVG_X = np.average(x)
AVG_Y = np.average(y)
DISP_X = np.var(x)
DISP_Y = np.var(y)
STD_X = np.std(x)
STD_Y = np.std(y)
AVG_prod = np.average(x*y)
cov = AVG_prod - (AVG_X*AVG_Y)
b = cov/DISP_X
a = AVG_Y - b*AVG_X
if getAB:
return a, b
return lambda X: a + b*X
У меня есть функция, которая определяет коэффициенты a и b и возвращает уравнение экспоненциальной регрессии
def Exponential(x, y, getAB = False):
LOG_Y_array = [math.log(value) for value in y]
A, B = Linear(x, LOG_Y_array, getAB = True)
a = math.exp(A)
b = math.exp(B)
if getAB:
return a, b
return lambda X: a * (b**X)
Я создал массив вычисленных значений y на основе экспоненциальной модели
Exponential_Prediction = Exponential(x, y)
Exponential_Prediction_y = [Exponential_Prediction(value) for value in x]
И, наконец, вот как я вычисляю TSS, ESS и RSS
TSS = np.sum((y - np.average(y))**2)
ESS_Exp = np.sum((Exponential_Prediction_y - np.average(y))**2)
RSS_Exp = np.sum((y-Exponential_Prediction_y)**2)
Это все довольно ясно, кроме вывода этого
print(str(TSS) + " = " + str(ESS_Exp) + " + " + str(RSS_Exp))
= 2,18166666667 = 2,70523753042 + 0,432362713806
Я не понимаю, как ESS может быть больше, чем TSS