簡體   English   中英

R-生成總和為0到1的成對隨機變量

[英]R - Generate pairs of random variables that sum between 0 and 1

我需要從均勻分布生成2個隨機變量。 但是我需要以var1+var2<=1的方式進行操作,並且需要制作10000個。
到目前為止,這是我所做的:

library(dplyr)
alpha <- 2
beta <- 4          
y1 <- runif(10000,0,1)^(1/alpha)
y2 <- runif(10000,0,1)^(1/beta)

 data.frame(y1,y2 ) %>% 
 filter(y1+y2<=1) %>% # check that y1+y1 <=1
NROW()

運行此命令時,我只返回656行。 鑒於我過濾掉了這么多變量,我期望如此。 但是有沒有一種方法可以在不進行for loop情況下生成10000個這樣的組合?

您可以想到首先生成y1 現在,對於每個y1 ,以滿足條件y1+y2<=1的方式使用mapply生成y2

生成10此類值的示例:

set.seed(1)
y1 <- runif(10,0,1)^(1/alpha)
df <- data.frame(y1) 

# max argument for for runif for each value y1 to generate value for y2
df$y2 <- mapply(function(x)runif(1, 0, (1-x)^beta)^(1/beta), df$y1)

# Just for validation purpose
df$sum <- rowSums(df)

#           y1         y2       sum
# 1  0.5152753 0.32654913 0.8418245
# 2  0.6100196 0.25279232 0.8628119
# 3  0.7568708 0.22135023 0.9782210
# 4  0.9529994 0.03700120 0.9900006
# 5  0.4490901 0.51603705 0.9651272
# 6  0.9478342 0.04381548 0.9916497
# 7  0.9719441 0.02582249 0.9977666
# 8  0.8128947 0.18672554 0.9996202
# 9  0.7931671 0.16239609 0.9555632
# 10 0.2485684 0.70559725 0.9541657
y1 <- runif(10000, 0, .25)^(1/2)  # Max will be .5
y2 <- runif(10000, 0, .0625)^(1/4) # Max will be .5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM