2列のUniqueValsコンボで選択および除外する方法は?だから私はここで困惑しています。 Chart_IDとRecipe_IDの2つの列に基づいて、統計的に有意なデータのみのスクリーニングされたdtを出力しようとしています。 1つの列で機能させることはできますが、2つの列を理解することはできません。
- Oneway(y = mean、x = Chamber、BY:Chart_ID、Recipe_ID)を使用して生データをプロットし、All-pairs TukeytTestを実行しています。
- 次に、結合されたpValデータテーブルを取得します。
- 次に、pVal> 0.05であり、除外するすべての行を選択します
- 次に、Chart_IDごとにUniqueValsの要約リストを作成します(これは、重要なpValsを持つすべてのChart_IDです)。
- 次に、UniqueValsに一致するソースdtのすべての行を選択します
- 次に、選択を反転して除外します
- ->これにより、Chart_IDによってtTestが重要なデータのみがソースdtに残ります。
サマリーUniqueValsにRecipe_IDを追加する方法がわかりません。
重要ではないすべてのチャート/レシピを除外したソースdtで終わるより良い方法はありますか?
//dtSPC --> my source data, raw SPC data. Need to exclude rows from Charts, Recipes with high pVals
/*plotting a basic Fit YbyX just to get pValues. Formatting and style done on final plot*/
ow1 = Oneway(
Y( :MEAN ),
X( :CHAMBER ),
By(:CHART_ID, :RECIPE),
//All pairs Tukey HSD test
All Pairs(
1,
Confidence Quantile( 0 ),
Difference Matrix( 0 ),
LSD Threshold Matrix( 0 ),
Connecting Letters Report( 0 ),
Ordered Differences Report( 1 )
),
);
/***********************************/
/***********************************/
// Create the combined data table, using xPath (return a list of the OutlineBoxes from the report that have the title Ordered Differences Report. Then, use the first of those to make the combined data table.)
outlines = (Report( ow1[1] ) << Top Parent) << XPath( "//OutlineBox[text()='Ordered Differences Report']" );
dt1 = outlines[1][Table Box( 1 )] << Make Combined Data Table;
dt1 = current data table();
dt1 << set name( "pValue PairWise by Channel Tukey");
dt1:CHART_ID << Data type( Numeric ) << Set Modeling Type( Nominal );
/***********************************/
/**********************************/
//Screen and show only the CHART_ID's w/ a Tukey pair pVal<0.05
//exclude all high pVal rows, leaving only low pVal Channels. Does not work in reverse.
dt1 << select where(:name("p-Value") > 0.05);
dt1 << exclude;
dt1 << clear select;
//create a list of remaining Unique CHART_ID's
summarize(dt1, uniqueVals=by(:CHART_ID));
//Convert to numeric
For( i = 1, i <= N Items(uniqueVals ), i++,
uniqueVals[i] = Num(uniqueVals[i] )
);
//extra, just to look at the data
//dtUnique = New Table( "uniqueVals less 0.05");
//dtUnique << New Column( "CHART_ID", Values(uniqueVals));
//select on SPC source data just the channels w/ low pVals
//need to choose SPC data table
dtSPC << clear select;
dtSPC << select where( contains( uniqueVals, :CHART_ID));
//invert and exclude, leaving only low pVal CHART_ID's
dtSPC << invert row selection << exclude;
dtSPC << clear select;分析データ表スクリプティングRe:2列のUniqueValsコンボで選択および除外する方法は?こんにちは、aliegner1!
理解できないかもしれませんが、重要なp値を選択し、新しいテーブルをサブセット化してから、Chart_IDとRecipe_IDで要約してみてください。
繰り返しになりますが、私にはわかりませんが、あなたが何をしているのかはわかりません。 pハッキング"。少なくとも、p値に関するASAステートメントを読んでから、JMPヘルプの統計インデックスで偽発見率を調べることをお勧めします。
がんばろう!
Re:2列のUniqueValsコンボで選択および除外する方法は?情報ありがとうございます。 私はASAステートメントを読みましたが、ほとんど意味があります。 ただし、私の状況(および他の多くのpplを想定)は数千のグラフを処理しているため、リストをすばやくスクリーニングして切り詰めて、最も重要なものを確認する方法が必要です。 これが例としてのスクリーンショットです。 私は5000のチャートをふるいにかける必要があり、時間をかけて調べるために最も重要なチャートを特定するための優れた方法が必要です。 どこかに線を引かなくちゃ。
FDRも調べましたが、X特性を1つしか使用していないため、これは当てはまらないと思います。 1つのXだけでFDRが発生することはありません。

選択と要約について:
それが問題です。 要約を取得して、ソースデータを選択できるように変換する方法がわかりません。
以前は、Summarizeが文字を出力するため、単一の列(Chart_ID)を選択してから、数値に変換し直していました。 そこから、UniqueVals(Chart_ID)のリストからソースdt Chart_IDColを選択することができました。
数値と文字の2つの異なる列でこれを実現するにはどうすればよいですか?
Re:2列のUniqueValsコンボで選択および除外する方法は?数値列を文字に変換してから、2つの列を連結して、比較文字列のリストを取得できます。 次に、そのリストを使用して必要な行を選択します(または連想配列を使用します)。 サンプルデータセットがないので、ここにある種の例があります:
Names Default To Here(1);
dt = New Table("Untitled 22",
Add Rows(5),
Compress File When Saved(1),
New Column("CHART_ID",
Character,
"Nominal",
Set Values({"123", "1", "12", "0", "135"})
),
New Column("RECIPE",
Character,
"Nominal",
Set Values({"A", "A", "B", "B", "C"})
),
New Column("pval",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([0.1, 0.001, 0.051, 0.002, 0.1])
)
);
pVals = Loc(dt:pval << get as matrix > 0.05); //get rows over 0.05
comparisonStrings = {};
For(i = 1, i <= N Items(pVals), i++,
Insert Into(comparisonStrings, char(dt:CHART_ID[pVals[i]]) || dt:RECIPE[pVals[i]]);
);
wait(1);
dt << Select Where(Contains(comparisonStrings, char(:CHART_ID)||:RECIPE));
wait(1);
dt << clear select;
wait(1);
aa = Associative Array(Eval List(dt:CHART_ID[pVals]), EvalList(dt:RECIPE[pVals]));
dt << Select Where(Contains(aa, :CHART_ID) & aa[:CHART_ID] == :RECIPE);Scripting Indexを使用して、何が起こっているのかをよりよく理解します(必要に応じてデバッグします)。
Re:2列のUniqueValsコンボで選択および除外する方法は?@jthi
ヒントをありがとうございますが、スクリプトについて少し混乱しています。 selectを数回実行しているように見えますが、ソースdtに戻るために何も実行していません。
結合されたデータテーブルからpValをうまく選択できます。 私が抱えている問題は、結合データテーブルの2つの列で要約し、メインのソースデータに戻って、要約を使用して選択しようとしていることです。
この問題について話すために使用できるように見えるサンプルセットを見つけました。
2つのBY列を使用してソースdtに要約する方法がわかりません
By(:trial、:oil amt)、
dtPopCorn = Open( "$SAMPLE_DATA/Popcorn.jmp" );
/*plotting a basic Fit YbyX just to get pValues. Formatting and style done on final plot*/
ow1 = Oneway(
Y( :yield ),
X( :popcorn ),
By(:trial, :oil amt),
//All pairs Tukey HSD test
All Pairs(
1,
Confidence Quantile( 0 ),
Difference Matrix( 0 ),
LSD Threshold Matrix( 0 ),
Connecting Letters Report( 0 ),
Ordered Differences Report( 1 )
),
);
/***********************************/
/***********************************/
// Create the combined data table, using xPath (return a list of the OutlineBoxes from the report that have the title Ordered Differences Report. Then, use the first of those to make the combined data table.)
outlines = (Report( ow1[1] ) << Top Parent) << XPath( "//OutlineBox[text()='Ordered Differences Report']" );
dt1 = outlines[1][Table Box( 1 )] << Make Combined Data Table;
dt1 = current data table();
dt1 << set name( "pValue PairWise by Channel Tukey");
dt1:trial << Data type( Numeric ) << Set Modeling Type( Nominal );
/***********************************/
/**********************************/
//Screen and show only the trial's w/ a Tukey pair pVal<0.05
//exclude all high pVal rows, leaving only low pVal Channels. Does not work in reverse.
dt1 << select where(:name("p-Value") > 0.5); //I know...just setting 0.5 so that one row stands out.
dt1 << exclude;
dt1 << clear select;
//create a list of remaining Unique trial's
summarize(dt1, uniqueVals=by(:trial));
//Convert to numeric
For( i = 1, i <= N Items(uniqueVals ), i++,
uniqueVals[i] = Num(uniqueVals[i] )
);
//extra, just to look at the data
//dtUnique = New Table( "uniqueVals less 0.5");
//dtUnique << New Column( "trial", Values(uniqueVals));
//select on SPC source data just the channels w/ low pVals
//need to choose SPC data table
dtPopCorn << clear select;
dtPopCorn << select where( contains( uniqueVals, :trial));
//invert and exclude, leaving only low pVal trial's
dtPopCorn << invert row selection << exclude;
dtPopCorn << clear select;