我已经看到许多涉及这个话题的问题,但还没有找到答案。如果我错过了已经回答这个问题的提问,请标记并指引我们到那个问题。
场景:我们有一个基准数据集,我们有插补方法,我们系统性地从基准数据集中删除值,并使用两种不同的插补方法。因此,我们有基准数据集、imputedData1 和 imputedData2。
问题:是否有一个函数可以产生一个数字,表示基准数据集与 imputedData1 之间的差异,或者/以及基准数据集与 imputedData2 之间的差异。例如,function(基准数据集, imputedData1) = 3.3 以及 function(基准数据集, imputedData2) = 2.8
注意:数据集是数值型的,数据集大小相同,方法应该尽可能在数据层面工作(即不创建回归并比较回归 – 除非它可以处理任何数值型数据集)。
可复现的数据集,仅第一行有变化:
基准数据集:
> head(mtcars,n=10) mpg cyl disp hp drat wt qsec vs am gear carbMazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
imputedData1:
> head(mtcars,n=10) mpg cyl disp hp drat wt qsec vs am gear carbMazda RX4 22.0 4 108.0 100 3.90 2.200 16.46 0 1 4 4Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
imputedData2:
> head(mtcars,n=10) mpg cyl disp hp drat wt qsec vs am gear carbMazda RX4 18.0 6 112.0 105 3.90 2.620 16.46 0 0 3 4Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
我尝试使用均方根误差(RMSE),但效果不佳,所以我在尝试寻找其他方法来解决这个问题。
回答:
你也可以查看 ftsa
包。它提供了大约 20 种误差度量 可以计算。在你的情况下,缩放误差是有意义的,因为各列的单位不同。
library(ftsa)error(forecast=unlist(imputedData1),true=unlist(bench), insampletrue = unlist(bench), method = "mase")[1] 0.035136error(forecast=unlist(imputedData2),true=unlist(bench), insampletrue = unlist(bench), method = "mase")[1] 0.031151
数据
bench <- read.table(text='mpg cyl disp hp drat wt qsec vs am gear carb21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 421.0 6 160.0 110 3.90 2.875 17.02 0 1 4 422.8 4 108.0 93 3.85 2.320 18.61 1 1 4 121.4 6 258.0 110 3.08 3.215 19.44 1 0 3 118.7 8 360.0 175 3.15 3.440 17.02 0 0 3 218.1 6 225.0 105 2.76 3.460 20.22 1 0 3 114.3 8 360.0 245 3.21 3.570 15.84 0 0 3 424.4 4 146.7 62 3.69 3.190 20.00 1 0 4 222.8 4 140.8 95 3.92 3.150 22.90 1 0 4 219.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4',header=TRUE,stringsAsFactors=FALSE)imputedData1 <- read.table(text='mpg cyl disp hp drat wt qsec vs am gear carb22.0 4 108.0 100 3.90 2.200 16.46 0 1 4 421.0 6 160.0 110 3.90 2.875 17.02 0 1 4 422.8 4 108.0 93 3.85 2.320 18.61 1 1 4 121.4 6 258.0 110 3.08 3.215 19.44 1 0 3 118.7 8 360.0 175 3.15 3.440 17.02 0 0 3 218.1 6 225.0 105 2.76 3.460 20.22 1 0 3 114.3 8 360.0 245 3.21 3.570 15.84 0 0 3 424.4 4 146.7 62 3.69 3.190 20.00 1 0 4 222.8 4 140.8 95 3.92 3.150 22.90 1 0 4 219.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4',header=TRUE,stringsAsFactors=FALSE)imputedData2 <- read.table(text='mpg cyl disp hp drat wt qsec vs am gear carb18.0 6 112.0 105 3.90 2.620 16.46 0 0 3 421.0 6 160.0 110 3.90 2.875 17.02 0 1 4 422.8 4 108.0 93 3.85 2.320 18.61 1 1 4 121.4 6 258.0 110 3.08 3.215 19.44 1 0 3 118.7 8 360.0 175 3.15 3.440 17.02 0 0 3 218.1 6 225.0 105 2.76 3.460 20.22 1 0 3 114.3 8 360.0 245 3.21 3.570 15.84 0 0 3 424.4 4 146.7 62 3.69 3.190 20.00 1 0 4 222.8 4 140.8 95 3.92 3.150 22.90 1 0 4 219.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4',header=TRUE,stringsAsFactors=FALSE)