2015-12-02 312 views
0

我想知道是否有方法来计算异常值直方图的情节。我想绘制一个随机变量的频率,这个随机变量非常小,分布在零附近。然而,在我考虑的大多数情况下,我也有一个让事情复杂化的异常点。有没有办法在R/Matlab中调整x轴的缩放比例,以便我可以捕获我正在考虑的随机变量的分布,并显示异常值?因为获得绘图的正常方法导致所有值都被认为是零,我想要显示它们是如何分布在零附近的。因此,理想情况下,我希望将零附近的比例表示为非常小的数字,并且比间隔(不一定必须与实际距离零的距离成比例)之间的间隔表示异常值的分档。我不想从样本中删除异常值。如何计算直方图中的异常值? - R/Matlab

在R/Matlab中可能会出现这种情况吗?任何其他建议将受到欢迎。

编辑:问题不在于识别异常值并为它们使用不同的颜色。问题在于调整x轴上的比例,以便我可以观察变量的分布以及在图中包含异常值。

+0

使用直方图块也离群的选择:你可以表示每个绘制在图中的单独的标记异常值。如果没有太多的异常值,这可能会起作用。 – mikkola

+0

@SamDickson你提到我的问题中描述的问题与我的不同。 Ander Biguri的解决方案是我一直在寻找的。我只需要稍微修改一下,就像我在其他评论中所描述的那样。 – Masher

回答

2

下一个代码将完成这项工作,但您需要更改轴的Xticklabels以使它们显示异常值的实际值。

A=rand(1000,1)*0.1; 
A(1:10)=10; 


% modify the data for plotting pourposes. Get the outliers closer 
expected_maximum_value=1; % You can compute this useg 3*sigma maybe? 
distance_to_outliers=0.5; 
outlier_mean=mean(A(A>expected_maximum_value)); 
A(A>expected_maximum_value)=A(A>expected_maximum_value)-outlier_mean+distance_to_outliers; 

% plot 
h=histogram(A,'BinWidth',0.01) 

%% trick the X axis 
ax=gca; 
ax.XTickLabel{end-1}=[ax.XTickLabel{end-1} '//']; 
ax.XTickLabel{end}=['//' num2str(outlier_mean)]; 

enter image description here

+0

感谢您的回答!经过一些试验和错误,我设法实现你的解决方案,它几乎完美的工作。我还有一个问题。我的规模上的数字非常小,在剧情结束时x10-4。当我应用你的技巧并以某种方式替换标签时,我失去了这个x10-4。你知道如何实施你的解决方案而不会失去它吗?再次非常感谢您的帮助:) – Masher

+0

@Masher我的第一个建议是将'distance_to_outliers'的值减小到3 * sigma(假设为高斯数据)或'2 * expected_maximum_value'。否则你需要用蜱做更难的技巧。 –

+0

我会试试这种方式,谢谢你的帮助:) – Masher