Theil 的 U 1 / Theil 的 U 2 预测系数公式 Python
Theil's U 1 / Theil's U 2 Forecast Coefficient formula in Python
我在 Python 代码中实现 Theil U 预测系数公式时遇到问题。问题之一是我发现了几个不同版本的公式。
我想尝试的 3 个公式如下:
Theil 的 U 1 和 2 来自一篇讽刺地讨论了 Theil 的 U 预测系数的混淆的论文:https://journals.sagepub.com/na101/home/literatum/publisher/sage/journals/content/mrja/1973/mrja_10_4/002224377301000413/20181220/002224377301000413.fp.png_v03
Theil 的 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。我的代码有问题吗?
Briemel 的论文称为澄清实际上非常混乱,因为它说 Ai 和 Pi 是实际值和预测值。那不是真的,您应该将这些值用作 'rate of change'(引用论文本身 If one means by Ai and Pj the observed changes and
the predicted changes ...
),这将需要您为其编写另一个代码。
长话短说,Oracle 实施正是您正在寻找的正确选择!
我在 Python 代码中实现 Theil U 预测系数公式时遇到问题。问题之一是我发现了几个不同版本的公式。 我想尝试的 3 个公式如下:
Theil 的 U 1 和 2 来自一篇讽刺地讨论了 Theil 的 U 预测系数的混淆的论文:https://journals.sagepub.com/na101/home/literatum/publisher/sage/journals/content/mrja/1973/mrja_10_4/002224377301000413/20181220/002224377301000413.fp.png_v03
Theil 的 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。我的代码有问题吗?
Briemel 的论文称为澄清实际上非常混乱,因为它说 Ai 和 Pi 是实际值和预测值。那不是真的,您应该将这些值用作 'rate of change'(引用论文本身 If one means by Ai and Pj the observed changes and
the predicted changes ...
),这将需要您为其编写另一个代码。
长话短说,Oracle 实施正是您正在寻找的正确选择!