給定分佈的隨機子集選擇你好 ...
我試圖從給定正態分佈的一列數據中隨機選擇。 給定的分佈與數據的分佈不同。
有沒有一種簡單的方法可以使用表子集的當前選項來實現此目的? 我看不到任何可以幫助我的東西。
我還嘗試了一個公式,基本上是 NormalDensity (X, mu, sigma) 來根據給定的分佈繪製“數據”的密度。
但我仍然不知道如何從這個公式中均勻和隨機選擇,以便我的結果盡可能接近給定的分佈。
謝謝。 感謝您的支持。
回复:給定分佈的隨機子集選擇我還推薦免費課程“工業問題解決的統計思維”( https://www.jmp.com/en_us/online-statistics-course.html )。 儘管您可能不需要學習統計數據,但演示展示瞭如何在 JMP 中執行常見分析。 我認為這些演示可以向您展示 JMP 在統計課程中的表現,以及一些基本的數據操作和繪圖技術。
回复:給定分佈的隨機子集選擇我建議您花時間訪問 JMP 網站。 主頁頂部有一個菜單項,學習 JMP ,您可以通過它訪問我們為幫助您學習使用 JMP 而製作的眾多資源中的任何一個。 另一個學習領域是探索峰會站點在活動菜單。 例如約翰·薩爾(John Sall)過去幾年的主題演講會給你一些見解。
您在教授統計學課程嗎? 有幾個部分專門針對教師。 有些材料可以作為學生的作業卸載。
我同意您的觀點,在版本 15 中,JMP 非常複雜且精密。 它的一些最佳功能並不明顯。 大量學習和採用新工具是你的心態。 例如,我教授 JMP,許多新用戶看到 JMP 數據表後會想:“這只是另一個電子表格而已。” 這個起點就是挫敗感開始的地方。 (我並不是說這是你的第一印象,但這很常見。 BI 認為您了解統計分析和電子表格分析之間的區別,因為您使用 MINITAB。) 我上面提到的資源旨在揭示 JMP 思維方式,使其有意義,並且您可以快速預測 JMP 將如何幫助您解決新問題。
回复:給定分佈的隨機子集選擇我知道這一點,但是對我正在尋找的東西的搜索使我得到了這個答案。我正在嘗試確定切換到 JMP 來學習統計課程是否有意義。越來越明顯的是,JMP 對於簡單的事情來說並不直觀且困難。即使您對一個簡單示例給出的答案也不簡單或直觀。
到目前為止,我對 JMP 的看法是,學習曲線很高,但如果您正在進行更複雜的統計建模或實驗設計,可能是值得的。但是,我不確定 JMP 相對於 R 或 SPSS 等其他產品是否有優勢。 JMP 就像當今的許多產品一樣,由專家或計算機程序員設計供專家或計算機程序員使用,但對於那些非這些領域的人來說仍然相對難以訪問。 很少有產品能夠很好地考慮和迎合廣泛的用戶群。
也許我的看法會改變,因為我還沒有放棄 JMP,但到目前為止它讓我欣賞 Minitab 的簡單界面。
回复:給定分佈的隨機子集選擇這裡最初的請求不是對另一列進行簡單的隨機採樣。
如果這就是您所需要的,您可以使用Col Shuffle() 函數從另一個列中隨機選擇生成一個新列。

回复:給定分佈的隨機子集選擇你一定是在跟我開玩笑。從另一列中獲取隨機樣本,並將其在單獨的列中顯示給您,是 Minitab 中的菜單選擇。這個問題的答案需要兩頁的討論和幾十行代碼。為什麼簡單的事情在 JMP 中卻如此困難?
回复:給定分佈的隨機子集選擇傑夫
您對 Ian 原始解決方案的修改非常有效。 我現在可以提取具有指定分佈的隨機數據。 很高興看到這作為表子集下的一個選項......
我的問題100%解決了。
感謝您的支持。
回复:給定分佈的隨機子集選擇該方法@ian_jmp find 是我嘗試的第一件事,但我顯然太早放棄了它,因為 Ian 找到了克服我遇到的一些缺點的方法。 不錯的工作。
至於消除行的重新採樣,我相信 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 ) ) )
)
);
回复:給定分佈的隨機子集選擇抱歉 - 由於放假,我有幾天無法使用計算機。 但我確信其他人也能做到。 。 。
回复:給定分佈的隨機子集選擇伊恩
我的目標是獲取約 46K 的子樣本數據,其中 44K 是重複的。
您能寫信給我“bv”的那一行來表達您的建議嗎?
再次感謝。
回复:給定分佈的隨機子集選擇是的,我想知道這一點。 現在確實如此,但如果您不想重複,只需添加一行額外的行來設置已發現缺少“.”的向量“bv”的元素。
回复:給定分佈的隨機子集選擇伊恩,
忘了問一個問題。 您的選擇是從原始表中唯一完成的,還是有可能在子表中出現重複的選擇?
謝謝
回复:給定分佈的隨機子集選擇伊恩,
這太棒了。 我想到了類似的方法,但由於我的基本腳本知識而無法這樣做。
我能夠根據我的數據調整它並得到我想要的。 我也許可以將其擴展為 2 參數分佈選擇,我應該能夠從您的腳本中做到這一點。
感謝您的支持。
回复:給定分佈的隨機子集選擇傑夫,
謝謝你的努力。
你的建議有一點機會。 我將其應用於我的數據,不幸的是,由於選擇是隨機的,因此它不起作用。 我運行了大約 3000 次迭代,並在 10 小時後停止。 數據均值的變動微不足道。
這不是一個簡單的技術(除非你的名字是伊恩).. 我想像某種優化器會嘗試從更有意義的方向隨機拉動。 GA 可能有點大材小用,但肯定可以做到這種優化。
從統計學的角度來看,這對於我所做的事情來說是完全可以的。 400+K代表著一個資產大數據。 我正在嘗試查找與正在調查的子組類似的資產。
再次感謝。
回复:給定分佈的隨機子集選擇如果 ”因此,底線是,我需要從 400K+ 行中子選擇多個子樣本,以便所選子樣本的分佈盡可能接近給定的分佈“就是你想要的,也許你可以使用這種方法,或者類似的方法?
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 ) ) )
)
);
回复:給定分佈的隨機子集選擇
根據您的目的,獲取這樣的子集可能在統計上存在問題,但一種方法是使用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 ) );
);
回复:給定分佈的隨機子集選擇我只是在這裡自由思考,但也許您可以嘗試的是使用分佈平台確定分佈形狀,然後將數據轉換為正態分佈。然後輸出級別,然後進行分層子集化。只是一個想法。
回复:給定分佈的隨機子集選擇吉姆,謝謝你的建議。
但是您的提案沒有辦法根據給定的分佈強制選擇。 所以它不會產生我正在尋找的東西。 為了驗證,我確實遵循了這些步驟,它生成了一個與原始版本非常相似的版本。
也許我沒有解釋清楚。
我有 400k+ 行 XN 列數據(巨大的矩陣)。 如果為了論證起見,我將 N 個參數之一稱為“X”。
該數據的 X 分佈 - 將其稱為 X.dist1。
我有第二個數據集,其中有 Xagain,這次是 X.dist2
X.dist1 不太遠,但與 X.dist2 不同。
鑑於我在第一個數據集中有大量數據(400k+),因此我嘗試從 1 中子選擇數據集,以便所選數據 X 分佈是我能得到的最接近 X.dist2 的數據。
因此,我正在尋找“表子集”下的一些功能,我可以在其中指定正態分佈特徵或使用公式然後使用“表子集”。
對於公式,我將 dataset1 的密度與所需的 X.dist2 相對應。
但現在我需要一種從公式輸出中採樣的統一隨機方式,以強制結果分佈為 ~ X.dist2
或者任何其他方式...
如果我要使用表子集 - 解決方案需要指定要從中提取的參數的正態分佈。
否則,我需要從參數中找到統一的隨機選擇(公式方法)。
回复:給定分佈的隨機子集選擇我相信您可以通過簡單的兩步過程獲得您想要的東西。
1. 打開您有問題的專欄的分發平台。然後
保存==>級別編號。
這將創建一個新列,其分佈直接取自實際數據
2. 創建數據子集並指定
隨機-採樣率:
並且
分層,基於在上述步驟中創建的新級別列
回复:給定分佈的隨機子集選擇我的真正目標是比較兩個可用數據集中的 N(其他)參數,我並不是想創建一個虛構的分佈。 (也許我誤解了你的建議)。
給定的分佈是對可能影響其他參數的重要參數的約束。 我試圖從“數據”到給定的分佈中選擇具有相似分佈的資產,以便最大限度地減少這個有影響力的參數的影響。 在這種情況下,“分佈”僅適用於單個參數,而不適用於多個參數。
因此,底線是,我需要從 400K+ 行中子選擇多個子樣本,以便所選子樣本的分佈盡可能接近給定的分佈。回复:給定分佈的隨機子集選擇我明白了...我沒有完全理解你原來的帖子。 你是對的,我的建議只會返回一個與原始分佈具有非常相似參數的分佈。 如果您想要觀察具有所需參數估計值的隨機變量,為什麼不能只創建一個包含這些參數的列並繼續。 當然,具體的觀察結果不一定存在於原始專欄中,但這可能會或可能不會影響您試圖在分析或實踐上實現的目標? 它們至少是合理的觀察結果,儘管不完全匹配。
回复:給定分佈的隨機子集選擇彼得..謝謝你的建議。
但這似乎不起作用。
我的原始數據的平均值/標準差是:來自非常大的樣本(400K +)的 12816 和 1726。
我正在嘗試向下選擇一個更接近 14300 和 2050 的子樣本
我嘗試了你對公式的建議(即數據的密度為 14300, 2050),除非我可以強制在密度中統一選擇這個隨機分佈,否則我認為我無法得到我需要的東西。 事實上,二次抽樣的結果符合原始分佈的預期。回复:給定分佈的隨機子集選擇一旦您獲得了要從中採樣的總體列,請嘗試以下工作流程:
1. 選擇要從中採樣的列。
2. 從 JMP 主菜單欄中,選擇行 -> 行選擇 -> 隨機選擇 -> 然後選擇樣本大小或採樣率。
這將返回原始數據表中選定的列,然後行子集將為您提供一個數據表。