R

如何生成具有特定均值的 1 到 4 之間的隨機整數?

  • January 5, 2020

我需要在 中生成 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 (假設 nskn, 當然)。

為了解釋所提出的解決方案,並且我希望證明**優雅的說法,**我提供了這個採樣方案的圖形解釋。佈置一個網格 k 行和 n 列。選擇第一行中的每個單元格。隨機(和統一)選擇 sn 行中剩餘的單元格 2 通過 k. 觀察的價值 i 在樣本中是在列中選擇的單元格數 i:

數字

4×100 網格由未選定單元格處的黑點和選定單元格處的彩色補丁表示。它被生成以產生平均值 2, 所以 s=200. 因此, 200100=100 細胞在頂部隨機選擇 k1=3 行。顏色代表每列中選定單元格的數量。有 28 那些, 47 雙打, 22 三分球,和 3 四肢。有序樣本對應於列中的顏色序列 1 通過列 n=100.

為了演示可擴展性和效率,這裡有一個R根據此方案生成樣本的命令。問題涉及案件 k=4,n=100sn 乘以所需的樣本平均值:

tabulate(sample.int((k-1)*n, s-n) %% n + 1, n) + 1

因為sample.int需要 O(sn) 時間和 O((k1)n) 空間,並且tabulate需要 O(n) 時間和空間,這個算法需要 O(max(sn,n)) 時間和 O(kn) 空間:這是可擴展的。和 k=4n=100 我的工作站只需要 12 微秒來執行這個計算:這很有效

(這裡是對代碼的簡要說明。注意整數 x1,2,,(k1)n 可以唯一地表示為 x=nj+i 在哪裡 j0,1,,k2i1,2,,n. 該代碼採用了這樣的示例 x, 將他們轉換為他們的 (i,j) 網格坐標,每個計算多少次 i 出現(範圍從 0 通過 k1 ) 並添加 1 每個計數。)

為什麼這可以被認為是有效的?一個原因是這種抽樣方案的分佈特性很容易計算出來:

  • 它是*可交換的:*任何樣本的所有排列都是等可能的。
  • 價值的機會 x1,2,,k 出現在位置 i, 我會寫成 πi(x), 通過基本的超幾何計數參數獲得πi(x)=(k1x1)((n1)(k1)snx+1)(n(k1)sn).
    例如,與 k=4, n=100, 和一個平均值 2.0 (以便 s=200 ) 機會是 π=(0.2948,0.4467,0.2222,0.03630), 與上述樣本中的頻率非常吻合。以下是圖表 π1(1),π1(2),π1(3),π1(4) 作為總和的函數:

圖 2

  • 價值的機會 x 出現在位置 i 而價值 y 出現在位置 j 類似地發現為πij(x,y)=(k1x1)(k1y1)((n1)(k1)snxy+2)(n(k1)sn).

這些概率 πiπij 使人們能夠將Horvitz-Thompson 估計量應用於這種概率抽樣設計,併計算各種統計量分佈的前兩個矩。

最後,該解決方案是通用的,因為它允許簡單、易於分析的變化來控制採樣分佈。例如,您可以選擇網格上每行具有指定但不相等概率的單元格,或者使用類似甕的模型來隨著採樣的進行修改概率,從而控制列計數的頻率。

引用自:https://stats.stackexchange.com/questions/443445