我正在尝试根据均匀分布生成一个随机变量,该变量也取决于随机变量。
理想情况下,我也希望z2
也是随机变量。
例如,
set.seed(123)
#generate first random variable z1
z1 <- runif(10,0,1)
#generate secondrandom variable z2
z2 <- ifelse(z1>= 0.7, runif(1,0.6,0.9), runif(1,0.2,0.5))
df <- data.frame(z1,z2)
但是,如果您查看z2
,则它仅包含两个级别。
z1 z2
1 0.2875775 0.3360002
2 0.7883051 0.8870500
3 0.4089769 0.3360002
4 0.8830174 0.8870500
5 0.9404673 0.8870500
6 0.0455565 0.3360002
7 0.5281055 0.3360002
8 0.8924190 0.8870500
9 0.5514350 0.3360002
10 0.4566147 0.3360002
我们可以生成1000个数字并汇总结果。
set.seed(123)
#generate first random variable z1
z1 <- runif(1000,0,1)
#generate secondrandom variable z2
z2 <- ifelse(z1>= 0.7, runif(1,0.6,0.9), runif(1,0.2,0.5))
table(df$z2)
0.352099318057299 0.655542095610872
707 293
答案 0 :(得分:2)
您使用矢量化方法计算z2
。因此,当您使用runif(1 ,0.6,0.9)
时,实际上只提取了一个数字。但是,如果执行runif(length(z1) ,0.6,0.9)
,则会拉长z1的长度。
set.seed(123)
#generate first random variable z1
z1 <- runif(1000,0,1)
#generate second random variable z2
z2 <- ifelse(z1 >= 0.7, runif(length(z1) ,0.6,0.9), runif(length(z1),0.2,0.5))
df <- data.frame(z1,z2)
table(df$z2)
答案 1 :(得分:0)
您的runif(1,0.6,0.9)
和runif(1,0.2,0.5)
函数仅运行一次。它们不会在您每次将z1
与0.7进行比较时运行。因此,最终只能得到z2
的两个值。
您可以考虑再次使用replicate
来运行runif
函数。更新:或像{DJV建议的length(z1)
。