我有一组数据,其形式为不同的值和每个数据的出现次数。我想做一个数据的盒子图,但我无法弄清楚如何做到这一点。有没有办法让boxplot函数计算每个值乘以频率?或者有没有办法从五个数字摘要做一个箱形图?
由于
答案 0 :(得分:1)
回答第二个问题:是的,您可以对5个数字摘要执行箱线图。
排序。我的意思是,它只是归结为这样一个事实,即5个数字摘要的最小值/ Q1 /中值/ Q3 /最大值正好是那5个数字。因此,您可以在摘要统计信息上调用boxplot
,但您需要禁用异常值检测(默认情况下已启用)*:
boxplot(summary_stats, 'whisker',Inf)
另一种方法可能是从计数数据中重新创建原始数据,如果这不是很大的话。这是一种有点愚蠢的方式:
OrigDataCells = arrayfun(@(val,reps) repmat(val, [reps 1]), Values, Counts, 'UniformOutput',false);
OrigData = vertcat(OrigDataCells{:});
其中Values
和Counts
是值和出现次数。
* 'whisker'
参数的默认值为1.5,它将晶须长度限制在1.5 IQR,并导致超出该值的任何点显示为“异常值”。将此值设置为无穷大将使胡须延伸到数据的最大值/最小值。
答案 1 :(得分:0)
更新
以下描述对于5元素向量是正确的。通过其5个参数绘制框图的目标的最简单方法是将第25和第75百分位元素加倍以生成7元素向量。
示例:
Segment
如果必须使用5元素Vector而不是7元素向量,请参阅以下内容:
我刚刚发现这篇帖子已经在几年前得到了解答。我只想补充一点,只是给boxplot()方法提供5个数字不能正常工作,因为Q1和Q3在5个元素上计算,因此显示的Q1和Q3并不总是等于第2和第4个元素矢量。最小值,中值和最大值当然是正确的。
Matlab以下列方式计算N = 5个元素向量V的第25个百分点:
boxplot([min, 25thPerc, 25thPerc, median, 75thPerc, 75thPerc, max]);
因此,排序向量的位置I = 1.75处的元素的值表示最佳的第25百分位数。由于所有元素都具有整数索引,因此Matlab使用线性插值来查找虚拟索引I = 1.75。由于1.75位于元素VS(1)和VS(2)之间,并且更接近VS(2),它需要VS(2)的75%+ VS(1)的25%。
V = [3, 11, 6, 9, 5];
P = 0.25; % 25th percentile
1) Sort:
VS= sort(V); % VS= [3, 5, 6, 9, 11]
2)
I = (P * N) + 0.5 = 1.75;
因此,Vector V的第25百分位是4.5
为了获得合适的箱图,方法boxplot()需要使用以下向量D
Result = (ceil(I)-I)*VS(floor(I) + I-floor(I)*VS(ceil(I))
with:
ceil(I) = 2
floor(I) = 1
ceil(I)-I = 0.25
I-floor(I) = 0.75
Result = 0.25*VS(1) + 0.75*VS(2);
= 0.25*3 + 0.75*5
= 4.5
其中minV,medianV和maxV是V的最小值,中值和最大值。
D = [minV, a, medianV, b, maxV]
q1和q3是你想要在箱线图中显示的第25和第75百分位数。
希望这会有所帮助: - )