ロジスティック回帰モデルは、説明変数とカテゴリ応答変数間の関連です。以下のサンプルでは、スクリプトウィンドウでR オブジェクト および RSオブジェクトを使用して、Origin2016\Samples\Statistics\LogRegData.dat のデータにロジスティック回帰を実行します。
最初にOriginのワークシートにデータを読み込み、Rデータフレームとしてデータを送ります。Rコマンドglmを使用してインポートされたデータにロジスティック回帰を実行し、最終的には、結果のために新しいOriginのワークシートを作成して、パラメータ、残差、aic、分散等を含む結果を和マリーシートに送ります。
// 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();
このサンプルを実行する前に、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();