ツリーを使用してNLFit、ANOVAなどの操作を実行
詳細は下のサンプルセクションを参照してください。
スクリプトからXファンクションにアクセスする場合、追加のオプションスイッチについてのページを参照してください。
表示 名 |
変数 名 |
I/O と データ型 |
デフォルト 値 |
説明 |
---|---|---|---|---|
実行モード | execute |
入力 int |
|
操作ツリーの実行モードを指定します。 オプションリスト
|
クラス名 | classname |
入力 string |
|
この変数はクラス名を指定します。 使用可能なクラス名は次のとおりです。
|
GUIツリー | iotrgui |
入力/出力 TreeNode |
|
この変数は、入出力GUIツリーを指定します。操作クラスによって異なります。 ヒント
|
出力ツリー | otrresult |
出力 TreeNode |
|
この変数は出力ツリーを指定します。操作クラスによって異なります。 |
ダイアログテーマ | theme |
入力 string |
|
この変数はダイアログテーマを指定します。 |
基線のフィットが必要 | baseline |
入力 int |
|
ベースラインをフィットするかどうか指定します。 |
NLFitやANOVAなどの解析は非常に複雑で、Origin Cの操作フレームワークと呼ばれるフレームワークによって実装されています。
このフレームワークは、Xファンクションフレームワークがまだ取り扱えないような複雑な処理を行うことができます。
一方で、オペレーションフレームワークは、Origin Cから呼ばれるクラスに基づいたこれらの操作を実行でき、これによりXファンクション(xop)がこれらのオペレーションクラスを実行するのに作成されます。
他の多くのXファンクションと同様に、xopはLabTalkで使用できるように設計されています。
その他の例: LabTalkを使用した統計 解析LabTalkスクリプトの例
例1:ワークシートから"線形フィット"を実行するxop
アクティブシートにあるA(X)B(Y)の線形フィットを実行し、レポートシートを生成します。
// 最初にデータをインポート filename$ = system.path.program$ + "Samples\Curve Fitting\Linear Fit.dat"; newbook; impASC filename$; // FitLinear クラスを使用してGUIツリー"lrGUI"を作成 tree lrGUI; xop execute:=init classname:=FitLinear iotrgui:=lrGUI; // GUI treeの入力データを指定 lrGUI.GUI.InputData.Range1.X$=Col(A); lrGUI.GUI.InputData.Range1.Y$=Col(B); // 切片を0.1に固定するなど、線形フィットの設定を行なう lrGUI.GUI.Fit.FixIntercept=1; lrGUI.GUI.Fit.FixInterceptAt=0.1; // 準備したGUIツリーのフィットレポートを作成 xop execute:=report iotrgui:=lrGUI; //フィット後操作オブジェクトをクリーンアップ xop execute:=cleanup;
例2:グラフから"線形回帰"を実行するxop
単一レイヤ内に複数データがプロットされたグラフで線形回帰を実行し、グラフ上にフィット線を作成します。
// 最初にデータをインポート filename$ = system.path.program$ + "Samples\Curve Fitting\Linear Fit.dat"; newbook; impASC filename$; //データでグラフを作成 range data = [<active>]1!(1, 2: wcol(wks.ncols)); plotxy data plot:=201 ogl:=<active>; // ソースデータを散布図として作図 //FitLinearクラスを使用してGUIツリー "lrGUI"を作成 tree lrGUI; // FitLinearクラスとGUIツリーを初期化 xop execute:=init classname:=FitLinear iotrgui:=lrGUI; //GUI treeの入力データに全てのデータプロットを指定 ii = 1; doc -e d //アクティブレイヤの全てのプロットでループ { %A = xof(%C); //XYデータセットを指定 lrGUI.GUI.InputData.Range$(ii).X$ = %A; lrGUI.GUI.InputData.Range$(ii).Y$ = %C; range rPlot = $(ii); //各データプロットのlabtalk範囲を定義 int uid = range2uid(rPlot); //範囲のuidを取得 lrGUI.GUI.InputData.Range$(ii).SetAttribute("PlotObjUID", $(uid)); //プロットのuidをセット ii = ii + 1; } // 線形フィットを実行して準備したGUIツリーのレポートを作成 xop execute:=report iotrgui:=lrGUI; // フィット後に線形フィット操作オブジェクトをクリーンアップ xop execute:=cleanup;
例3:"列の統計"を実行するxop
アクティブシート内のデータをグループ化して、記述統計を実行してレポートツリーを作成します。
// 新しいワークブックにデータをインポート filename$ = system.path.program$ + "Samples\Statistics\body.dat"; newbook; impASC filename$; // DescStatsクラスを使用してGUIツリー "statGUI"を作成 tree statGUI; xop execute:=init classname:=DescStats iotrgui:=statGUI; // GUI ツリーの入力データを作成 statGUI.GUI.InputData.Range1.X$=Col(height); // グループ化データを指定 statGUI.GUI.InputData.Range1.F$=Col(gender); // 列の統計の設定 // 例として、性別ごとの最高身長が誰かを知りたいとする statGUI.GUI.Quantities.quantiles.iMax=1; // 準備したGUIツリーのレポートを作成 xop execute:=run iotrgui:=statGUI otrresult:=statOut; //フィット後に操作オブジェクトをクリーンアップ xop execute:=cleanup; // 結果を確認するグループラベルを含むレポートツリーを表示 statout.list(0,1); // または、次の方法で結果とグループラベルを取得 statout.=; statout.Statistics.c1.GetLabel(1)$=; statout.Statistics.c2.GetLabel(1)$=;
例4:"一元配置の分散分析"を実行するxop
素データに対して一元配置分散分析を実行し、レポートシートを生成します。
/// 新しいワークブックにデータをインポートする filename$ = system.path.program$ + "Samples\Statistics\ANOVA\One-Way_ANOVA_raw.dat"; newbook; impASC filename$; // ANOVAOneWayクラスを使用してGUIツリー "onewayGUI"を作成 tree onewayGUI; xop execute:=init classname:=ANOVAOneWay iotrgui:=onewayGUI; // ツリーのデフォルトデータはインデックスデータ形式なのでGUIツリーは更新する必要がある //GUI ツリーから素データ形式のGUIツリーが必要 //LTの属性で、特別なノード".Use"でアクセスする必要がある onewayGUI.GUI.InputData.Use = 1; ////0 はインデックス、1 は素データ xop execute:=update iotrgui:=onewayGUI; // 更新されたGUIツリーの入力データを指定 onewayGUI.GUI.InputData.Data.Factor_0$=Col(A); onewayGUI.GUI.InputData.Data.Factor_1$=Col(B); onewayGUI.GUI.InputData.Data.Factor_2$=Col(C); // 準備したGUIツリーでOne-Way ANOVAレポートを作成 xop execute:=report iotrgui:=onewayGUI; //実行後に操作オブジェクトをクリーンアップ xop execute:=cleanup;
例5:"非線形曲線フィット"を実行するxop
アクティブシートのA(X)B(Y)C(Y)にNLSFのグローバルフィットを実行し、レポートシートを生成します。
///新しいブックにデータをインポート filename$ = system.path.program$ + "Samples\Curve Fitting\Gaussian.dat"; newbook; impASC filename$; //NLSFクラスを使用してGUIツリー"nlGUI"を作成 tree nlGUI; xop execute:=init classname:=FitNL iotrgui:=nlGUI; //関数と入力データを指定し、フィット前に操作ツリーを更新 nlGUI.GUI.FunctionSelection.FunctionList$="Gauss"; nlGUI.GUI.InputData.Range1.X$=Col(A); nlGUI.GUI.InputData.Range1.Y$=Col(B); nlGUI.GUI.InputData.Range2.X$=Col(A); nlGUI.GUI.InputData.Range2.Y$=Col(C); //グローバルフィットに設定 //LT属性で、特別なノード ".Use" でアクセスする必要がある nlGUI.GUI.InputData.Use=3; xop execute:=update iotrgui:=nlGUI; //デフォルトで表示されないFix and Dependencyを表示するパラメータ表を変更t nlGUI.GUI.Quantities.Parameters.Fix=1; nlGUI.GUI.Quantities.Parameters.Dependency=1; //両方のデータセットでy0を値0に固定 nlGUI.UserSettings.Parameters.Values.y0=0; nlGUI.UserSettings.Parameters.Fixed.y0=1; nlGUI.UserSettings.Parameters.Values.y0_2=0; nlGUI.UserSettings.Parameters.Fixed.y0_2=1; //wを共有 nlGUI.UserSettings.Parameters.Share.w=1; xop execute:=report iotrgui:=nlGUI; //フィット後に操作オブジェクトをクリーンアップ xop execute:=cleanup;
例6: "線形多重回帰"を実行するxop
アクティブシートに3つの独立変数と1つの従属変数を持つデータに重回帰を実行し、レポートシートを生成します。
// データをインポート filename$ = system.path.program$ + "Samples\Curve Fitting\Multiple Linear Regression.dat"; newbook; impASC filename$; // 重回帰クラスを使用してGUIツリー "mrGUI"を作成 tree mrGUI; xop execute:=init classname:=MR iotrgui:=mrGUI; // GUIツリーの入力データを指定 mrGUI.GUI.InputData.Range1.X$=col(A):col(C); mrGUI.GUI.InputData.Range1.Y$=col(D); // 全てのツリーノードを確認するため設定を指定 // この例では、実行後にコマンド "mrGUI.=" を使用 mrGUI.GUI.Quantities.Parameters.ConfInterval = 1; mrGUI.GUI.Quantities.Statistics.ReducedChiSq = 1; mrGUI.GUI.ResAnalysis.Stad = 1; mrGUI.GUI.Residuals.Graph3 = 1; mrGUI.GUI.Residuals.Graph4 = 1; mrGUI.GUI.Residuals.Graph5 = 1; mrGUI.GUI.Residuals.Graph6 = 1; mrGUI.GUI.Residuals.Graph7 = 1; // 準備したGUIツリーのレポートを作成 xop execute:=report iotrgui:=mrGUI; //操作オブジェクトをクリーンアップ xop execute:=cleanup;
例7: ROC曲線の正の状態値を設定するxop
newbook; fname$ = system.path.program$ + "Samples\Statistics\sodium.dat"; impasc fname$; xop execute:=init classname:=ROCCurve iotrgui:=rocGUI; //GUIツリーで入力データを指定 rocGUI.GUI.InputData.Range1.X$="1!col(B)"; // グループ化データを指定 rocGUI.GUI.InputData.Range1.F$="1!Col(A)"; /// StateValueは古い互換性の使用法であり、項目はスペースで区切る rocGUI.GUI.CompControl.StateValue$="RMSF"; StringArray stateList = {"RMSF"}; rocGUI.GUI.CompControl.StateList.SetStrArray(stateList); xop execute:=report iotrgui:=rocGUI;
例8: XOPを使用して行の統計を実行する場合に単位行の内容でグループ化
tree statGUI; xop execute:=init classname:=DescStats_1 iotrgui:=statGUI; statGUI.GUI.InputData.Range1.X$=col(1):col(4); //データ statGUI.GUI.InputData.Range1.F$="A[U]:D[U]"; //グループ化 statGUI.GUI.Output.Report.Book$ = ""; //新しい別のブックを作成するか "" をアクティブに設定する場合にのみ使用 statGUI.GUI.Output.Report.BookName$ = ""; // ブックロングネーム statGUI.GUI.Output.Report.Sheet$ = ""; //新しいシートを作成するか、""をアクティブに設定する場合にのみ使用 statGUI.GUI.Output.Report.SheetName$ = ""; //シートロングネーム xop execute:=Report iotrgui:=statGUI otrresult:=statOut; // Execute:=RUN (ツリーのみ取得) または REPORT (通常のレポートを取得)を使用 xop execute:=cleanup;// 別の計算を実行する前にクリーンアップが必要
例9:行列オブジェクトで"列の統計"を実行するxop
tree statGUI; xop execute:=init classname:=DescStats iotrgui:=statGUI; statGUI.GUI.InputData.Range1.X$=[MBook1]MSheet1!1:0; //全行列オブジェクト statGUI.GUI.Output.Report.Book$ = "Book1"; //デフォルト値を使用しない。デフォルトはソースブックに出力するが現在のソースブックは行列 statGUI.GUI.Output.FlatOut.Book$ = "<report>"; //同じブックにレポートシートを出力 xop execute:=report iotrgui:=statGUI; //レポートを取得 xop execute:=cleanup; // 別の計算を実行する前にクリーンアップが必要