2013-10-08 70 views
0

我正在做一個失敗分析,我喜歡嘗試一些不同的場景和一些隨機試驗。到目前爲止,我已經通過鑲嵌套件完成了這項工作,並且工作效果很好。 在一個特定的場景中,我想用不同的分佈生成(半)隨機數的向量。到目前爲止沒有問題。生成一個具有特定負數的隨機向量

現在我想定義此向量中負數的數量。 例如,我想在25個數字的向量中有0-5個負數。 我以爲我可以用rbinom(n=25,prob=5/25,size=1)之類的東西先獲得5個隨機數,但當然是5/25,25次可以超過5個。這似乎是死路一條。 我可以用一些for循環來完成它,但可能更容易。 我已經嘗試了各種樣本,seq,shuffle組合,但是目前爲止我無法使其工作。

有沒有人有任何想法或建議?

+1

什麼分佈將絕對值您數字來自?他們會是整數嗎?連續? –

+0

@ user1549537嗨,如果有答案解決了你的問題,你可以點擊「接受它」,讓其他人可以看到它嗎?謝謝 – agenis

回答

3

如果你有一個向量x,其中所有元素都是> = 0,假設從泊松得出:

x = rpois(25, lambda=3) 

可以使負的隨機5做

x * sample(rep(c(1, -1), c(length(x) - 5, 5))) 

這是可行的,因爲

rep(c(1, -1), c(length(x) - 5, 5)) 

# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 

sample(rep(c(1, -1), c(length(x) - 5, 5)))只是混洗起來隨機:

sample(rep(c(1, -1), c(length(x) - 5, 5))) 
# [1] 1 1 -1 1 1 1 1 1 1 1 1 -1 1 1 1 -1 -1 1 1 1 -1 1 1 1 1 
+1

如果分佈屬性擴展到整個25-矢量上,其中一些條目具有負數,而不是繪製一個25-矢量,然後隨機地使5個條目爲負,那就更困難了。它類似於抽樣具有固定行和列總和的二進制矩陣。首先限制一件事情使其變得更容易,但很少滿足所追求的所需分配屬性。這不是對你的方法的敲門磚,只是一個評論,一般來說,必須採用MCMC型方法來同時滿足許多分佈特性。 – ely

0

我可以提出一個非常簡單的解決方案,保證5個負值和任何連續分佈的工作。這個想法就是排序的矢量和的。減去最大第六每個值:

x <- rnorm(25) 
res <- sort(x, T)[6] - x 
#### [1] 0.4956991 1.5799885 2.4207497 1.1639569 0.2161187 0.2443917 -0.4942884 -0.2627706 1.5188197 
#### [10] 0.0000000 1.6081025 1.4922573 1.4828059 0.3320079 0.3552913 -0.6435770 -0.3106201 1.5074491 
#### [19] 0.6042724 0.3707655 -0.2624150 1.1671077 2.4679686 1.0024573 0.2453597 
sum(res<0) 
#### [1] 5 

它也適用於離散分佈,但只有當不存在約束..