特定の分布に対するランダムなサブセットの選択こんにちは ...
特定の正規分布のデータ列からランダムに選択しようとしています。 指定された分布はデータの分布とは異なります。
テーブルサブセットの現在のオプションを使用してこれを簡単に実現する方法はありますか? 私を助けてくれそうなものは何も見えませんでした。
また、与えられた分布に対して「データ」の密度をプロットするために、基本的に NormalDensity (X, mu, sigma) という式を試してみました。
しかし、結果が指定された分布にできるだけ近くなるように、この式から均一かつランダムに選択する方法がまだわかりません。
THX。 サポートに感謝します。
Re: 特定の分布に対するランダムなサブセット選択無料コース「産業問題解決のための統計的思考」 ( https://www.jmp.com/en_us/online-statistics-course.html )。 統計について学ぶ必要はないかもしれませんが、デモでは JMP で一般的な分析を実行する方法が示されています。 これらのデモンストレーションは、基本的なデータ操作やグラフ作成のテクニックを示すだけでなく、JMP が統計コースでどれだけうまく機能するかを示すことができると思います。
Re: 特定の分布に対するランダムなサブセット選択JMP Web サイトに時間を費やすことをお勧めします。 ホームページの上部にメニュー項目がありますが、 JMPを学ぶここから、JMP の使用方法を学習するために作成された多くのリソースのいずれかにアクセスできます。 もう一つの学習分野は、ディスカバリーサミットのサイトイベントメニュー。 たとえば、過去数年間の John Sal 氏の基調講演からいくつかの洞察が得られます。
統計学のコースを教えていますか? インストラクターに特化したセクションがいくつかあります。 教材の一部は、生徒への課題としてオフロードできます。
バージョン 15 の JMP は複雑で洗練されているという点に私も同意します。 その優れた機能のいくつかは明らかではありません。 多くのことを学び、新しいツールを採用することは、あなたの考え方次第です。 たとえば、私は JMP を教えていますが、多くの新規ユーザーは JMP データ テーブルを見て、「これは単なる別のスプレッドシートだ」と考えます。 その出発点からフラストレーションが始まります。 (それがあなたの第一印象だったとは言いませんが、それはよくあることです。 BI は MINITAB を使用しているので、統計分析とスプレッドシート分析の違いを理解していると思います。) 上で述べたリソースは、JMP の考え方を明らかにすることを目的としており、それが理にかなっていて、JMP が新しい問題の解決にどのように役立つかをすぐに予想できるようになります。
Re: 特定の分布に対するランダムなサブセット選択それはわかっていますが、探していたものを検索すると、この答えにたどり着きました。統計コースを JMP に切り替えることが意味があるかどうかを判断しようとしています。JMP は直感的ではなく、単純なことを行うのが難しいことが明らかになってきています。単純なサンプルに対して与えた答えでさえ、単純でも直感的でもありません。
これまでのところ、JMP についての私の見解は、学習曲線は長いですが、より複雑な統計モデリングや実験計画を行う場合には、おそらく価値があるということです。ただし、R や SPSS などの他の製品と比べて JMP に利点があるかどうかはわかりません。 JMP は、最近の多くの製品と同様、専門家やコンピューター プログラマーが使用できるように専門家やコンピューター プログラマーによって設計されていますが、その分野以外の人々にとっては比較的アクセスしにくいものになっています。 幅広いユーザーベースを考慮し、それに応えるという適切な機能を果たしている製品はほとんどありません。
私はまだ JMP を諦めたわけではないので、私の意見は変わるかもしれませんが、今のところ、Minitab のシンプルなインターフェースを高く評価しています。
Re: 特定の分布に対するランダムなサブセット選択ここでの元のリクエストは、別の列の単純なランダム サンプリングではありませんでした。
必要なだけであれば、 Col Shuffle() 関数別の列からランダムに選択して新しい列を生成します。

Re: 特定の分布に対するランダムなサブセット選択冗談でしょうね。別の列から無作為サンプルを取得し、それを別の列に表示することは、Minitab のメニュー選択です。これに対する答えを導き出すには、2 ページにわたる議論と数十行のコードが必要でした。JMP ではなぜ単純なことがこれほど難しいのでしょうか?
Re: 特定の分布に対するランダムなサブセット選択ジェフ
Ian の元のソリューションに対する修正は完全に機能しました。 所定の分布を持つランダムなデータを抽出できるようになりました。 これがテーブルのサブセット化の下のオプションとして表示されると良いのですが...
私の問題は100%解決されました。
ご協力ありがとうございました。
Re: 特定の分布に対するランダムなサブセット選択というアプローチ@ian_jmp見つけることが私が最初に試みたことでしたが、どうやらイアンが私が遭遇したいくつかの欠点を克服する方法を見つけたので、私はそれを放棄するのが早すぎました。 良くやった。
行のリサンプリングを排除することに関しては、Ian が次の行を追加することを提案していたと思います。
bv[Loc Min( dist )] = .;
for() ループへ。 したがって:
Names Default To Here( 1 );
// Make a big table
dt1 = New Table( "Big",
New Column( "Values", Numeric, Continuous, Formula( Random Uniform( -3, 3 ) ) ),
New Column("Row", Formula(Row()))
);
dt1 << addRows( 40000 );
dt1 << runFormulas;
Column( dt1, "Values" ) << deleteFormula;
// Make a small table
dt2 = New Table( "Small",
New Column( "Values", Numeric, Continuous, Formula( Random Normal( 0, 1 ) ) )
);
dt2 << addRows( 40 );
dt2 << runFormulas;
Column( dt2, "Values" ) << deleteFormula;
// For each value in dt2, find a value in dt1 that's closest
bv = Column( dt1, "Values" ) << getValues;
sv = Column( dt2, "Values" ) << getValues;
selectedRows = J( N Row( sv ), 1, . );
For( i = 1, i <= N Row( sv ), i++,
dist = (bv - sv[i]) ^ 2;
selectedRows[i] = Loc Min( dist );
//the line below prevents rows from the "Big" table from being re-sampled
bv[Loc Min( dist )] = .;
);
// Subset dt1
dt3 = dt1 << subset( rows( selectedRows ), LinkToOriginalDataTable( 1 ) );
// Look at the distributions
New Window( "Compare Distributions",
H List Box(
dt1 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt2 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt3 << Distribution( Continuous Distribution( Column( :Values ) ) )
)
);
Re: 特定の分布に対するランダムなサブセット選択申し訳ありませんが、休暇のため数日間コンピュータにアクセスできなくなります。 しかし、私は他の誰かがそれをできると確信しています。 。 。
Re: 特定の分布に対するランダムなサブセット選択イアン
私は最大 46K のサブサンプル データを取得することを目指していましたが、そのうち 44K は重複していました。
あなたの提案のために「bv」のその行を書いていただけますか?
またまたね。
Re: 特定の分布に対するランダムなサブセット選択はい、これについて疑問に思いました。 現時点ではそうなっていますが、重複を望まない場合は、見つかったベクトル 'bv' の要素を '.' の欠落に設定する追加の行を追加するだけです。
Re: 特定の分布に対するランダムなサブセット選択イアン、
一つ質問するのを忘れていました。 選択は元のテーブルから独自に行われていますか、それともサブテーブルに重複した選択が含まれる可能性がありますか?
THX
Re: 特定の分布に対するランダムなサブセット選択イアン、
これは素晴らしいですね。 私も同様のアプローチを考えましたが、基本的なスクリプトの知識があったため、実行できませんでした。
データに適応させることができ、希望どおりの結果が得られました。 おそらくこれを 2 パラメータの分布選択に拡張することができ、スクリプトから実行できるはずです。
ご協力ありがとうございました。
Re: 特定の分布に対するランダムなサブセット選択ジェフ、
お疲れ様でした。
あなたの提案にはわずかな可能性がありました。 これをデータに適用しましたが、残念ながら選択がランダムであるため、機能しませんでした。 約 3000 回繰り返し実行し、10 時間後に停止しました。 データの平均値の変動はわずかでした。
これは簡単なテクニックではありません (あなたの名前がイアンでない限り) .. ある種のオプティマイザーが関与して、より合理的な方向からランダムにプルしようとしていると想像します。 GA はやりすぎかもしれませんが、確かにこの種の最適化は可能です。
統計的な観点から見ると、これは私のやっていることにとってまったく問題ありません。 400+K は資産のビッグデータを表します。 調査中のサブグループに類似したアセットを見つけようとしています。
再度、感謝します。
Re: 特定の分布に対するランダムなサブセット選択もし "つまり、選択したサブサンプルの分布が指定された分布にできる限り近づくように、40万行以上の行からいくつかのサブサンプルを部分選択する必要があります。 「あなたが望んでいることは、おそらくこの種のアプローチ、またはそれに近いものを使用できるでしょうか?」
NamesDefaultToHere(1);
// Make a big table
dt1 = NewTable("Big", NewColumn("Values", Numeric, Continuous, Formula(RandomUniform(-3,3))));
dt1 << addRows(40000);
dt1 << runFormulas;
Column(dt1, "Values") << deleteFormula;
// Make a small table
dt2 = NewTable("Small", NewColumn("Values", Numeric, Continuous, Formula(RandomNormal(0,1))));
dt2 << addRows(40);
dt2 << runFormulas;
Column(dt2, "Values") << deleteFormula;
// For each value in dt2, find a value in dt1 that's closest
bv = Column(dt1, "Values") << getValues;
sv = Column(dt2, "Values") << getValues;
selectedRows = J(NRow(sv), 1, .);
for(i=1, i<=NRow(sv), i++,
dist = (bv - sv[i])^2;
selectedRows[i] = LocMin(dist);
);
// Subset dt1
dt3 = dt1 << subset(rows(selectedRows), LinkToOriginalDataTable(1));
// Look at the distributions
NewWindow("Compare Distributions",
HListBox(
dt1 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt2 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt3 << Distribution( Continuous Distribution( Column( :Values ) ) )
)
);
Re: 特定の分布に対するランダムなサブセット選択
目的によっては、このようなサブセットを取得することは統計的に疑わしい場合がありますが、それを行う 1 つの方法は、Resample Freq() を使用してランダムなサンプルを生成し、そのサンプルをチェックして目的の特性を満たしているかどうかを確認することにより、ブルート フォースで取得することです。 これは、元のデータをシミュレートするテーブルを生成し、それをリサンプリングし、ディストリビューション プラットフォームを使用してサンプルをテストするプロトタイプです。
dt = New Table( "original",
Add Rows( 1000 ),
//:parameter will have a random normal distribution with mean=0
//and a stddev=1
New Column( "parameter",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Random Normal() )
),
New Column( "Row", Numeric, "Continuous", Format( "Best", 12 ), Formula( Row() ) ),
//The Resample Freq() function generates a frequence count for sample with replacement
//the .05 argument is the sample rate, i.e. we want a sample size of 5% of the original table
New Column( "Resample Freq",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Resample Freq( 0.05 ) ),
)
);
//Generate a distribution of :parameter using the resample frequency as a Freq column to get
//Automatic Recalc will cause the Distribution to rerun when the Resample Freq column is re-evaluated
//to get a new sample
New Window( "Dist comparison",
H List Box(
dt << Distribution( Continuous Distribution( Column( :parameter ) ) ),
dist = dt << Distribution(
Automatic Recalc( 1 ),
Freq( :Resample Freq ),
Continuous Distribution( Column( :parameter ) )
)
)
);
//set the minimum mean value we will accept for the subsample
target_mean_min = .249;
//set the minimum mean value we will accept for the subsample
target_mean_max = .251;
//how many iterations are we willing to try before giving up?
max_iter = 1000;
iter = 1;
While(
//Report( dist )[Number Col Box( 2 )][1] is the mean value from the Distribution report
!(target_mean_min <= Report( dist )[Number Col Box( 2 )][1] <= target_mean_max) &
iter <= max_iter,
//get a new sample
Column( "Resample Freq" ) << eval formula;
iter++;
);
If(
//check to see if we exited because we hit max_iter or got a good sample
iter > max_iter & !(target_mean_min <= Report( dist )[Number Col Box( 2 )][1] <=
target_mean_max)
,
Print( "No result in " || Char( max_iter ) || " random samples." ),
//got a good sample so get the subset
dt << select where( :resample freq != 0 );
dt << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
);
Re: 特定の分布に対するランダムなサブセット選択ここでは私の自由な発想ですが、Distribution Platform を使用して分布の形状を決定し、データを正規分布に変換してみることも考えられます。次に、レベルの出力を行ってから、階層化によるサブセット化を行います。ちょっとした考え。
Re: 特定の分布に対するランダムなサブセット選択ジム、ご提案ありがとうございます。
しかし、あなたの提案には、指定された分布に従って強制的に選択する方法がありません。 したがって、私が探しているものは生成されません。 検証するために、手順に従ってみたところ、元の dist と非常によく似た dist が生成されました。
もしかしたら明確に説明していないかもしれません。
400k+ 行 XN 列のデータ (巨大な行列) があります。 N 個のパラメータの 1 つを、引数のために「X」として呼び出すとします。
このデータからの X の分布 - X.dist1 と呼びます。
Xagain を含む 2 番目のデータセットがあり、今回は X.dist2 が含まれています
X.dist1 はそれほど遠くありませんが、X.dist2 とは異なります。
最初のデータセット (400k+) に大量のデータがあるという事実を考慮して、選択したデータの X 分布が X.dist2 に最も近くなるように、データ セットを 1 からサブ選択しようとしています。
したがって、私は正規分布特性を指定できる機能、または数式を使用してからテーブル サブセットを使用できるテーブル - サブセットの下で機能を探していました。
式では、目的の X.dist2 に対して dataset1 の密度を代入します。
しかし今、結果の分布を強制的に ~ X.dist2 にするために、数式の出力から均一にランダムにサンプリングする方法が必要です。
または他の方法でも...
テーブル サブセットを使用する場合、ソリューションでは、取得元のパラメーターから正規分布を指定する必要があります。
そうでない場合は、パラメーターから一様なランダムな選択を見つける必要があります (数式アプローチ)。
Re: 特定の分布に対するランダムなサブセット選択簡単な 2 ステップのプロセスを実行するだけで、必要なものが得られると思います。
1. 問題の列の配布プラットフォームを開きます。それから
保存==>レベル番号。
これにより、実際のデータから直接取得された分布を含む新しい列が作成されます。
2. データのサブセットを作成し、
ランダム - サンプリング レート:
そしてまた
上記の手順で作成した新しいレベル列に基づいて階層化します。
Re: 特定の分布に対するランダムなサブセット選択私の本当の目標は、すでに利用可能な 2 つのデータセットから N (その他) のパラメーターを比較することであり、架空の分布を作成しようとしているわけではありません。 (もしかしたら私はあなたの提案を誤解しているかもしれません)。
指定された分布は、他のパラメータに影響を与える可能性がある重要なパラメータに対する制約です。 この影響力のあるパラメータの影響を最小限に抑えるために、「データ」から特定の分布に類似した分布を持つアセットを選択しようとしています。 この文脈では、「分布」は単一のパラメータにのみ適用され、複数のパラメータには適用されません。
つまり、選択したサブサンプルの分布が指定された分布にできるだけ近づくように、400,000 行以上の行からいくつかのサブサンプルを部分選択する必要があります。Re: 特定の分布に対するランダムなサブセット選択なるほど...元の投稿をよく理解できませんでした。 あなたの正しい提案は、元の分布と非常によく似たパラメータを持つ分布を返すだけです。 希望のパラメーター推定値を含む確率変数の観測が必要な場合、それらのパラメーターを含む列を作成して次に進むことができないのはなぜでしょうか。 確かに、特定の観察結果が必ずしも元の列に存在するわけではありませんが、それは分析的または実際的に達成しようとしていることに影響を与えるかもしれませんし、影響しないかもしれません。 完全に一致するわけではありませんが、少なくとももっともらしい観察結果となります。
Re: 特定の分布に対するランダムなサブセット選択ピーター .. ご提案ありがとうございます。
しかしそれはうまくいかないようです。
私の元のデータの平均/標準偏差は、非常に大きなサンプル (400K +) からの 12816 と 1726 です。
14300 と 2050 に近いサブサンプルをダウンセレクトしようとしています
式(つまり、14300、2050に対するデータの密度)についてあなたの提案を試しましたが、このランダムな距離を密度間で均一に選択するように強制できない限り、必要なものを取得できないと思います。 実際、サブサンプリングは元の分布で予想どおりの結果になりました。Re: 特定の分布に対するランダムなサブセット選択サンプリングする母集団列を用意したら、次のワークフローを試してください。
1. サンプリングする列を選択します。
2. JMP メイン メニュー バーから、[行] -> [行の選択] -> [ランダムに選択] -> を選択し、サンプル サイズまたはサンプリング レートを選択します。
これにより、元のデータ テーブルで選択した列が返され、そこから行サブセットによってデータ テーブルが得られます。