2016年1月29日金曜日

総組み合わせ計算環境の構築

大量な計算をするための環境を作ってみます。 研究としてはあまり意味はないのですが、どの程度の計算をどの規模でできるかは今後のために限界を知っておく必要があります。 今回は総組み合わせ計算をして結果をデータベースに格納するまでやってみます。

[今回の環境]:
OS : CentOS6.7 64bit
仮想化ソフト : VMWare Fusion Mac版

1.CentOSの初期設定
CentOSのインストール
簡易インストールでやると何故か起動できない。通常インストールで実施。
途中のネットワーク設定で、eth0を自動起動にしておき、今回の場合は学内なので固定IPアドレス設定をする。VMWareの方もブリッジ接続にしておく。
インストール後
# yum update
# vi /etc/sysconfig/selinux
SELINUX=disabled
# service iptables stop
# chkconfig iptables off
# cgkconfig ip6tables off
# reboot
今後はsshでログインして作業をする(VMWare内だとロックが面倒)

2.各種サーバインストール
[Javaのインストール]
# yum install java-devel
# javac -version で確認

[LAMP環境]
# yum install httpd
# service httpd start
# chkconfig httpd on
# yum install php php-mbstring php-mysql
# service httpd restart
# yum install vsftpd
# service vsftpd start
# chkconfig vsftpd on
# yum install mysql-server
# service mysqld start
# chkconfig mysqld on
# yum install epel-release
# yum --enablerepo=epel  install phpMyAdmin
# vi /etc/httpd/conf.d/phpMyAdmin.conf
# vi /etc/phpMyAdmin/config.inc.php
# service httpd restart

3.アプリケーション設定
これにjavaプログラムをのせて動くように設定する。
得られたデータをダンプ取り、アップロード時に注意すること

2016年1月26日火曜日

LocalSolver(2) : データベースの連携

この概要は表示できません。投稿を閲覧するには ここをクリック してください。

rJava : プログラミング(11) Steel-Dwass法(non-parametoric, 等分散性制限無し)

まずBatlettで等分散性を検定、今回は帰無仮説が棄却され等分散性が成立しないので、Steel-Dwass法(non-parametoric, 等分散性制限無し)を利用した。

Rでやってみると
$ R
> source("http://aoki2.si.gunma-u.ac.jp/R/src/Steel-Dwass.R")
> data <- br="" c="">+ 0.1875, 1.3333333333333, 1.5384615384615, 1.9763313609467, 0.76748582230624, 1.6859504132231, 1.1142659279778, 1.1358024691358, 0.80555555555556, 3.2448979591837, 3.1675338189386, 3.1466836734694, 2.8512110726644, 2.0, 2.0826446280992,
+ 0.484375, 0.13888888888889, 2.2366863905325, 1.905325443787, 0.69187145557656, 1.6528925619835, 0.92243767313019, 1.1111111111111, 1.2222222222222, 3.1683673469388, 4.1727367325702, 5.0956632653061, 2.4636678200692, 1.7777777777778, 2.7272727272727,
+ 0.234375, 0.13888888888889, 1.6213017751479, 0.071005917159763, 0.5179584120983, 1.6461776859504, 0.82271468144044, 1.1358024691358, 1.3333333333333, 3.6734693877551, 4.1727367325702, 5.6772959183673, 3.4048442906574, 2.9876543209877, 2.9752066115702,
+ 0.0, 0.0, 1.5621301775148, 10.236686390533, 0.80151228733459, 1.5599173553719, 1.1004155124654, 1.7777777777778, 2.4722222222222, 4.9183673469388, 5.6357960457856, 6.6058673469388, 2.8512110726644, 3.1358024691358, 1.8842975206612)
> group <- 15="" br="" c="" rep="">> Steel.Dwass(data, group)
             t         p
1:2 0.02073903 0.9999968
1:3 0.02074365 0.9999968
1:4 0.70528407 0.8950434
2:3 0.18669284 0.9976931
2:4 0.66379678 0.9106851
3:4 0.64298158 0.9180231

となった。有意性は確認できない。rjavaでやると
$ vi JRITest13.java
$ javac JRITest13.java
$ java -Djava.library.path=/usr/lib64/R/library/rJava/jri/ JRITest13

[VECTOR ([REAL* (16.294575129341144)], [REAL* (3.0)], [REAL* (9.866990036363195E-4)], [STRING "score by group"], [STRING "Bartlett test of homogeneity of variances"])]
[REAL* (0.020739033894608506, 0.020743649235467825, 0.7052840740059061, 0.18669284311921042, 0.6637967755349704, 0.6429815765773006, 0.9999967966772032, 0.9999967945383197, 0.8950433896624197, 0.9976931476869926, 0.9106851171476555, 0.9180230907044584)]
となる。


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

public class JRITest13 {

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

                int N = 15;
                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.getDouble("s_awareness");
                                decision[index] = rs.getDouble("s_decision");
                                communication[index] = rs.getDouble("s_communication");
                                leadership[index] = rs.getDouble("s_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]);
                }

                //Bartlett Test
                re.eval("group=factor(rep(c('awareness', 'decision', 'communication', 'leadership'), c(15, 15, 15, 15)))");
                REXP x1 = re.eval("bartlett.test(score ~ group)");
                System.out.println(x1);

                //Steel.Dwass Test
                re.eval("source('http://aoki2.si.gunma-u.ac.jp/R/src/Steel-Dwass.R')");
                re.eval("group <- rep(1:4, c(15, 15, 15, 15))");
                REXP x2 = re.eval("Steel.Dwass(score,group)");
                System.out.println(x2);

                re.end();
        }
}


参考
http://www.shiga-med.ac.jp/~koyama/stat/com-ph.html
http://aoki2.si.gunma-u.ac.jp/R/Steel-Dwass.html

2016年1月24日日曜日

rJava : プログラミング(10) F Test(2群における等分散検定)

一人の手術者の評価の前半、後半で得点の差があるか検定するために、2群の得点が等分散かどうかF検定をやってみます。

F検定:対象37件
帰無仮説:2群間の分散に差がない(等分散である)
 今回の2つの群は
[39.0, 40.0, 39.0, 38.0, 38.0, 43.0, 48.0, 43.0, 41.0, 44.0, 35.0, 36.0, 37.0, 30.0, 46.0, 40.0, 44.0, 40.0]
[45.0, 36.0, 45.0, 38.0, 39.0, 45.0, 40.0, 44.0, 48.0, 45.0, 45.0, 46.0, 40.0, 44.0, 37.0, 45.0, 48.0, 44.0, 43.0]
となり、
一つ目のsummaryは、意味は(Min    最小値, 1st Qu    第一四分位数, Median    中央値, Mean    平均値, 3rd Qu    第三四分位数, Max    最大値)
(30.0, 38.0, 40.0, 40.06, 43.0, 48.0)
 2つ目は
(36.0, 40.0, 44.0, 43.0, 45.0, 48.0)
最小値も平均も高いので、後半の方が良さそうだけど、t検定をする予定。そのために等分散を検定しておく。

$ vi JRITest14.java
$ javac JRITest14.java
$ java -Djava.library.path=/usr/lib64/R/library/rJava/jri/ JRITest14

[VECTOR ([REAL* (1.4314578005115088)], [INT* (17, 18)], [REAL* (0.45734976337721367)], [REAL* (0.547029015180649, 3.7965176255066506)], [REAL* (1.4314578005115088)], [REAL* (1.0)], [STRING "two.sided"], [STRING "F test to compare two variances"], [STRING "c_group1 and c_group2"])]

p-value = 0.45734976337721367
なので帰無仮説が採択。よって等分散が言える。

[JRITest14.java]
今回のSQL文
String sql = "SELECT * FROM operations WHERE category = 0 AND evaluator <=15 and operator =6";


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

public class JRITest14 {

        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 = 37;
                double group1 [] = new double[N/2];
                double group2 [] = new double[N/2+1];//**注意i:奇数の時は+1**

                int index = 0;
                try {
                        while(rs.next()){
                                if(index < (int)(N/2)){
                                        group1[index] = rs.getDouble("value");
                                }else if(index >= (int)(N/2)){
                                        group2[index-(int)(N/2)] = rs.getDouble("value");
                                }
                                index ++;
                        }
                } catch (SQLException e) {
                        e.printStackTrace();
                }

                System.out.println(Arrays.toString(group1));
                System.out.println(Arrays.toString(group2));

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

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

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

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

                REXP x3 = re.eval("var.test(c_group1, c_group2)");
                System.out.println(x3);
                re.end();
        }
}


参考
http://kusuri-jouhou.com/statistics/fkentei.html
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/65.html
http://monge.tec.fukuoka-u.ac.jp/r_analysis/test_t03.html