一方向分析からデータを抽出する一方向分析から p 値を取得し、分析に使用されるテーブルの新しい列にドロップするスクリプトを作成しようとしています。
JMP 13スクリプトガイドを調べたところ、690ページに「分析からレポートへの値の抽出」があり、これは私が望むものと思われます。 ただし、ガイドとしてそれに従うと、oneway と anovas では機能しないようです...
コードのトラブルシューティングを試みているときに、bigclass サンプル データセットで動作するように変更したスクリプトを次に示します。
Deletesymbols();
dt=Open("$SAMPLE_DATA\Big Class.jmp");
//creates a oneway analysis of big class similar how my data will be interpreted
anova=Oneway(
Y(:height),
X(:age),
With Control(1, {12}),
Means(1), Mean Diamonds(1), Comparison Circles(1),
By(:sex)
);
anova<<show tree structure;
/*
Female LDS threshold results are in OultineBox(9), Levels (age) is StringColBox(5), pValues are NumberColBox(15)
Male LDS threshold results are in OultineBox(18), Levels (age) is StringColBox(10), pValues are NumberColBox(30)
*/
// Should create a report that I can use to extract data from the anova analysis based off the original script
report(anova) [Outline Box(9)] << Close( 0 ); <BR />report(anova) [Outline Box(18)] << Close( 0 );
reportanova = anova << Report;
// Should extract the level (age) and pvalues for females
agef = reportanova[Outline Box(9)][String Col Box(5)] << Getaslist;
pvalsf = reportanova[Outline Box(9)][NumberColBox(15)] << Getaslist;
// Should extract the level (age) pvalues for males
agem = reportanova[Outline Box(18)][String Col Box(10)] << Getaslist;
pvalsm = reportanova[Outline Box(18)][NumberColBox(30)] << Getaslist;
//column creation to recieve extracted data
dt<<new column("p-value",Numeric, "Continuous");
//should add the collected p-value to the data table in the new column, matched to the correct row based on sex and age <FONT color="#FF0000">(untested)</FONT>.
For Each Row( p-value =
match(sex,
"f",match(age,
show(agef[1]),show(pvalsf[1]),
show(agef[2]),show(pvalsf[2]),
show(agef[3]),show(pvalsf[3]),
show(agef[4]),show(pvalsf[4]),
show(agef[5]),show(pvalsf[5]),
show(agef[6]),show(pvalsf[6]),
),
"m",match(age,
show(agem[1]),show(pvalsm[1]),
show(agem[2]),show(pvalsm[2]),
show(agem[3]),show(pvalsm[3]),
show(agem[4]),show(pvalsm[4]),
show(agem[5]),show(pvalsm[5]),
show(agem[6]),show(pvalsm[6]),
),
);*/
しかし、anova をレポートに入れると、埋め込まれたログにエラーが発生します。
Send は 'Send' のアクセスまたは評価で Scriptable Object を予期します, Report( anova )[Outline Box( 9 )] << /*###*/Close( 0 ) /*###*/
デバッガーは同じ場所で失敗し、これらを変数として提供します。
変数価値
anova {一方向[],一方通行[]}
dt データ テーブル("大きなクラス")
reportanova {DisplayBox[OutlineBox], DisplayBox[OutlineBox]}
したがって、二変量で機能するものは一方向には拡張されないと推測することしかできません。変数/コマンド/何かが一致しない場合に備えて、anovaをanovに短縮して変数を変更しましたが、引き続き失敗します。ありました前の投稿2011年からサンプルコードで見たのですが、Wordやjmpスクリプトウィンドウでクリアできないフォント情報で文字化けしたり、実際に読めるようにhtmlファイルとして保存したり…
p値を正しい行に追加するコードが機能するかどうかを確認する前に、これを解決する必要があります...
ありがとう。
Re: 一方向分析からデータを抽出する性別と年齢に一致するテーブルに値を追加する方法を知りたい人もいるはずです。
//creates a new column
dt<<NEW column=""></NEW>
これを行うためのより簡単できちんとした方法があるかもしれませんが、うまくいきます。 ネストされた if ステートメントと for ループは、元の年齢のデータ型が「数値」であり、「LSD しきい値マトリックス」のリストが「文字」であることに気付いた途端に機能しました。
Re: 一方向分析からデータを抽出するせっかくなので文字化けを片付けました役職2011年から。
Re: 一方向分析からデータを抽出する私たちが「ベスト プラクティス」として教えていることの 1 つの強力な推奨事項は次のとおりです。絶対インデックス表示ツリー図に表示されます。 このように正しい添え字を書くことができるのに、どうしてでしょうか?この方法は、作成、読み取り、および維持が難しく、脆弱であるためです。 使用相対索引付け私のソリューションに示されているように。 書きやすく、読みやすく (自己文書化?)、保守も簡単です。 また、脆性もはるかに少ないです。 利己的で、自分のことだけを考えてください!
JMP も変更されることを忘れないでください。バージョンによってレポートに新しいセクションが導入されたり、セクションが移動したり、プラットフォームの設定が変更されたり、他のユーザーが別の設定でスクリプトを使用したりします。 防御スクリプトなどのバリエーションを想定しています。相対インデックスはそれに対して堅牢です。
この選択は単にスタイルの問題だと考える人もいます。 彼らが決して変化に苦しまないことを願っています。
(そして、Send To Report インタープリター ディレクティブの使用を開始しないでください...)
Re: 一方向分析からデータを抽出するそれはうまくいきます、ありがとう!
したがって、ここを見ている他の人のために...そして、コードをコピーして貼り付けるだけでなく、理解していることを確認するために:
f ages <SPAN class="token operator">=</SPAN> anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;</SPAN>
oneway の 'By()' オプションは、レポート内に 2 つの個別のインスタンスを作成します。これが、'<
anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN>
'F' である oneway を作成するときに 'By(:sex)' から作成された最初のグループを指し、'anova rpt[2]' はグループ 2 'M' を参照します。Tスクリプト ガイドの元のスクリプトは、単純な 2 変量である場合に対処するレポートのセクションが 1 つしかないため、スクリプトは必要ありませんでしたか?
次に、セグメント:
<SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN>
jmp は、レポートの「LSD しきい値マトリックス」セクションに直接スキップし、番号付けスキームをリセットします。これにより、文字列列が ...Box(1) によって参照されるようになりましたが、ツリー構造全体では ...ボックス(5)。これらの 3 つすべてが、ツリー構造から参照された女性の年齢リストを取得する同等の方法です。
f ages <SPAN class="token operator">=</SPAN> anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;<BR />f ages = anova rpt[1][Outline Box(9)][StringColBox(1)] << Get;<BR />f ages = anova rpt[1][StringColBox(5)] << Get;<BR /></SPAN>
By (:sex) が one way からコメント アウトされている場合、ツリー構造は単純化され、次のようになります。
ages <SPAN class="token operator">=</SPAN> anova rpt[1]<SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(5</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;<BR />ages = anova rpt[StringColBox(5)] << Get;<BR /></SPAN>
[1] が理解され、[2] がもはやオプションではないため、指定する必要がないため、どちらも機能するようになりました。
Re: 一方向分析からデータを抽出するすべての JMP プラットフォーム (レポート) に適用される一般的なルールと構文がありますが、構成 (つまり、特定のネストされた表示ボックス) はもちろん異なります。 このアプローチを試してください:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
//creates a oneway analysis of big class similar how my data will be interpreted
anova = dt << Oneway(
Y( :height ),
X( :age ),
With Control( 1, {12} ),
Means( 1 ),
Mean Diamonds( 1 ),
Comparison Circles( 1 ),
By( :sex )
);
anova rpt = anova << Report;
f ages = anova rpt[1]["LSD Threshold Matrix"][StringColBox(1)] << Get;
f pVal = anova rpt[1]["LSD Threshold Matrix"][NumberColBox(2)] << Get;
m ages = anova rpt[2]["LSD Threshold Matrix"][StringColBox(1)] << Get;
m pVal = anova rpt[2]["LSD Threshold Matrix"][NumberColBox(2)] << Get;