Формула коэффициента прогноза Тейла U 1 / Тейла U 2 в Python - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблема с реализацией формулы коэффициента прогнозирования Theil U в моем коде Python.Одна из проблем заключается в том, что я нашел несколько разных версий формулы.Вот три формулы, которые я хочу попробовать:

U1 и 2 Тейла из статьи, в которой по иронии судьбы обсуждается путаница с коэффициентом прогноза Тейла: https://journals.sagepub.com/na101/home/literatum/publisher/sage/journals/content/mrja/1973/mrja_10_4/002224377301000413/20181220/002224377301000413.fp.png_v03

Другая версиякоэффициент прогноза Тейла U на странице справки Oracle: https://docs.oracle.com/cd/E40248_01/epm.1112/cb_statistical/frameset.htm?ch07s02s03s04.html

Три формулы должны получить значение 1, если прогноз является просто наивным запаздывающим прогнозом.Итак, давайте рассмотрим следующий простой список: list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] и предположим, что прогноз для каждого значения - это предыдущее значение.

Это мой код для 3 формул:

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

num = (sum([(list[row] - list[row - 1]) ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) / 9) ** 0.5
denum = ((sum([list[row] ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) / 9) ** 0.5) + \
    ((sum([list[row - 1] ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) / 9) ** 0.5)

UI = num / denum
print(UI)

num = sum([(list[row - 1] - list[row]) ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) ** 0.5
denum = (sum([list[row] ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]])) ** 0.5

UII = num / denum
print(UII)

num = sum([((list[row - 1] - list[row]) / list[row - 1]) ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) ** 0.5
denum = sum([((list[row] - list[row - 1]) / list[row - 1]) ** 2 for row in [1, 2, 3, 4, 5, 6, 7, 8, 9]]) ** 0.5

U_Oracle = num / denum
print(U_Oracle)

Это 3 результата:

0.08224166442822099

0.15309310892394865

1.0

Я не могу понять, почему не все 3 значения равны 1. Что-то не так с моим кодом?

1 Ответ

0 голосов
/ 19 мая 2019

Бумага из Briemel, называемая разъяснением, на самом деле довольно запутанная, поскольку в ней говорится, что Ai и Pi являются фактическими и прогнозируемыми значениями.Это неправда, вы должны использовать эти значения как «скорость изменения» (цитата из самой статьи If one means by Ai and Pj the observed changes and the predicted changes ...), что потребует от вас написания другого кода для него.

Чтобы сделать короткую историю короткой, реализация Oracle - это то, что вам нужно!

...