第4章(3)Repeated Observations サンプルは対等・multiple量的変数 多標本1変数のパーミュテーションテストの例
- 4.5
- 複数の標本(n)があり、それらの違いはないものとできるとき、それぞれの標本に複数の観測(k)がなされて、n x k 行列状のデータが得られている。これについて、k変数は偏りがないことを示したいとする。具体的には、ある測定量について経時データをとりつつ、測定時が影響していないことを示したいときなど
- 順列は、である
- Friedman's Rankテストが統計量として知られている。
- 各サンプルのデータをサンプル内で順序づけし、nサンプルにわたって、各計測時において平均値をとりとする
- 各サンプルのデータをサンプル内で順序づけし、nサンプルにわたって、各計測時において平均値をとりとする
- 対応するPermutation 統計量を次の式で与える
- ただし、は全データの平均、は、それぞれ、サンプルごとの平均、変数ごとの平均。算出用のエクセルはこちら
- これらの一致はこの程度(掲載図、およびこちらの図)
- ソースはこちら
public class RepeatedData {public static void main(String[] args) {
//2D data
double[][] data ={
{320,278,236,222,232},
{478,513,415,359,292},
{921,701,645,526,458},
{213,230,261,253,199},
{273,338,323,332,222},
{392,302,289,305,172},
{469,443,292,235,233},
{422,389,359,331,185},
{613,649,626,588,636},
{395,318,298,269,328},
{462,400,360,247,284}
};
int numUnit = data.length;
int numVar = data[0].length;//No. categories
// 異なるdelta値での統計量を算出
int numseg = 1;
double[] delta = new double[numseg];
double initial=0;
double dif = -initial*2/(double)numseg;
for(int i=0;i<delta.length;i++){
delta[i] = initial+dif*i;
}
//double[] delta = {-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10};
//double[] delta = {0};
//for(int i=0;i<delta.length;i++){
//delta[i] /= 0.1;
//}
/*
int[] categoryNum = new int[data.length];
for(int i=0;i<categoryNum.length;i++){
categoryNum[i] = data[i].length;
}
double[] concat = concatMult(data);
*/
int c = 100000000;
int seed = (int)(Math.random()*c);
//int seed = 10000;
String mval ="";
String mval2 ="";
for(int w=0;w<delta.length;w++){
MersenneTwisterFast mt = new MersenneTwisterFast(seed);
double to = GoFTR(data);
double to2 = Friedman(data);
/*
double[] toTd = GoFTypT(data,group);
double to = toTd[0];
double to2 = toTd[1];
double to3 = GoFT(data,group);
double to4 = GoFT2(data, group);
double t2ADo = GoFT2AD(data,group);
double t2fADo = GoFT2fAD(data,group);
double tchio = Chisq(data,group);
*/
double DEV= 0.00000001;
int perm =100;
System.out.println("to to2 " + to + " " + to2);
double[] t = new double[perm];
double[] t2 = new double[perm];
//double[] t2AD = new double[perm];
//double[] t2fAD = new double[perm];
//double[] tchi = new double[perm];
for(int i=0;i<perm;i++){
for(int j=0;j<data.length;j++){
shuffleDoubleMZ(data[j],mt);
}
//shuffleDoubleMZ(data[0],mt);
t[i] = GoFTR(data);
t2[i] = Friedman(data);
/*
double[] tmpt = GoFTypT(data,group);
t[i] = tmpt[0];
t2[i] = tmpt[1];
double tmpt2 = GoFT(data,group);
double tmpt3 = GoFT2(data,group);
t2AD[i] = GoFT2AD(data,group);
t2fAD[i] = GoFT2fAD(data,group);
tchi[i] = Chisq(data,group);
*/
System.out.println("t\tmwt\t" + t[i] +"\t" + t2[i]);
}
// 度数分布・信頼区間など
int[] h=signPerm.hist(t,20);
double[][] hdouble = signPerm.histAccum(t,1000);
// 統計量の信頼区間を算出表示
double confA = 0.000001;
double[] confInterval = signPerm.confInterval(hdouble,confA);
System.out.println("confident interval\t" + confInterval[0] + "\t" + confInterval[1]);
// 度数分布を標準出力
// System.out.println(histSt);
System.out.println("Histogram\n