
1. 項目概述假設檢驗在數模實戰中的核心地位假設檢驗聽起來是個挺學術的詞但在數學建模和數據分析的實戰里它就是你手里那把最鋒利的“手術刀”。無論是驗證一個新藥是否有效還是判斷一個營銷策略有沒有提升銷量或者像我之前處理的一個工業傳感器數據異常檢測項目本質上都是在回答一個問題我觀察到的這個現象是偶然發生的還是真的有規律可循MATLAB作為工程和科研領域的“瑞士軍刀”它提供的假設檢驗工具箱就是把復雜的統計理論封裝成了一個個直觀易用的函數讓我們能把精力集中在問題本身而不是繁瑣的公式推導和臨界值查表上。很多剛接觸數模的朋友容易陷入一個誤區拿到數據就急著跑回歸、做預測卻忽略了最基礎的“數據診斷”步驟。這就好比醫生沒做檢查就直接開藥風險很大。假設檢驗就是這個“診斷”過程的核心。它幫你判斷樣本是否能代表總體、兩個方案是否有顯著差異、數據是否符合某種分布。這些結論直接決定了你后續選擇什么樣的模型以及你對模型結果的信心有多大。這次我們就拋開教科書式的理論堆砌直接切入MATLAB的實戰環境看看如何把ttest、ttest2、vartest、chi2gof這些函數用活、用透解決真實問題。2. 假設檢驗的核心思想與MATLAB實現邏輯2.1 從“無罪推定”理解假設檢驗的基本框架假設檢驗的邏輯其實和司法上的“無罪推定”非常像。我們首先建立一個“原假設”H0通常代表一種保守的、傳統的、或沒有發生改變的狀態比如“新藥無效”、“兩組數據均值無差異”。這個原假設就像被告一開始我們假定它是“無罪”的。而“備擇假設”H1則是我們想要證明的、可能的新發現比如“新藥有效”、“兩組數據均值不同”。我們的角色就是“檢察官”通過手中的證據樣本數據來判斷是否要拒絕“無罪”的原假設。這里的關鍵是我們永遠無法“證明”原假設為真只能判斷是否有足夠強的證據去“拒絕”它。這個判斷標準就是顯著性水平α通常設為0.05或0.01。你可以把它理解為誤判“無罪”為“有罪”的最大容忍概率即第一類錯誤。在MATLAB里幾乎所有假設檢驗函數的輸出都會包含一個核心指標p值。p值的含義是在原假設成立的前提下出現當前樣本情況或更極端情況的概率。如果這個概率p值非常小小于我們設定的α小到我們認為“在原假設下發生這種事情幾乎不可能”那么我們就拒絕原假設接受備擇假設。MATLAB幫我們自動完成了計算p值并與α比較的過程我們直接看結果就行。2.2 MATLAB假設檢驗函數族概覽與選型指南MATLAB的統計與機器學習工具箱提供了豐富的假設檢驗函數根據檢驗目標可以分成幾大類單樣本檢驗判斷單個樣本的統計量如均值是否等于某個特定值。ttest單樣本t檢驗用于檢驗樣本均值。當你想知道一批零件的平均尺寸是否達標等于某個標準值時就用它。vartest單樣本方差檢驗卡方檢驗用于檢驗樣本方差。chi2gof卡方擬合優度檢驗用于檢驗樣本是否來自某個特定分布。雙樣本檢驗比較兩個獨立樣本或配對樣本的統計量。ttest2雙樣本t檢驗獨立樣本用于檢驗兩個獨立樣本的均值是否相等。比如比較A/B測試中兩個用戶組的平均停留時間。vartest2雙樣本方差檢驗F檢驗用于檢驗兩個獨立樣本的方差是否相等。這是進行ttest2前常做的步驟因為方差是否齊性會影響t檢驗的具體計算方法。ttest配對樣本t檢驗。注意MATLAB中用同一個ttest函數做單樣本和配對樣本檢驗區別在于輸入。配對檢驗輸入的是兩組數據的差值。分布檢驗檢驗數據是否服從某種分布。kstestKolmogorov-Smirnov檢驗檢驗樣本是否服從指定連續分布。lillietestLilliefors檢驗專門用于檢驗正態性。jbtestJarque-Bera檢驗也是檢驗正態性基于樣本的偏度和峰度。非參數檢驗當數據不滿足參數檢驗如t檢驗要求正態性的前提假設時使用。ranksumWilcoxon秩和檢驗Mann-Whitney U檢驗用于比較兩個獨立樣本的中位數。signrankWilcoxon符號秩檢驗用于配對樣本的中位數比較。kruskalwallisKruskal-Wallis檢驗用于比較三個及以上獨立樣本的中位數單因素非參數方差分析。選型核心心法拿到數據后別急著跑檢驗。先畫圖histogram,boxplot直觀感受數據分布和異常值然后根據你的科學問題是比均值還是比分布是單樣本還是雙樣本和數據的實際情況是否正態是否獨立來選擇最合適的檢驗方法。選錯了檢驗結論可能南轅北轍。3. 核心實戰案例精講從數據到結論的完整流程3.1 案例一A/B測試效果評估——獨立雙樣本t檢驗 (ttest2)場景你負責一個電商網站的首頁改版。舊版頁面A組有1000名用戶的點擊率數據新版頁面B組也有1000名用戶的點擊率數據。老板問新版頁面真的比舊版更能吸引用戶點擊嗎步驟拆解與MATLAB實操數據準備與可視化% 假設數據已加載到變量 click_rate_A 和 click_rate_B 中 % 首先進行描述性統計和可視化建立直觀認識 figure; subplot(1,2,1); histogram(click_rate_A, Normalization, pdf); hold on; histogram(click_rate_B, Normalization, pdf); legend(A組舊版, B組新版); xlabel(點擊率); ylabel(概率密度); title(數據分布直方圖); subplot(1,2,2); boxplot([click_rate_A, click_rate_B], Labels, {A組, B組}); ylabel(點擊率); title(數據箱線圖查看異常值和中位數);這個步驟至關重要。直方圖幫你初步判斷數據是否近似正態t檢驗的前提之一箱線圖幫你發現異常值。如果數據嚴重偏態或存在極端異常值可能需要考慮數據轉換或使用非參數檢驗。前提條件檢驗方差齊性檢驗 (vartest2) t檢驗有兩種形式假設兩總體方差相等的“合并方差t檢驗”和方差不等的“Welchs t檢驗”。我們先檢驗方差是否齊性。[h_var, p_var] vartest2(click_rate_A, click_rate_B); fprintf(方差齊性檢驗結果h %d, p %.4f\n, h_var, p_var); if h_var 0 fprintf(在0.05顯著性水平下無法拒絕“方差相等”的原假設。\n); var_type equal; % 后續ttest2使用合并方差 else fprintf(在0.05顯著性水平下拒絕“方差相等”的原假設認為方差不齊。\n); var_type unequal; % 后續ttest2使用Welch校正 endh1表示拒絕原假設方差不齊h0表示不拒絕方差齊性。這里我們根據p_var是否小于0.05來做判斷。執行獨立雙樣本t檢驗 (ttest2)alpha 0.05; % 設定顯著性水平 [h, p, ci, stats] ttest2(click_rate_B, click_rate_A, ... % 注意順序B-A因為我們想檢驗B是否大于A Alpha, alpha, ... Vartype, var_type, ... % 使用上一步判斷的方差類型 Tail, right); % ‘right’表示備擇假設是B組的均值大于A組 fprintf(\n--- 雙樣本t檢驗結果 ---\n); fprintf(假設新版(B)均值 舊版(A)均值\n); fprintf(檢驗結果 h %d (1表示拒絕原假設即新版更好)\n, h); fprintf(p值 %.6f\n, p); fprintf(均值差的95%%置信區間: [%.4f, %.4f]\n, ci(1), ci(2)); fprintf(t統計量 %.4f, 自由度 %.2f\n, stats.tstat, stats.df);參數詳解Tail, right指定了單側檢驗。因為我們只關心新版是否“優于”舊版而不是“是否不同”。如果只是想知道有無差異則用both默認值。ci輸出的是均值差B-A的置信區間。如果整個區間都大于0也支持BA的結論。stats結構體包含了計算細節如t統計量和自由度可用于更深入的分析或報告。結果解讀與報告如果h 1且p 0.05我們可以得出結論“在0.05的顯著性水平下有充分的統計證據表明新版頁面B組的平均點擊率顯著高于舊版頁面A組。”同時報告效應量如Cohen‘s d會讓結論更有力。MATLAB沒有內置函數但可以輕松計算% 計算Cohen‘s d (效應量) mean_diff mean(click_rate_B) - mean(click_rate_A); if strcmp(var_type, equal) pooled_std sqrt(((numel(click_rate_A)-1)*var(click_rate_A) (numel(click_rate_B)-1)*var(click_rate_B)) / (numel(click_rate_A)numel(click_rate_B)-2)); else % 對于方差不齊的情況使用Glass‘s Δ或其它方法更合適這里簡化處理 pooled_std sqrt((var(click_rate_A) var(click_rate_B))/2); end cohens_d mean_diff / pooled_std; fprintf(效應量 (Cohen‘s d) %.3f\n, cohens_d);效應量可以量化差異的大小避免僅依賴p值它受樣本量影響很大。實操心得在實際的A/B測試中樣本量通常很大很容易得到顯著的p值即使差異非常小。因此一定要結合置信區間和效應量來解讀。一個統計顯著但效應量極小如d0.2的差異可能不具備商業上的實際意義。另外確保兩組用戶是隨機分配的這是獨立t檢驗有效的前提。3.2 案例二生產工藝改進驗證——配對樣本t檢驗 (ttest)場景工廠對某條生產線進行了工藝優化。為了驗證優化效果記錄了同一批10臺設備在優化前和優化后的日產量。數據是配對的同一臺設備前后對比此時應使用配對t檢驗。步驟拆解與MATLAB實操計算差值配對檢驗的核心是檢驗差值的均值是否為0。% 數據production_before, production_after difference production_after - production_before; % 計算每臺設備的產量提升值 % 可視化差值 figure; subplot(1,2,1); plot([zeros(10,1), ones(10,1)], [production_before, production_after], -o); xlabel(階段 (0:優化前, 1:優化后)); ylabel(日產量); title(各設備優化前后產量連線圖); xticks([0 1]); xticklabels({優化前,優化后}); subplot(1,2,2); histogram(difference); xlabel(產量差值 (優化后 - 優化前)); ylabel(頻數); title(產量差值的分布); % 在圖上添加差值均值的參考線 hold on; yl ylim; line([mean(difference), mean(difference)], yl, Color, r, LineStyle, --); text(mean(difference), yl(2)*0.9, sprintf(均值%.2f, mean(difference)), Color, r);連線圖可以清晰看到每臺設備的變化趨勢直方圖看差值分布。執行配對樣本t檢驗在MATLAB中配對t檢驗通過ttest函數對差值進行單樣本t檢驗來實現原假設是“差值的均值為0”。[h, p, ci, stats] ttest(difference, 0, Alpha, 0.05, Tail, right); % 檢驗差值是否顯著大于0 fprintf(\n--- 配對樣本t檢驗結果 ---\n); fprintf(假設優化后產量 優化前產量 (即差值0)\n); fprintf(h %d, p %.5f\n, h, p); fprintf(差值均值的95%%置信區間: [%.3f, %.3f]\n, ci(1), ci(2)); fprintf(平均提升量: %.2f ± %.2f (置信區間半寬)\n, mean(difference), (ci(2)-ci(1))/2);這里ttest的第二個參數是0表示檢驗差值均值是否與0有顯著差異。‘Tail’, ‘right’表示我們只關心產量是否提升。注意事項配對t檢驗的前提是差值近似服從正態分布。對于小樣本如n30這個前提很重要。可以用lillietest(difference)來檢驗差值的正態性。如果不滿足應考慮使用非參數檢驗signrank(production_before, production_after)。3.3 案例三數據正態性檢驗——模型選擇的基石 (lillietest/jbtest)場景你拿到了一組關于城市日用電量的數據打算建立預測模型。許多經典模型如線性回歸、ARIMA要求殘差服從正態分布。在建模前你需要先檢驗原始數據或模型殘差是否正態。步驟拆解與MATLAB實操可視化判斷QQ圖QQ圖是最直觀的正態性檢查工具。% 假設數據為 electricity_load figure; subplot(1,2,1); histogram(electricity_load, Normalization, pdf); hold on; x_values linspace(min(electricity_load), max(electricity_load), 100); plot(x_values, normpdf(x_values, mean(electricity_load), std(electricity_load)), r-, LineWidth, 2); legend(數據分布, 擬合的正態分布); title(直方圖與正態分布擬合); subplot(1,2,2); qqplot(electricity_load); % 繪制QQ圖 title(正態QQ圖);如果數據點大致分布在QQ圖的紅色參考線附近則表明服從正態分布。直方圖與正態曲線的對比也能提供參考。統計檢驗QQ圖有一定主觀性需要用統計檢驗定量判斷。對于中小樣本Lilliefors檢驗改進的K-S檢驗是常用選擇。[h_lillie, p_lillie] lillietest(electricity_load); fprintf(Lilliefors正態性檢驗: h %d, p %.4f\n, h_lillie, p_lillie); % 也可以使用Jarque-Bera檢驗基于偏度和峰度尤其適用于大樣本 [h_jb, p_jb] jbtest(electricity_load); fprintf(Jarque-Bera正態性檢驗: h %d, p %.4f\n, h_jb, p_jb);h 1表示拒絕“數據來自正態分布”的原假設。通常如果p 0.05我們沒有足夠證據拒絕正態性假設但不等于證明它就是正態的。如果p 0.05則數據顯著偏離正態。后續決策如果檢驗拒絕正態性可以考慮對數據進行變換如對數變換log(x)、Box-Cox變換。% 嘗試對數變換 if h_lillie 1 elec_log log(electricity_load - min(electricity_load) 1); % 避免非正值 [h_log, p_log] lillietest(elec_log); fprintf(對數變換后Lilliefors檢驗: h %d, p %.4f\n, h_log, p_log); end或者直接選擇對分布沒有嚴格要求的模型如決策樹、支持向量機使用特定核函數后或非參數方法。核心心法正態性檢驗的原假設是“數據服從正態分布”。因此p 0.05意味著“數據與正態分布沒有顯著差異”我們可以暫時接受正態性假設用于后續參數檢驗。但這并非“證明”尤其是在樣本量很大時微小的偏離也會導致p值很小而被拒絕。此時應結合QQ圖和實際問題的容忍度來綜合判斷。4. 進階應用與常見陷阱深度剖析4.1 多重比較問題與校正方法陷阱場景你測試了10種不同的廣告文案分別與對照組進行t檢驗。在α0.05水平下即使所有文案都無效你仍有約40%的概率1 - (1-0.05)^10至少得到一個“顯著”的假陽性結果。這就是多重比較問題。MATLAB解決方案multcompare函數。它通常與方差分析ANOVA的結果一起使用但思想適用于需要多次兩兩比較的場景。% 假設有5種工藝group每種工藝有若干產量數據data % 首先進行單因素方差分析 [p, tbl, stats] anova1(data, group, off); % ‘off’不顯示圖形 if p 0.05 fprintf(ANOVA結果顯示組間存在顯著差異(p%.4f)。\n, p); % 進行事后多重比較如Tukey‘s HSD方法 figure; [c, m, h, nms] multcompare(stats, Alpha, 0.05, CType, tukey-kramer); title(多重比較結果Tukey-Kramer法); endmultcompare輸出的交互圖會顯示哪些組之間的差異是顯著的置信區間不包含0。它自動對p值或置信區間進行了校正控制了整體第一類錯誤率。簡易手動校正Bonferroni法如果只是進行k次獨立的檢驗可以將顯著性水平調整為 α/k。例如做10次兩兩t檢驗每次的α應設為0.005。alpha_family 0.05; % 整體錯誤率 k 10; % 比較次數 alpha_corrected alpha_family / k; % Bonferroni校正后的閾值 % 然后使用 alpha_corrected 作為你每次 ttest2 的 ‘Alpha’ 參數Bonferroni法非常保守可能會增加第二類錯誤漏報。在探索性數據分析中可酌情使用但在嚴謹的證實性分析中應使用更優的校正方法如Holm-Bonferroni, FDR。4.2 效應量超越“是否顯著”關注“差異多大”p值只能告訴你差異是否不太可能由偶然產生但無法告訴你差異有多大。一個在超大樣本下統計顯著但效應量極小的差異可能沒有實際意義。常用效應量計算Cohen‘s d針對t檢驗如上文案例所示d (均值差) / 合并標準差。通常|d|≈0.2為小效應0.5為中等效應0.8為大效應。η2 或 ω2針對方差分析ANOVA表示自變量解釋的因變量方差比例。MATLAB的anova1輸出表格中就包含平方和SS可以計算。% 從 anova1 的輸出表 tbl 中獲取信息 SS_group tbl{2,2}; % 組間平方和 SS_total tbl{4,2}; % 總平方和 eta_squared SS_group / SS_total; % η2 fprintf(效應量 η2 %.3f (%.1f%%的方差可由組別解釋)\n, eta_squared, eta_squared*100);報告建議在報告假設檢驗結果時應同時給出p值、置信區間和效應量。例如“新版頁面點擊率顯著高于舊版 (t(1998) 3.45, p .001, 95% CI [0.01, 0.03], Cohen‘s d 0.15)。” 盡管d0.15是小效應但結合業務背景點擊率提升絕對值才能判斷其價值。4.3 統計功效與樣本量規劃陷阱如果樣本量太小即使存在真實的差異檢驗也可能沒有足夠的“功力”功效檢測出來導致第二類錯誤漏報。統計功效當備擇假設為真時正確拒絕原假設的概率。通常希望功效達到80%以上。MATLAB實現需要統計與機器學習工具箱% 示例規劃一個雙樣本t檢驗的樣本量 % 已知預期效應量 d 0.5 (中等效應)顯著性水平 alpha 0.05期望功效 power 0.8 d 0.5; alpha 0.05; power 0.8; n sampsizepwr(t2, [0 1], d, power, [], Alpha, alpha); % ‘t2’表示雙樣本t檢驗 fprintf(要達到功效80%% (效應量d0.5, alpha0.05)每組至少需要 %.0f 個樣本。\n, ceil(n));sampsizepwr函數也可以在已知樣本量時反推功效幫助你在實驗前評估設計是否合理或在實驗后解釋不顯著的結果是否可能因樣本不足導致。5. 常見問題排查與MATLAB調試技巧實錄5.1 錯誤提示與解決方案速查表錯誤提示/現象可能原因解決方案Error using ttest2. X and Y must have the same number of columns.輸入的數據維度不匹配。ttest2要求X和Y是向量或列數相同的矩陣按列比較。檢查size(X)和size(Y)。確保都是列向量如X(:)或具有相同列數的矩陣。p值返回為NaN數據可能全為相同的值導致標準差為0。檢查數據std(X)和std(Y)。如果標準差為0則t值計算時分母為0檢驗無意義。需要檢查數據采集或預處理過程。檢驗結果(h)與直觀感受相反1. 搞錯了檢驗方向‘Tail’參數。2. 輸入數據的順序錯了。例如ttest2(A,B,‘Tail’,‘right’)檢驗的是A均值B均值。1. 明確你的科學假設選擇正確的‘Tail’‘both‘, ‘right‘, ‘left‘。2. 仔細核對函數輸入參數的順序。方差齊性檢驗(vartest2)不通過但ttest2用‘equal’和‘unequal’結果差異巨大方差不齊對t檢驗結果影響很大尤其是樣本量不等時。堅持使用vartest2的結果指導ttest2中‘Vartype’的選擇。當方差不齊且樣本量較小時Welch‘s t檢驗‘unequal’更穩健。報告結果時應注明使用了校正。正態性檢驗(lillietest)總是拒絕即使QQ圖看起來還行樣本量很大時檢驗對偏離正態非常敏感微小的偏離也會導致p值很小。不要完全依賴檢驗。結合QQ圖、直方圖綜合判斷。對于大樣本中心極限定理保證了均值近似正態t檢驗仍有較好的穩健性。可以考慮使用非參數檢驗作為穩健性檢查。multcompare函數報錯或圖形不顯示沒有正確輸入來自方差分析函數如anova1,anovan的stats結構體。確保multcompare(stats)中的stats變量是由anova1等函數輸出的第四個返回值。并且先運行anova1得到顯著的p值后再進行事后比較。5.2 數據預處理與檢驗前提核查清單在運行任何假設檢驗前請按此清單核查獨立性數據點是否相互獨立這是大多數檢驗的隱含前提。時間序列數據、重復測量數據通常不獨立。隨機性樣本是否是隨機抽取或隨機分配的這關系到結論能否推廣到總體。離群值處理使用boxplot或isoutlier函數檢查離群值。離群值可能對方差和均值產生巨大影響。需要根據領域知識決定是剔除、修正還是保留。正態性針對參數檢驗對于小樣本的t檢驗檢查數據或差值的正態性QQ圖、lillietest。對于大樣本每組30t檢驗對正態性偏離相對穩健。方差齊性針對獨立雙樣本t檢驗使用vartest2或vartestn多組進行檢驗。樣本量平衡對于ttest2盡量保證兩組樣本量相近以最大化檢驗功效。5.3 一個完整的調試實例工業質檢數據差異分析假設你有兩組來自不同供應商的零件尺寸數據supplier_A和supplier_B需要檢驗其均值是否有差異。%% 步驟1加載并初步觀察數據 load(supplier_data.mat); % 假設數據已保存 fprintf(A供應商樣本數%d B供應商樣本數%d\n, length(supplier_A), length(supplier_B)); figure; subplot(2,2,1); boxplot([supplier_A, supplier_B], Labels, {A, B}); ylabel(零件尺寸 (mm)); title(箱線圖 - 查看分布與異常值); subplot(2,2,2); histogram(supplier_A, Normalization, pdf, FaceAlpha, 0.5); hold on; histogram(supplier_B, Normalization, pdf, FaceAlpha, 0.5); legend(A, B); title(分布直方圖); %% 步驟2處理離群值基于業務知識這里假設使用3σ原則 mean_A mean(supplier_A); std_A std(supplier_A); mean_B mean(supplier_B); std_B std(supplier_B); outlier_idx_A abs(supplier_A - mean_A) 3 * std_A; outlier_idx_B abs(supplier_B - mean_B) 3 * std_B; supplier_A_clean supplier_A(~outlier_idx_A); supplier_B_clean supplier_B(~outlier_idx_B); fprintf(移除離群值后A組 %d - %d, B組 %d - %d\n, ... length(supplier_A), length(supplier_A_clean), ... length(supplier_B), length(supplier_B_clean)); %% 步驟3正態性檢驗對清理后的數據 [h_A, p_A] lillietest(supplier_A_clean); [h_B, p_B] lillietest(supplier_B_clean); fprintf(A組正態性檢驗: h%d, p%.3f\n, h_A, p_A); fprintf(B組正態性檢驗: h%d, p%.3f\n, h_B, p_B); % 如果p值較小繪制QQ圖輔助判斷 if h_A 1 || h_B 1 subplot(2,2,3); qqplot(supplier_A_clean); title(A組數據QQ圖); subplot(2,2,4); qqplot(supplier_B_clean); title(B組數據QQ圖); end %% 步驟4方差齊性檢驗 [h_var, p_var] vartest2(supplier_A_clean, supplier_B_clean); fprintf(\n方差齊性檢驗: h%d, p%.3f\n, h_var, p_var); if h_var 0 var_type equal; fprintf(采用合并方差t檢驗。\n); else var_type unequal; fprintf(采用Welch‘s t檢驗方差不齊。\n); end %% 步驟5執行雙樣本t檢驗 alpha 0.05; [h, p, ci, stats] ttest2(supplier_A_clean, supplier_B_clean, ... Alpha, alpha, ... Vartype, var_type, ... Tail, both); % 檢驗是否有差異不分方向 fprintf(\n 最終檢驗結果 \n); if h 1 fprintf(在α%.2f水平下拒絕原假設。認為兩家供應商的零件尺寸存在顯著差異。\n, alpha); else fprintf(在α%.2f水平下沒有足夠證據拒絕原假設。無法認為兩家供應商的零件尺寸有顯著差異。\n, alpha); end fprintf(p值 %.4f\n, p); fprintf(均值差 (A-B) 的%d%%置信區間: [%.4f, %.4f]\n, (1-alpha)*100, ci(1), ci(2)); fprintf(A組均值: %.3f, B組均值: %.3f\n, mean(supplier_A_clean), mean(supplier_B_clean)); %% 步驟6計算效應量 pooled_std sqrt(((length(supplier_A_clean)-1)*var(supplier_A_clean) ... (length(supplier_B_clean)-1)*var(supplier_B_clean)) / ... (length(supplier_A_clean)length(supplier_B_clean)-2)); cohens_d (mean(supplier_A_clean) - mean(supplier_B_clean)) / pooled_std; fprintf(效應量 (Cohen‘s d) %.3f\n, cohens_d);這個腳本展示了一個從數據加載、可視化、預處理、前提檢驗到最終推斷和效應量計算的完整、穩健的分析流程。在實際項目中將這個過程模塊化、函數化能極大提升分析效率和可靠性。