如何在MATLAB中为基于样本确定自由度的F分布着色拒绝区域?
解决MATLAB中F分布拒绝区域着色失效的问题
我来帮你搞定这个拒绝区域着色的问题!你的代码里的核心问题是索引方式错误——直接用临界值critical_value作为数组下标是行不通的,因为x是按0.01步长生成的数值数组,临界值是一个具体的数值,不是数组的位置索引。下面是修复后的完整代码,以及关键问题的解释:
修复后的MATLAB代码
clear clc format short g %% Samples s1=[407 411 409]; s2=[404 406 408 405 402]; s3=[410 408 406 408]; s4=[400 413 407 405 403 410 409]; observations=[s1 s2 s3 s4]; %% degrees of freedom n=4; %no of samples m=length(observations); v1=n-1 v2=m-n %% Level of sig alpha=0.05 level_of_sig=1-alpha critical_value=finv(level_of_sig,v1,v2) %% Plotting F-Dist % 调整x的范围,让拒绝区域显示更完整(不需要用观测值的最大值,F分布的x可以更大) x=0:0.01:critical_value + 3; fdist=fpdf(x,v1,v2); fig1 = figure(1); hold on plot(x,fdist,'LineWidth',1.5) xline(0,'Color', [0.5 0.5 0.5]) yline(0,'Color', [0.5 0.5 0.5]) grid on % 修复拒绝区域着色:用逻辑索引筛选出x>=临界值的部分 grey = [127 127 127]./255; % 生成逻辑索引:找到x中所有大于等于临界值的位置 reject_idx = x >= critical_value; % 用逻辑索引获取对应的x和fdist片段 area(x(reject_idx), fdist(reject_idx), 'basevalue',0, 'FaceColor',grey); hold off % 可选:添加临界值标注,让图更清晰 text(critical_value, max(fdist)/2, ... ['Critical Value: ', num2str(critical_value)], ... 'HorizontalAlignment','right', 'VerticalAlignment','middle');
关键修复点解释
索引方式修正:
原来的x(critical_value:max(observations))是错误的,因为critical_value是一个数值(比如你的案例中大概是3.24),而数组索引要求是整数位置。我们改用x >= critical_value生成逻辑数组,筛选出所有属于拒绝域的x值和对应的F概率密度值。x范围调整:
原来用max(observations)作为x的上限是不合理的——F分布的取值范围是[0, +∞),和样本观测值的最大值无关。调整为critical_value + 3可以让拒绝区域的尾部显示更完整。可选优化:
添加了临界值的文本标注,让图表的可读性更强,你可以根据需要保留或删除这部分代码。
运行修改后的代码,就能看到临界值右侧的拒绝区域被灰色填充了。
内容的提问来源于stack exchange,提问作者Amanda_Sterling
相关产品推荐
相关产品推荐

