xop
概要
ツリーを使用してNLFit、ANOVAなどの操作を実行
コマンドラインでの使用法
詳細は下のサンプルセクションを参照してください。
Xファンクション実行オプション
スクリプトからXファンクションにアクセスする場合、追加のオプションスイッチについてのページを参照してください。
変数
表示 名
|
変数 名
|
I/O と データ型
|
デフォルト 値
|
説明
|
実行モード
|
execute
|
入力
int
|
init
|
操作ツリーの実行モードを指定します。
オプションリスト
- init:GUIツリーの初期化
- このメソッドは、ツリーを初期化するために使用します。
- update:GUIツリーの編集
- このメソッドは、ツリーを更新するために使用します。
- run:ツリーの出力
- このメソッドは、ツリーを出力するために使用します。
- report:レポートを作成
- このメソッドは、ツリーを出力してレポートを生成するために使用します。
- cleanup:操作オブジェクトのリセット
- このメソッドは、オペレーションオブジェクトをクリーンアップするために使用されます。
|
クラス名
|
classname
|
入力
string
|
<optional>
|
この変数はクラス名を指定します。
使用可能なクラス名は次のとおりです。
- DescStats: 列の統計
- DescStats_1: 行の統計
- NormalityTest: 正規性の検定
- ANOVAOneWay: 一元配置の分散分析
- ANOVATwoWay: 二元配置の分散分析
- ANOVAOneWayRM: 繰り返しのある一元配置分散分析
- ANOVATwoWayRM: 繰り返しのある二元配置分散分析
- FitLinear: 線形フィット
- FitPolynomial: 多項式フィット
- MR: 線形多重回帰
- FitNL: 非線形曲線フィット
- ROCCurve: ROC曲線
|
GUIツリー
|
iotrgui
|
入力/出力
TreeNode
|
<optional>
|
この変数は、入出力GUIツリーを指定します。操作クラスによって異なります。
ヒント
- レポートシートの再計算モードを切り替えるには
iotrgui.gui.autoupdate を使用します。
- ツリーの情報を確認するには、
iotrgui.= を使用します。
|
出力ツリー
|
otrresult
|
出力
TreeNode
|
<optional>
|
この変数は出力ツリーを指定します。操作クラスによって異なります。
|
ダイアログテーマ
|
theme
|
入力
string
|
<optional>
|
この変数はダイアログテーマを指定します。
|
基線のフィットが必要
|
baseline
|
入力
int
|
0
|
ベースラインをフィットするかどうか指定します。
|
説明
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; // 別の計算を実行する前にクリーンアップが必要
関連するXファンクション
|