求和平均統計


單因素方差分析我大白話說就是求和平均統計,樣本與平均值進行各種對比得出的結論,如下:

在試驗中,把考察的指標稱為試驗指標,影響試驗指標的條件稱為因素。因素可分為兩類,一類是人為可控的測量數據,比如溫度、身高等;一類是不可控的隨機因素,例如,測量誤差,氣象條件等。因素所處的狀態稱為因素的水平。如果在試驗過程中,只有一個因素在改變,稱為單因素試驗。方差分析(Analysis of Variance,簡稱ANOVA)主要用於驗證兩組樣本,或者兩組以上的樣本均值是否有顯著性差異(是否一致)。

舉個例子,有三台機器用來生產規格相同的鋁合金薄板,試驗的指標是鋁合金薄板的厚度,機器是因素,不同的三台機器是因素的三個水平。試驗的目的是為了考察每台機器所生產的薄板的厚度是否有顯著的差異,即考察機器這一因素對薄板厚度有無顯著的影響,如果厚度有顯著差異,就表明機器對厚度的影響是顯著的。

一,單因素方差分析

對多個總體均值進行檢驗,需要用到方差分析方法,例如,某工廠有A、B、C三台軋制板材的設備,如果想知道這三台設備軋制板材的厚度是否一致,就可以轉化為檢驗來自三個總體的均值是否相同的問題。以上面所說軋制板材為例,檢驗A、B、C三台設備軋制的板材厚度是否一致,可以建立如下假設:

H0: μ1=μ2=…=μr;
H1: μ1,μ2,…,μr不全相等。

三個總體均值是否相等無從知道,但是可以通過樣本均值是否有顯著差異來檢驗總體均值是否相等。因為,如果H0為真時,則可以期望樣本均值很接近,如果樣本均值很接近,則推斷總體均值相等的證據很充分,就可以接受H0。否則,當樣本均值相距較遠,就認為總體均值相等的證據不充分,從而拒絕H0,接受H1。

樣本均值之間距離的所謂遠近是相對的,是通過假定的共同方差的兩個點估計值比較得出的。第一個點估計是組內方差,用各個樣本方差估計得到的,只與每個樣本內部的方差有關,反映各個水平內部隨機性的變動。第二個點估計值是組間方差,在H0為真的前提下,由均值抽樣平均誤差計算得到,這樣得到的方差包含兩部分的變動:一是各個水平內部的隨機性變動,二是各個水平之間的變動。將組間方差與組內方差相比,可以得到一個F統計量(F=組間方差/組內方差),可以證明該統計量服從F分布。

由推斷可知,如果三台設備軋制板材的厚度均值相差很小,即組間方差中的各個水平之間的變動很小,F比值會接近於1。反之,則F的比值會顯著地大於1,根據上面計算得到的F值,在顯著性水平α給定的情況下,就可以做出是否接受三台設備軋制板材厚度均值相等的假設。

二,單因素方差分析步驟

現在假定一個因素B具有c個水平的因變量進行方差分析檢驗,例如上面提到的工廠軋制設備是因素,分別試驗軋制了10塊板材是水平。

c為因變量的個數,如肥料配比不同的個數,nj為當前因素下最后一個實驗對象的編號,即改因素下的有幾個實驗對象,nt為實驗的總個數

1、建立假設
H0: μ1=μ2=…=μc;
H1: μ1,μ2,…,μc不全相等。

2、計算樣本均值和樣本方差

 3、計算組間方差

 

 4、組內方差的估計

 

5、構造F統計量進行檢驗
F=組間方差/組內方差=MSB/MSE~F(c-1, nT-1)
如果c個總體均值不相等,則組間方差(MSB)會大於組內方差(MSE)。當F值大到某一臨界值時,就可以拒絕H0。臨界值的大小由給定的α和自由度決定。所以,當給定顯著性水平為α時,F的拒絕域為F>Fα(c-1,nT-c)。

6、方差分析表

 

三,范例分析

例題:有8位食品專家對三種配方的食品隨機品嘗,然后給食品的口感分別打分(滿分10分),如下表。問三種配方的平均分數是否相同?(α=0.05)(假定打分服從標准相等的正態分布)。

 

解:設μA,μB,μC分別代表配方1、2、3。已知因變量是分數,因素是配方,水平為3,具有相同的樣本容量8。根據題意建立假設:
H0: μA=μB=μC;
H1: 總體均值不全相等。

首先,計算樣本均值及方差


其次,計算組間方差MSB

第三,計算組內方差MSE

第四,計算F統計量


最后,查表Fα(c-1,nT-c)= F0.05(2,21)=3.47。因為F=1.119<3.47= F0.05(2,21),落在接受域。所以接受H0,拒絕H1,即三種配方的口感分數沒有顯著的差異。

 

 

∑為求和符號,下標為開始位置的值,上標為結束位置的值,按照后面的公式進行累加,如

 

 表示:A因素下,從第一個實驗對象的值減去平均值的平方,一直加到最后一個實驗對象的值與平均值的差值平方,

Java代碼實現如下:

public static void main(String[] args) {

        double x = (8 + 4 + 5 + 6 + 7 + 8 + 6 + 5 + 6 + 2 + 7 + 5 + 3 + 7 + 4 + 6 + 5 + 7 + 6 + 3 + 4 + 7 + 5 + 5) / 24.00D;
        System.out.println("x均值:" + x);
        double x1 = (8 + 4 + 5 + 6 + 7 + 8 + 6 + 5) / 8.00D;
        System.out.println("x1均值:" + x1);
        double x2 = (6 + 2 + 7 + 5 + 3 + 7 + 4 + 6) / 8.00D;
        System.out.println("x2均值:" + x2);
        double x3 = (5 + 7 + 6 + 3 + 4 + 7 + 5 + 5) / 8.00D;
        System.out.println("x3均值:" + x3);

        double s1 = Math.sqrt(((6.125 - 8) * (6.125 - 8) + (6.125 - 4) * (6.125 - 4) + (6.125 - 5) * (6.125 - 5) + (6.125 - 6) * (6.125 - 6) + (6.125 - 7) * (6.125 - 7) + (6.125 - 8) * (6.125 - 8) + (6.125 - 6) * (6.125 - 6) + (6.125 - 5) * (6.125 - 5)) / 7.00D);
        System.out.println("s1方差:" + s1);
        double s2 = Math.sqrt(((5 - 6) * (5 - 6) + (5 - 2) * (5 - 2) + (5 - 7) * (5 - 7) + (5 - 5) * (5 - 5) + (5 - 3) * (5 - 3) + (5 - 7) * (5 - 7) + (5 - 4) * (5 - 4) + (5 - 6) * (5 - 6)) / 7.00D);
        System.out.println("s2方差:" + s2);
        double s3 = Math.sqrt(((5.25 - 5) * (5.25 - 5) + (5.25 - 7) * (5.25 - 7) + (5.25 - 6) * (5.25 - 6) + (5.25 - 3) * (5.25 - 3) + (5.25 - 4) * (5.25 - 4) + (5.25 - 7) * (5.25 - 7) + (5.25 - 5) * (5.25 - 5) + (5.25 - 5) * (5.25 - 5)) / 7.00D);
        System.out.println("s3方差:" + s3);

        double msb = (8 * (x1 - x) * (x1 - x) + 8 * (x2 - x) * (x2 - x) + 8 * (x3 - x) * (x3 - x)) / (3 - 1) * 1.00D;
        System.out.println("組間方差:" + msb);

        double mse = (((8 - x1) * (8 - x1) + (4 - x1) * (4 - x1) + (5 - x1) * (5 - x1) + (6 - x1) * (6 - x1) + (7 - x1) * (7 - x1) + (8 - x1) * (8 - x1) + (6 - x1) * (6 - x1) + (5 - x1) * (5 - x1)) + ((6 - x2) * (6 - x2) + (2 - x2) * (2 - x2) + (7 - x2) * (7 - x2) + (5 - x2) * (5 - x2) + (3 - x2) * (3 - x2) + (7 - x2) * (7 - x2) + (4 - x2) * (4 - x2) + (6 - x2) * (6 - x2)) + ((5 - x3) * (5 - x3) + (7 - x3) * (7 - x3) + (6 - x3) * (6 - x3) + (3 - x3) * (3 - x3) + (4 - x3) * (4 - x3) + (7 - x3) * (7 - x3) + (5 - x3) * (5 - x3) + (5 - x3) * (5 - x3))) / (24 - 3) * 1.00D;
        System.out.println("組內方差:" + mse);

        double f=msb/mse;
        System.out.println("F統計量:" + f);

    }

 

 參考:

https://www.cnblogs.com/ljhdo/p/10818526.html?ivk_sa=1024320u

 https://www.zhihu.com/question/61319844/answer/1206367601


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM