预测准确性的 Diebold-Mariano 检验

机器算法验证 统计学意义 预言 准确性 迪堡马里亚诺测试
2022-04-13 01:17:13

我正在使用forecast包中的 Diebold-Mariano 测试R来测试预测准确性。特别是,我想从统计学上证明模型 2 具有更好的准确性我所做的是以下内容:

这些是来自两个预测模型的平方误差:

squaredErrorsFromForecastModelOne <- c ( 1.08431, 0.94595, 0.81180, 0.02976, 0.74494, 0.61874, 0.50382, 0.40145, 19.72515, 0.00127, 0.00417, 1.18810, 15.98400, 2.13949, 6.95535, 0.09054, 3.25766, 5.37266, 3.97883, 3.44511, 0.50808, 2.81132, 2.33295, 385.03073, 12.52735, 58.53015, 5.54603, 18.80436, 8.54802, 20.89861, 18.24486, 15.67131, 2.68173, 12.47644, 4.84924, 3.93189, 7.65020, 5.96776, 4.52711, 3.32260, 2.34151, 0.56025, 1.45975, 1.08764, 0.00341, 17.40392, 1.36376, 0.00146, 9.75438, 0.75412, 23.33373, 0.42497, 2.01754, 0.07355, 0.58630, 18.56576, 1.36259, 0.00709, 0.79477, 0.57882, 0.13286, 1.88705, 2.99913, 2.22159, 1.89255, 5.10173, 4.12374, 3.25911, 2.51001, 1.87580, 1.35187, 0.93084, 0.60388, 0.36036)

squaredErrorsFromForecastModelTwo <- c ( 0.00000, 0.00000, 0.00000, 0.00640, 0.00005, 0.00004, 0.00003, 0.00002, 0.16288, 0.01416, 0.01439, 0.00166, 0.18857, 0.00420, 0.14018, 0.05499, 0.00593, 0.14797, 0.00691, 0.00487, 0.01922, 0.00319, 0.00225, 2.95785, 0.03410, 1.07147, 0.13653, 0.03624, 0.51828, 0.03413, 0.02408, 0.01699, 0.07263, 0.01132, 0.02868, 0.02633, 0.00582, 0.00411, 0.00290, 0.00204, 0.00144, 0.03683, 0.00170, 0.03787, 0.01525, 0.19688, 0.00529, 0.01991, 0.14327, 0.05662, 0.31346, 0.03621, 0.11550, 0.07048, 0.03349, 0.32915, 0.04077, 0.07269, 0.12005, 0.12323, 0.07556, 0.03644, 0.17670, 0.03729, 0.03320, 0.00866, 0.00611, 0.00431, 0.00304, 0.00215, 0.00151, 0.00107, 0.00075, 0.00053)

这是我得到的输出:

> dm.test(errLin, errRob, h=1)

        Diebold-Mariano Test

data:  errLinerrRob
DM = 1.0514, Forecast horizon = 1, Loss function power = 2, p-value = 0.2965
alternative hypothesis: two.sided

> dm.test(errLin, errRob, h=1, power=1)

        Diebold-Mariano Test

data:  errLinerrRob
DM = 1.995, Forecast horizon = 1, Loss function power = 1, p-value = 0.04978
alternative hypothesis: two.sided

我的问题是:

1) 哪个测试是合适的?那个带参数的Power = 1还是Power = 2在文档中表示:损失函数中使用的功率。通常是 1 或 2。或者它们是否合适?

2) 在零假设是两种方法具有相同的预测精度的假设下,p 值究竟意味着什么?

感谢您的回复。


好的。我在这个话题上取得了一些进展。

我在第一篇文章中所做的测试拒绝了模型 1 和模型 2 的准确度具有相同准确度的原假设。

为了测试模型 2 的准确率是否优于模型 1 的准确率,我们必须这样做:

> dm.test(squaredErrorsFromForecastModelOne , squaredErrorsFromForecastModelTwo, alternative=c("greater"), h=1, power=1)

        Diebold-Mariano Test

data:  squaredErrorsFromForecastModelOnesquaredErrorsFromForecastModelTwo
DM = 1.995, Forecast horizon = 1, Loss function power = 1, p-value = 0.02489
alternative hypothesis: greater

p 值低于 5% 显着性水平,因此我们可以拒绝模型 1 的准确性优于模型 2 的原假设。

但是,这些问题仍然存在:

1)当我RMSE (Root Mean Square Error)用作我的准确度度量时,我使用预测模型的平方误差作为输入是否正确?

2)我应该dm.test在损失函数中使用什么参数?1还是2

谢谢。

1个回答

首先,您应该向 Diebold-Mariano 测试函数提供原始预测误差dm.test但是,您提供的是平方预测误差(在分隔线上方的文本部分中)。

其次,正如您所指出的,功率的选择完全取决于损失函数。只有你知道你的损失函数。假设如果预测误差为美元。那么你的损失函数是线性的,你应该使用 option 另一方面,当预测误差为美元。那么你应该使用. 如果你不确定你自己的损失函数,你可以在这个网站上问另一个问题,给出你的应用程序的上下文。但是,由于在某一时刻您说您使用 RMSE 作为预测准确度度量,因此使用一致可能是明智的。xxpower=1x2xpower=2power=2

第三,值告诉我们,如果损失(由于预测误差)在人口。对不起这么长的句子。p

最后,我不喜欢这样的方法,比如我想在统计学上支持模型 2 具有更好的准确性您不应该尽可能多地关心找出真相吗?可用的数据和统计方法可以帮助您吗?如果模型 1 在现实中比模型 2 更好,你不想学吗?滥用统计数据来获得你想要的结果可能很诱人,但是......但也许我误解了你。