我在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。我的代码有问题吗?
答案 0 :(得分:0)
布里埃梅尔(Briemel)发表的一篇称为澄清的论文实际上是相当混乱的,因为它说Ai和Pi是实际值和预测值。事实并非如此,您应该将这些值用作“变化率”(引自论文本身If one means by Ai and Pj the observed changes and
the predicted changes ...
),这将需要您为其编写其他代码。
总而言之,Oracle实施是您所需要的正确选择!