サンプル: LabTalkを使用したRでのロジスティック回帰の実行

ロジスティック回帰モデルは、説明変数とカテゴリ応答変数間の関連です。以下のサンプルでは、スクリプトウィンドウでR オブジェクト および RSオブジェクトを使用して、Origin2016\Samples\Statistics\LogRegData.dat のデータにロジスティック回帰を実行します。

最初にOriginのワークシートにデータを読み込み、Rデータフレームとしてデータを送ります。Rコマンドglmを使用してインポートされたデータにロジスティック回帰を実行し、最終的には、結果のために新しいOriginのワークシートを作成して、パラメータ、残差、aic、分散等を含む結果を和マリーシートに送ります。

R オブジェクト

// LabTalkでRオブジェクトを呼び出すサンプル
//run.section(testRex,LogisticRoex)
 
//サンプルデータをインポート
newbook;
string fn = system.path.program$ + "Samples\Statistics\LogRegData.dat"; 
impasc fname:=fn$ options.sparklines:=0;
 
//Rがインストールされているかチェック
if( R.Init()<0 )
{
	type -b "Please install R software first.";
	return;
}
 
//OriginにインポートしたデータをRデータフレーム変数 dfy として送る
//データフレーム dfy は次の4列を含む:Age, Salary, Gender and Career_Change
//Gender と Career_Change 列はカテゴリデータ
R.Send("!", dfy, 2);
 
//インポートしたデータにロジスティック回帰を実行
//結果はRのリスト変数 yr に格納
R.Exec( "yf<-glm( Career_Change ~ Age + Salary + Gender, family=binomial(logit), data=dfy)" );
R.Exec("yr<-summary(yf)");
 
//Rno結果を出力するために新しいワークブックを作成
newbook;
page.longname$ = "Logistic Regression Result";
 
//リストオブジェクトのRの係数行列をOriginのワークシートに送る
//ワークシートの1列目から開始
R.Receive("1", yr$coefficients);
 
int nc = wks.ncols;
wks.ncols = nc + 6;
 
//パラメータの指数値を計算
wcol( nc+1 )[L]$ = "Exp of Parameter";
wcol( nc+1 ) = exp( wcol(2) );
 
//計算された結果のラベルと列のロングネームをセット
wcol( nc+2 )[1]$ = "Residual";
 
wcol( nc+3 )[L]$ = "DF";
wcol( nc+4 )[L]$ = "Deviance";
wcol( nc+5 )[L]$ = "AIC";
wcol( nc+6 )[L]$ = "Dispersion Parameter for Binomial Family";
 
//Rno残差情報をOriginのワークシートに送る
double dfr, devr, aic, rlev;
//LabTalkのdouble型変数をRのリストオブジェクトの要素から取得
R.GetReal( dfr, yr$df.residual );
R.GetReal( devr, yr$deviance );
R.GetReal( aic, yr$aic );
R.GetReal( rlev, yr$dispersion );
 
//ワークシートセルをLabTalkのdouble 型変数でセット
wcol( nc+3 )[1] = dfr;
wcol( nc+4 )[1] = devr;
 
wcol( nc+5 )[1] = aic;
wcol( nc+6 )[1] = rlev;
 
//全てのR変数をクリア
R.Reset();

RS オブジェクト

このサンプルを実行する前に、R Serveの設定が必要です。

//LabTalkでRserveを呼び出すためのRSサンプル
//サンプルデータのインポート
newbook;
string fn = system.path.program$ + "Samples\Statistics\LogRegData.dat"; 
impasc fname:=fn$ options.sparklines:=0;
 
//Rserveに接続An Rserve should be set up first.
if( RS.Init( ***.***.***.***, 12306 )<0 ) //サーバ側のIPアドレスを入力
{
	type -b "Fail to connect R server.";
	return;
}
 
//OriginにインポートしたデータをRのデータフレーム変数 dfy に送る
//データフレーム dfy には次の列があります: Age, Salary, Gender and Career_Change
//Gender と Career_Change 列はカテゴリデータ
RS.Send("!", dfy, 2);
 
//インポートしたデータにロジスティック回帰を実行
//結果はRのリスト変数 yr に格納
RS.Exec( "yf<-glm( Career_Change ~ Age + Salary + Gender, family=binomial(logit), data=dfy)" );
RS.Exec("yr<-summary(yf)");
 
//Rno結果を出力するために新しいワークブックを作成
newbook;
page.longname$ = "Logistic Regression Result";
 
//リストオブジェクトのRの係数行列をOriginのワークシートに送る
//ワークシートの1列目から開始
RS.Receive("1", yr$coefficients);
 
int nc = wks.ncols;
wks.ncols = nc + 6;
 
//パラメータの指数値を計算
wcol( nc+1 )[L]$ = "Exp of Parameter";
wcol( nc+1 ) = exp( wcol(2) );
 
//計算された結果のラベルと列のロングネームをセット
wcol( nc+2 )[1]$ = "Residual";
 
wcol( nc+3 )[L]$ = "DF";
wcol( nc+4 )[L]$ = "Deviance";
wcol( nc+5 )[L]$ = "AIC";
wcol( nc+6 )[L]$ = "Dispersion Parameter for Binomial Family";
 
//Rno残差情報をOriginのワークシートに送る
double dfr, devr, aic, rlev;
//LabTalkのdouble型変数をRのリストオブジェクトの要素から取得
RS.GetReal( dfr, yr$df.residual );
RS.GetReal( devr, yr$deviance );
RS.GetReal( aic, yr$aic );
RS.GetReal( rlev, yr$dispersion );
 
//ワークシートセルをLabTalkのdouble 型変数でセット
wcol( nc+3 )[1] = dfr;
wcol( nc+4 )[1] = devr;
 
wcol( nc+5 )[1] = aic;
wcol( nc+6 )[1] = rlev;
 
//全てのR変数をクリア
RS.Reset();