<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私は既存のプラットフォームに追加情報を追加するスクリプトを書いています(例えばFitモデルにRSquare Predictedを追加する)。スクリプトの一部として作成されたプラットフォームにpred.R2を追加することができます。しかし、どのように私はユーザーによって適合したモデルへの参照を得るでしょうか?ユーザーダイアログを作成して、ユーザーがpred.R2を追加するプラットフォームウィンドウを選択できるようにします。
もちろん、Fit-Model-plaftormのメインホットスポットに自分のメニューエントリを追加するだけのほうがもっといいと思いますが、それが可能かどうかわかりませんか。
何かアドバイスをありがとう
セバスチャン
セバスチャン、
MSの優れた返事を基にして... Fit Model出力にR2 Predicted値を追加するための非常によく似たスクリプトを書きました。適切なレポートを選択するためのダイアログボックスを表示する代わりに、現在のレポートウィンドウのメニューまたはツールバーからスクリプトを実行できます(スクリプトはメニューまたはツールバーに追加する必要があります)。その後、Current Window()コマンドはレポートウィンドウへの参照を提供し、レポートウィンドウ内のアウトラインボックスを検索できます。これが私たちのスクリプトの一部です。
curwin = Current Window();For( i = 1, i < 10000, i++, Try( outlinebox = curwin[Outline Box( i )]; Try( outlineboxobj = outlinebox << Get Scriptable Object; // DETAILS NOT SHOWN: // Check that the outline box is the top of a Fit Model analysis, with Standard Least Squares personality. // Pull the PRESS statistic and SS(treatment) to calculate R2-Predicted and append it to the Summary of Fit. ); , Break(); // If no more outline boxes are found, the first "Try()" goes here and forces an escape from the For() loop. ););
このスクリプトは、実際にはそのウィンドウ内のすべてのフィットモデル分析にR2 Predicted値を挿入します(複数のYとby変数に対して有効です)。これは、レポートウィンドウ内のすべてのアウトラインボックスを見ることによって行われます。
コメント:
1。JSLのドキュメントでは、"<< Get Scriptable Object"というメッセージが正しく扱われていません。既存のレポートウィンドウにアクセスする方法(スクリプトではなくユーザーによってすでに作成されている標準分析)を探すのに非常に長い時間がかかりました。この機能により、多くのスクリプト作成の機会が生まれます。
2。私たち全員が車輪を作り直すのを防ぐために、JMPが標準の最小二乗法の出力にR2-Predictedの値を含めていればいいでしょう。
ハワード
MSありがとうございました!それがトリックでした。私は知らなかった<<以前にスクリプト可能なオブジェクトを入手!
通常、 <<スクリプトオブジェクトを取得するプラットフォームへのアクセスを与えることができます。しかしフィットモデル出力は少し独特で、プラットフォームの一番上のアウトラインボックスを見つけるためにレポートを掘り下げる必要があります。
By-roleが割り当てられていない場合は、以下が機能します。 (上記のように機能と定義を仮定する)。
//ダイアログ
新しい窓 ( 「回帰レポートの選択」 、
<< モーダル 、
パネルボックス ( 「予測R2を追加する回帰レポートの選択」 、
RB = ラジオボックス ( 窓 ) 、
ボタンボックス ( "OK" 、
窓 ( RB << 選択される ) << 前面にウィンドウを持って来る ;
insertToReport (
現在のレポート ()[ 1 、 1 、 1 ] << スクリプト可能なオブジェクトを取得する ()
) ;
)
)
) ;
ありがとう、Sebastian。私はそれをほぼ手に入れた(私は思う)ので、要約しましょう。。。
あなたのユーザはあなたのコードが知らない状態で彼らのJMPセッションを持つでしょう。つまり、複数のテーブルを開き、それぞれに複数のウィンドウを開くことができます。これらのウィンドウの中には「最小二乗法」を含むものもあります。報告書。あなたのコードはすべての開いているウィンドウをスキャンし、後者を識別し、そして複数ある場合はユーザーに追加のレポートコンテンツを追加するものを選択させてください(1つしかない場合は尋ねる必要はありません)。重要な点は、コードが実際にはレポートを生成しなかったことです。
それは正しいですか。
こんにちはイアン、
返信いただきありがとうございます。私はこのワークフローに従いたいです。
1。ユーザーは "Fit Model(標準最小二乗法)"を使用して分析を開始します。
2。その後、ユーザーは自分のレポートにPredicted R2を追加するために私のスクリプトを実行します。
3。次に、予測されたR2が「フィットモデル」レポートに添付されます。
問題は、自分のスクリプトでユーザーが作成したレポートにアクセスする方法です。
現在私のコードはこのように見えます。私は基本的に最後のセクション "Test it"をユーザーがPredを選択したレポートを選択するユーザーダイアログに置き換えたいと思います。R2を追加する必要があります(特に複数のレポートがある場合)。既存のレポートを参照する方法が分からないだけです。
// "Fit Model"プラットフォームからPRESS統計を抽出します
getPRESS = 関数 ({ プラットホーム } 、
プラットホーム << 押す ( 見せる = 1 ) ;
報告書 = プラットホーム << 報告書 ;
押す = ( 報告書 [ アウトラインボックス ( "押す" [] 1 ] [ 1 ] << 行列として取得 )[ 1 ] ;
押す ;
) ;
// "Fit Model"プラットフォームから全二乗和を抽出する
getTSS = 関数 ({ プラットホーム } 、
報告書 = プラットホーム << 報告書 ;
ss = ( 報告書 [ アウトラインボックス ( 「分散分析」 [] 1 ] [ 3 ] << 行列として取得 ) ;
TSS = ss [ Nrow ( ss )] ;
TSS ;
) ;
// Fit-Model-plattformを使用して計算された線形モデルの予測R2を計算する
predR2 = 関数 ({ プラットホーム } 、
押す = getPRESS ( プラットホーム ) ;
TSS = getTSS ( プラットホーム ) ;
pr2 = 1 - 押す / TSS ;
pr2 ;
) ;
// pred R2をレポートに挿入します
insertToReport = 関数 ({ プラットホーム } 、
lm.rep = プラットホーム << 報告書 ;
名前 = lm.rep [ アウトラインボックス ( 「フィットのまとめ」 [] StringColBox ( 1 )] << 取得する ;
値 = lm.rep [ アウトラインボックス ( 「フィットのまとめ」 [] ナンバーコルボックス ( 1 )] << 取得する ;
に挿入 ( 名前 、 「RSquare予測」 、 3 ) ;
に挿入 ( 値 、 predR2 ( プラットホーム ) 、 3 ) ;
lm.rep [ アウトラインボックス ( 「フィットのまとめ」 [] StringColBox ( 1 )] << 設定値 ( 名前 ) ;
lm.rep [ アウトラインボックス ( 「フィットのまとめ」 [] NumberColBox ( 1 )] << 設定値 ( マトリックス ( 値 )) ;
) ;
// 試して
dt = 開いた ( "$ sample_data /デザイン実験/ Coffee Data.jmp" ) ;
分析 = フィットモデル (
Y ( : 力 ) 、
効果 ( : 挽く 、 : 温度 、 : 時間 、 : 電荷 、 : 駅 ) 、
人 ( 「標準最小二乗法」 ) 、
強調 ( 「最小限の報告」 ) 、
実行する (
: 力 << { 運動不足 ( 0 ) 、予測による実績のプロット ( 0 ) 、
プロット回帰 ( 0 ) 、予測残差プロット ( 0 ) 、
プロット効果の活用 ( 0 )}
)
) ;
InsertToReport ( 分析 ) ;
添加: これは私が試したものですが、うまくいくことができませんでした:
// ----------------------- +
//ユーザーダイアログ|
// ----------------------- +
//開いているウィンドウをすべて取得する
windows = {};
ref_windows = Window();
(i = 1、i <= Length(ref_windows)、i ++の場合)
に挿入(windows、ref_windows <<ウィンドウのタイトルを取得);
;
//ダイアログ
新しいウィンドウ( "回帰レポートの選択"、<<モーダル、
パネルボックス( "Predicted R2を追加する回帰レポートの選択"、pf =ラジオボックス(ウィンドウ));
;
lm_plattform = Plattform(pf << Get);
lm_plattform <<最前面へ
insertToReport(lm_plattform);
あなたが想像するワークフローについてもっと多くの詳細が必要だと思います、Sebastian。同じレポートで複数のモデルを使用できるモデリングプラットフォーム(Neuralなど)を使用したいと思うのは正しいですか。どの場合、そのようなプラットフォームに特に関心があるのでしょうか。