我正在使用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
?
谢谢。