JSL および列番号/名前を使用した段階的回帰での効果の追加/削除やあみんな!
私は論文で JMP と JSL を使用しているので、これについて本当に助けが必要です。 私は現在、JSL 経由で JMP を使用してデータを分析しています。私の焦点は段階的回帰です。 簡単に役立つよう、いくつかのコード スニペットを添付しておきます。
基本的に
1.) 列番号を使用して初期モデルに複数の効果を追加するにはどうすればよいですか?
現在、必要な列番号のみを使用して Y を設定できますが、列番号を使用して X を追加することはできません。
これから行って欲しいです
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Effect1Name, :Effect2Name, /*and so on and so forth*/
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
これに
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Column(/*indices of columns to place as effects*/)
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
2.) 最も重要でない影響を除去するにはどうすればよいですか?
元のスクリプトを実行した後、一部の効果は実際にはそれほど重要ではないことがわかりました。 デフォルトのスクリプトは使用します
obj << Remove(:/*hardcoded column name*/);
しかし、次のように見えるように自動化できるように柔軟にしておきたいです
obj << Remove(:Column Name(indextoremove));
しかし、上記のスニペットではこのエラーメッセージが生成されます
Term not found in access or evaluation of 'Column Name' , Column Name/*###*/(indextoremove)
ありがとう!
Re: JSL および列番号/名前を使用した段階的回帰での効果の追加/削除<SPAN class="token string">^effect_cols^ doesnt appear to work within eval(parse(eval insert(Step_Str))); as the brackets "{" of the list still exist.</SPAN>Re: JSL および列番号/名前を使用した段階的回帰での効果の追加/削除また会ったね@cwillden !
以前にやっていたことに触発され、あなたのコードスニペットと関連して、コード内の何かを変更しました。 そして今、それはうまくいきます!
どうもありがとうございます!
Re: JSL および列番号/名前を使用した段階的回帰での効果の追加/削除こんにちは@cwillden 、
ご返信いただきありがとうございます! 私の最初の懸念(複数のエフェクトの追加)は大幅に解決されました。
2 番目の懸念事項については、p 値が最大の項をすでに削除できています。 しかし、それは私が用語を削除するために使用している基準ではないと考えています。
私がやっていること(スクリプトではなく、ポイントアンドクリック方式でこれを実行している場合)は次のとおりです。
- テーブルをロードします。
- モデルの適合モジュールを実行する
- Y と X を追加します。
- 段階的回帰を選択します
- モデルを構築します。 (「実行」をクリックします)
- 「実行」をクリックしてレポートを表示します。
- パラメータ推定テーブルに移動します。
- Prob>|t| に基づいて項を検査し、削除します。
あなたが送ったコードは、Fit Stepwise ウィンドウの Current Estimates テーブルの Prob>F に基づいて項を削除していたと思います。 私がやりたいのは、Prob>|t| に基づいて項を削除することです。 「レポート: モデルの適合」ウィンドウの「パラメーター推定値」テーブルの。
改めて、ありがとう!
Re: JSL および列番号/名前を使用した段階的回帰での効果の追加/削除こんにちは@pedbundoc 、
コミュニティへようこそ。論文の執筆頑張ってください。
他のダイアログ入力とは異なり、エフェクト入力は単なる列のリストではありません。その引数には高次の効果も指定します。「column(1)、column(2)、column(3)、column(1)*column(2)、column(2)*column(2)」などを使用して効果のリストを作成できます。どのようなシナリオでも、Column() 関数内で複数のインデックスを指定することはできません (私はそう信じています)。より良い解決策は、列参照のリストを取得し、次のように列インデックスを使用してリストのサブセットを作成することです。
dt = Current Data Table();
all_cols = dt << Get Column Reference();
//let's say factors are columns 2-4
effect_cols = all_cols[2::4];
さて、JMP は、Fit Model スクリプトの Effects 引数として変数effect_cols を直接挿入することを好まないようです。リストを評価するのではなく、「effect_cols」という名前の列を検索します。したがって、effect_cols の評価で次のように置き換える文字列からモデルの適合スクリプトを解析します。
Step_Str = "\[step = dt << Fit Model(
Y( Column(5) ),
Effects(
^effect_cols^
),
Personality( "Stepwise" ),
Run
);]\";
eval(parse(eval insert(Step_Str)));
主効果のみがある場合は、これでうまくいくはずです。それ以外の場合は、もう少し創造的になる必要があります。まだ完全に実行可能です。
さて、エフェクトの削除の問題です。Remove は、いずれかのエフェクトの名前と一致する文字列引数を指定した場合にのみ機能します。以前と同様に eval(parse(eval insert())) シーケンスを使用して、削除するエフェクト名を含む変数に代入する文字列を解析できます。以下は、最大の p 値を持つ効果を取得して削除する例です。
//Get a reference to the report window containing the stepwise object
step_rprt = step << Report;
//get the term names and current p-values from Current Estimates
terms = step_rprt["Current Estimates"][StringColBox(1)] << Get;
pvals = step_rprt["Current Estimates"][NumberColBox(5)] << Get;
//Remove Intercept from each
remove from(terms,1); //remove intercept
remove from(pvals,1); //remove p-value for intercept
max_index = Contains(pvals, max(pvals)); //get index of max p-value
//create an expression to remove the term with the largest p-value
remove_worst = parse(eval insert("\[step << Remove("^terms[max_index]^");]\"));
//Evaluate the expression
eval(remove_worst);お役に立てば幸いです!