如何绘制两个密度分布之间的差异

时间:2017-05-19 09:34:25

标签: r ggplot2 density-plot

我训练了一个模型来预测某个变量。当我现在使用此模型预测所述值并将此预测与实际值进行比较时,我得到以下两个分布。

enter image description here

相应的R数据框如下所示:

x_var | kind
3.532 | actual
4.676 | actual
...
3.12 | predicted
6.78 | predicted

这两个分布显然有不同的均值,分位数等。我现在要做的是将这两个分布合二为一(特别是它们非常相似),但就像在以下thread

相反,我想绘制一个密度函数,显示实际值和预测值之间的差异,并让我说例如。 50%的预测值在实际值的-X%和+ Y%之内

我已经尝试绘制predicted-actual之间的差异以及与相应组中的平均值相比的差异。但是,这两种方法都没有产生我想要的结果。利用绘制的分布,能够进行上述陈述尤其重要,即50%的预测在实际值的-X%和+ Y%之内。如何实现这一目标?

3 个答案:

答案 0 :(得分:0)

让我们将这两个分布视为df_actual,df_predicted,然后计算

# dataframe with difference between two distributions
df_diff <- data.frame(x = df_predicted$x - df_actual$x, y = df_predicted$y - df_actual$y)

然后通过以下方式找到相对%差异:

x_diff = mean(( df_diff$x - df_actual$x) / df_actual $x) * 100
y_diff = mean(( df_diff$y - df_actual$y) / df_actual $y) * 100

这将为您提供%预测,无论是+/-在x还是y 。这是我的意见,并且也跟随this thread显示和测量两条分布曲线之间的区域。

我希望这会有所帮助。

答案 1 :(得分:0)

ParthChaudhary是对的 - 你想要分析差异的分布,而不是减去分布。但要注意减去相应对中的值,否则单独actual - predicted(和actual)的方差会使predicted差异蒙上阴影。即,如果你有类似的东西:

x y type
0 10.9 actual
1 15.7 actual
2 25.3 actual
...
0 10 predicted
1 17 predicted
2 23 predicted
...

你会merge(df[df$type=="actual",], df[df$type=="predicted",], by="x"),然后计算并绘制y.x-y.y

答案 2 :(得分:0)

要更好地量化预测分布和实际分布之间的差异是否显着,可以考虑使用R中的Kolmogorov-Smirnov检验,该检验可通过函数ks.test

获得。