Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext
為了在單樣本的學生t測試中獲取有效的結果,估算標準大小應變為多大(Estimating how large a sample size would have to become in order to give a significant Students-t test result with a single sample test)

假設為了檢測在你的測量中的偏倚(systematic errors),你使用一個單獨的樣本構造了一個學生t測試。假設結果是界限(borderline)。在這時,可能會有人去收集更多的數據,但更謹慎的做法是先知道「還要收集多少數據?」。類students_t_distribution的參數估計量(parameter estimators)可以回答這個問題。

這個部分基於例子程序students_t_single_sample.cpp 中的代碼,我們開始定義一個打印針對於不同的置信水平而估計的樣本大小的數值表的函數:

// 需要的頭文件:
#include <boost/math/distributions/students_t.hpp>
#include <iostream>
#include <iomanip>
// 為了簡化使用,將所有的名字都引入全局名字空間:
using namespace boost::math;
using namespace std;   

void single_sample_find_df(
   double M,          // M = true mean.
   double Sm,         // Sm = Sample Mean.
   double Sd)         // Sd = Sample Standard Deviation.
{

接下來我們定義一個顯著性水平表:

double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };

打印對於不同的置信水平所要求的樣本大小數值表,以打印表頭開始:

cout << "\n\n"
        "_______________________________________________________________\n"
        "Confidence       Estimated          Estimated\n"
        " Value (%)      Sample Size        Sample Size\n"
        "              (one sided test)    (two sided test)\n"
        "_______________________________________________________________\n";

現在是最重要的部分:要求的樣本大小。類students_t_distribution 有一個靜態成員函數 find_degrees_of_freedom 用於計算對於一個給定的置信水平所需要的樣本大小。

第一個參數是你想檢查到的均值之間的差值,這裡使用樣本均值差的絕對值以及真實均值。

然後是兩個概率值: alpha 和 beta。 Alpha 是當虛假設實際為真時而否決虛假設的最大可接受風險。 Beta 是當虛假設實際為假時而沒有否決虛假設的最大可接受風險值。同樣也請注意,對於一個雙側測試(two-sided test),alpha 值必須除以 2。

函數的最後一個參數是樣本的標準差。

在這個例子中,我們假定 alpha 和 beta 是相同的,並調用 函數find_degrees_of_freedom 兩次: 一次是使用alpha值進行的單側測試(one-sided test),另一次是使用 alpha/2 進行的雙側測試( two-sided test )。

   for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
   {
      // 置信水平:
      cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
      // calculate df for single sided test:
      double df = students_t::find_degrees_of_freedom(
         fabs(M - Sm), alpha[i], alpha[i], Sd);
      // 轉換為樣本大小:
      double size = ceil(df) + 1;
      // 打印大小:
      cout << fixed << setprecision(0) << setw(16) << right << size;
      // calculate df for two sided test:
      df = students_t::find_degrees_of_freedom(
         fabs(M - Sm), alpha[i]/2, alpha[i], Sd);
      // 轉換為樣本大小:
      size = ceil(df) + 1;
      // 打印大小:
      cout << fixed << setprecision(0) << setw(16) << right << size << endl;
   }
   cout << endl;
}

讓我們使用來自於P.K.Hou, O. W. Lau & M.C. Wong, Analyst (1983) vol. 108, p 64. and from Statistics for Analytical Chemistry, 3rd ed. (1994), pp 54-55 J. C. Miller and J. N. Miller, Ellis Horwood ISBN 0 13 0309907 的數據查看樣本輸出。The values result from the determination of mercury by cold-vapour atomic absorption.

僅進行了三次測量,學生t測試給出了一個邊界結果,因此這個例子將告訴我們需要收集多少個樣本:

_____________________________________________________________
Estimated sample sizes required for various confidence levels
_____________________________________________________________

True Mean                               =  38.90000
Sample Mean                             =  37.80000
Sample Standard Deviation               =  0.96437


_______________________________________________________________
Confidence       Estimated          Estimated
 Value (%)      Sample Size        Sample Size
              (one sided test)    (two sided test)
_______________________________________________________________
    50.000               2               3
    75.000               4               5
    90.000               8              10
    95.000              12              14
    99.000              21              23
    99.900              36              38
    99.990              51              54
    99.999              67              69

所以,在這種情況下,需要進行更多的測量,例如,對於95%的置信水平,對於一個雙側測試(two-sided test)需要進行14次測量。


PrevUpHomeNext