MATLAB中如何获取与温度差异矩阵同维度的t检验显著性网格点
解决MATLAB中t检验得到同维度显著性矩阵的问题
问题原因
你当前的temp_diff维度是152×231,MATLAB的ttest默认会对每一列(纬度维度,共231列)做单样本t检验,把每一列的152个值当作一组样本,因此输出的h是1×231的向量,而非每个网格点的独立结果。
要得到与原矩阵同维度的152×231显著性矩阵,核心是确保对每个网格点(经度×纬度)的样本序列单独做检验,需要调整数据维度并指定检验的维度。
两种解决方案
方案1:基于差异矩阵的单样本t检验(已计算模式差异)
假设你已经得到两个模式的差异序列,差异矩阵temp_diff的维度为n×152×231(n是样本数,比如时间步长/重复试验次数),每个网格点对应第1维的n个差异值:
% 对每个网格点的n个差异值做单样本t检验(检验均值是否显著≠0) [h, p] = ttest(temp_diff, 0, 'Alpha', 0.05, 'Dim', 1); % 将结果压缩为152×231的矩阵 h = squeeze(h);
'Dim',1指定在第1维(样本维)上做检验,每个网格点独立计算显著性Alpha=0.05对应95%显著性水平(你原代码用的0.01是99%,可按需调整)- 最终
h矩阵中,h(i,j)=1表示经度i、纬度j的网格点差异显著,0则不显著
方案2:基于原始模式数据的双样本t检验(保留原始数据)
如果你还保留着两个模式的原始数据(比如mode1和mode2,维度均为n×152×231),直接用ttest2做双样本t检验更准确:
% 检验两个模式在每个网格点的均值是否存在显著差异 [h, p] = ttest2(mode1, mode2, 'Alpha', 0.05, 'Dim', 1); h = squeeze(h);
这个方案不需要提前计算差异矩阵,直接对两组样本做检验,结果维度同样是152×231。
后续绘图使用
得到h矩阵后,你可以用它在contourf图上标记显著网格点,示例代码:
% 绘制温度差异的填充图(temp_diff_mean是152×231的差异均值矩阵) contourf(lon, lat, temp_diff_mean); hold on; % 提取并标记显著网格点(用黑色实心圆点) [lon_sig, lat_sig] = meshgrid(lon, lat); lon_sig = lon_sig(h == 1); lat_sig = lat_sig(h == 1); scatter(lon_sig, lat_sig, 10, 'k', 'filled'); hold off;
内容的提问来源于stack exchange,提问作者Ankan Sarkar
相关产品推荐
相关产品推荐

