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 件のコメント:
コメントを投稿