You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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');

关键修复点解释

  1. 索引方式修正:
    原来的x(critical_value:max(observations))是错误的,因为critical_value是一个数值(比如你的案例中大概是3.24),而数组索引要求是整数位置。我们改用x >= critical_value生成逻辑数组,筛选出所有属于拒绝域的x值和对应的F概率密度值。

  2. x范围调整:
    原来用max(observations)作为x的上限是不合理的——F分布的取值范围是[0, +∞),和样本观测值的最大值无关。调整为critical_value + 3可以让拒绝区域的尾部显示更完整。

  3. 可选优化:
    添加了临界值的文本标注,让图表的可读性更强,你可以根据需要保留或删除这部分代码。

运行修改后的代码,就能看到临界值右侧的拒绝区域被灰色填充了。

内容的提问来源于stack exchange,提问作者Amanda_Sterling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:37:44