2016年1月20日水曜日

rJava : プログラミング(9) Bonferroni Test(多群(3群以上)分散分析)

Bartlett検定で等分散性が言えたので、Bonferroni検定を使って分散分析をしていきます。
Bonferroniを使う条件として
・各群の数:一致している
・分布:正規分布に従う
・分散:等分散性あり
ということで、各群の数が一致して、Bartlettが成立していれば大丈夫そうです。
参考:http://www.shiga-med.ac.jp/~koyama/stat/com-ph.html

段取りとしては、Bartlettの流れとほぼ同じで、得られたスタック配列をbonferroniを指定すればいいです。
[対応あり:Bonferroni]
REXP x1 = re.eval("pairwise.t.test(score, group, p.adjust.method='bonferroni',paired=TRUE)");

 結果は
のように出てくるので、4行4列の下三角部分に並べていきます。





$ vi JRITest12.java
$ javac JRITest12.java
$ java -Djava.library.path=/usr/lib64/R/library/rJava/jri/ JRITest12
[VECTOR ([STRING "paired t tests"], [STRING "score and group"], [REAL* (0.5201862426593824, 1.0, 1.7887801018064625E-7, NaN, 1.0, 4.551864014755463E-6, NaN, NaN, 2.258041561699781E-7)], [STRING "bonferroni"])]

[JRITest12.java] MySQLクラスは同じ


import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;
import java.sql.*;
import java.util.Arrays;

public class JRITest12 {

        public static void main(String[] args)
        {
                MySQL mysql = new MySQL();
                Rengine re = new Rengine( new String[]{"--no-save"}, false, null );
                ResultSet rs = mysql.selectOperations();

                int N = 272;
                double awareness [] = new double[N];
                double decision [] = new double[N];
                double communication [] = new double[N];
                double leadership [] = new double[N];
                int index = 0;
                try {
                        while(rs.next()){
                                awareness[index] = rs.getInt("awareness");
                                decision[index] = rs.getInt("decision");
                                communication[index] = rs.getInt("communication");
                                leadership[index] = rs.getInt("leadership");
                                index ++;
                        }
                } catch (SQLException e) {
                        e.printStackTrace();
                }
                //System.out.println(Arrays.toString(result));
                double score[] = new double[awareness.length*4];
                int index2 = 0;
                for(int i = 0 ; i< awareness.length; i++) score[index2++] = awareness[i];
                for(int i = 0 ; i< decision.length; i++) score[index2++] = decision[i];
                for(int i = 0 ; i< communication.length; i++) score[index2++] = communication[i];
                for(int i = 0 ; i< leadership.length; i++) score[index2++] = leadership[i];

                System.out.println(Arrays.toString(score));

                StringBuffer buf = new StringBuffer();
                buf.append("score<-c(");
                for(int i = 0; i < score.length; i++){
                        if(i == score.length -1)
                                buf.append(score[i]+")");
                        else
                                buf.append(score[i]+",");
                }
                String c_value = buf.toString();
                re.eval(c_value);

                REXP x = re.eval("summary(score)");
                System.out.println(x);
                double [] ary = x.asDoubleArray();
                for (int i = 0; i < ary.length; i++) {
                        System.out.println(ary[i]);
                }

                re.eval("group=factor(rep(c('awareness', 'decision', 'communication', 'leadership'), c(272, 272, 272, 272)))");
                REXP x1 = re.eval("pairwise.t.test(score, group, p.adjust.method='bonferroni',paired=TRUE)");
                System.out.println(x1);

                re.end();
        }
}



参考
http://monge.tec.fukuoka-u.ac.jp/r_analysis/test_t06_anova.html



0 件のコメント:

コメントを投稿