如何生成具有特定均值的 1 到 4 之間的隨機整數?
我需要在 中生成 100 個隨機整數
R
,其中每個整數介於 1 和 4 之間(因此為 1、2、3、4),並且平均值等於特定值。如果我在 1 和 5 之間繪製隨機統一數字並得到
floor
,我的平均值為 2.5。x = floor(runif(100,min=1, max=5))
例如,我需要將平均值固定為 1.9 或 2.93。
我想我可以生成添加到 100 * 均值的隨機整數,但我不知道如何限制為 1 到 4 之間的隨機整數。
我同意 X’ian 的觀點,即問題未明確。然而,有一個優雅的、可擴展的、高效的、有效的和通用的解決方案值得考慮。
因為樣本均值和样本大小的乘積等於樣本總和,所以問題涉及生成隨機樣本 n 集合中的值 1,2,…,k 那筆錢 s (假設 n≤s≤kn, 當然)。
為了解釋所提出的解決方案,並且我希望證明**優雅的說法,**我提供了這個採樣方案的圖形解釋。佈置一個網格 k 行和 n 列。選擇第一行中的每個單元格。隨機(和統一)選擇 s−n 行中剩餘的單元格 2 通過 k. 觀察的價值 i 在樣本中是在列中選擇的單元格數 i:
這 4×100 網格由未選定單元格處的黑點和選定單元格處的彩色補丁表示。它被生成以產生平均值 2, 所以 s=200. 因此, 200−100=100 細胞在頂部隨機選擇 k−1=3 行。顏色代表每列中選定單元格的數量。有 28 那些, 47 雙打, 22 三分球,和 3 四肢。有序樣本對應於列中的顏色序列 1 通過列 n=100.
為了演示可擴展性和效率,這裡有一個
R
根據此方案生成樣本的命令。問題涉及案件 k=4,n=100 和 s 是 n 乘以所需的樣本平均值:tabulate(sample.int((k-1)*n, s-n) %% n + 1, n) + 1
因為
sample.int
需要 O(s−n) 時間和 O((k−1)n) 空間,並且tabulate
需要 O(n) 時間和空間,這個算法需要 O(max(s−n,n)) 時間和 O(kn) 空間:這是可擴展的。和 k=4 和 n=100 我的工作站只需要 12 微秒來執行這個計算:這很有效。(這裡是對代碼的簡要說明。注意整數 x 在 1,2,…,(k−1)n 可以唯一地表示為 x=nj+i 在哪裡 j∈0,1,…,k−2 和 i∈1,2,…,n. 該代碼採用了這樣的示例 x, 將他們轉換為他們的 (i,j) 網格坐標,每個計算多少次 i 出現(範圍從 0 通過 k−1 ) 並添加 1 每個計數。)
為什麼這可以被認為是有效的?一個原因是這種抽樣方案的分佈特性很容易計算出來:
- 它是*可交換的:*任何樣本的所有排列都是等可能的。
- 價值的機會 x∈1,2,…,k 出現在位置 i, 我會寫成 πi(x), 通過基本的超幾何計數參數獲得πi(x)=(k−1x−1)((n−1)(k−1)s−n−x+1)(n(k−1)s−n).
例如,與 k=4, n=100, 和一個平均值 2.0 (以便 s=200 ) 機會是 π=(0.2948,0.4467,0.2222,0.03630), 與上述樣本中的頻率非常吻合。以下是圖表 π1(1),π1(2),π1(3), 和 π1(4) 作為總和的函數:
- 價值的機會 x 出現在位置 i 而價值 y 出現在位置 j 類似地發現為πij(x,y)=(k−1x−1)(k−1y−1)((n−1)(k−1)s−n−x−y+2)(n(k−1)s−n).
這些概率 πi 和 πij 使人們能夠將Horvitz-Thompson 估計量應用於這種概率抽樣設計,併計算各種統計量分佈的前兩個矩。
最後,該解決方案是通用的,因為它允許簡單、易於分析的變化來控制採樣分佈。例如,您可以選擇網格上每行具有指定但不相等概率的單元格,或者使用類似甕的模型來隨著採樣的進行修改概率,從而控制列計數的頻率。