如何在每次绘制时使用不同大小的输入重复 rbinom()?

问题描述 投票:0回答:1

我正在尝试编写 R 代码,该代码将从二项式分布中提取,但会对数据框中指定列中的每个值重复。 我在 r 中生成了一个数据框,其中第一列“Lambda”代表年度人口变化。我重复该值 50 次,因此数据框中的每一行代表一年。我创建了第二列“Truth.Pop”来表示假设初始人口规模 = 50,000 时预计的 50 年真实人口规模。

当我尝试填写第 3 栏“Avail1”时遇到问题。我希望 Avail1 列中的每一行都使用 Total.Pop 列中相应的人口规模和 0.82 的概率从二项式分布中抽取。

lambda<-as.data.frame(vec_rep(0.99,50)) # create dataframe
colnames(lambda)<-c("Lambda")
lambda$Truth.Pop<-vec_rep(NA,50) # projected lambda for 50 yrs
lambda[1,2]=50000 # initial population size

for (i in 2:50) { # fill in the remaining rows
  lambda$Truth.Pop[i] <- lambda[i-1,2]*lambda[i,1]
}
# issues begin here: 
lambda$Avail1<-vec_rep(NA,50)
lambda[1,3]<-rbinom(1,lambda[1,2],0.82)
rbinom(50,lambda$Truth.Pop,0.82)

我尝试编写一个 for 循环,其结构与我用来填写第二列的循环非常相似,它将替换上面的最后一行代码:

for (i in 2:50) {
  lambda$Avail1[i]<-rbinom(1,lambda$Truth.Pop[i],0.82)
}
# ALTERNATIVE 
for (i in seq_len(nrow(lambda))) {
  lambda[i,3]<-rbinom(1,lambda[i,2],0.82)
}

我还以各种方式尝试了 sapply()、lapply() 和replicate() 函数,但没有一个起作用。此外,在 rbinom() 中将 n=1 更改为 n=50 不起作用。

在任何尝试中,最常见的结果是代码运行,但 Avail1 列中的前三个值是唯一填充的值,其余值均为 NA。我实现的另一个结果是所有值都被填充,但它们都是相同的。这种情况不应该发生,因为每行数据的每个大小输入都会发生变化。

提前非常感谢。

r for-loop repeat distribution na
1个回答
0
投票

rbinom
期望
size
参数为整数值。我建议使用
round
floor
as.integer
:

lambda <- data.frame(Truth.Pop = 5e4*0.99^(0:49))
transform(lambda,
          AvailNA = rbinom(50, Truth.Pop, 0.82),
          Avail = rbinom(50, round(Truth.Pop), 0.82))
#> Warning in rbinom(50, Truth.Pop, 0.82): NAs produced
#>    Truth.Pop AvailNA Avail
#> 1   50000.00   41082 41062
#> 2   49500.00   40502 40563
#> 3   49005.00   40298 40275
#> 4   48514.95      NA 39775
#> 5   48029.80      NA 39216
#> 6   47549.50      NA 38930
#> 7   47074.01      NA 38654
#> 8   46603.27      NA 38138
#> 9   46137.23      NA 37992
#> 10  45675.86      NA 37460
#> 11  45219.10      NA 37054
#> 12  44766.91      NA 36595
#> 13  44319.24      NA 36284
#> 14  43876.05      NA 35926
#> 15  43437.29      NA 35530
#> 16  43002.92      NA 35210
#> 17  42572.89      NA 34954
#> 18  42147.16      NA 34602
#> 19  41725.69      NA 34237
#> 20  41308.43      NA 33928
#> 21  40895.35      NA 33507
#> 22  40486.39      NA 33147
#> 23  40081.53      NA 32762
#> 24  39680.71      NA 32693
#> 25  39283.91      NA 32262
#> 26  38891.07      NA 31893
#> 27  38502.16      NA 31585
#> 28  38117.14      NA 31304
#> 29  37735.96      NA 30923
#> 30  37358.60      NA 30754
#> 31  36985.02      NA 30376
#> 32  36615.17      NA 30014
#> 33  36249.02      NA 29777
#> 34  35886.53      NA 29413
#> 35  35527.66      NA 29212
#> 36  35172.38      NA 28788
#> 37  34820.66      NA 28710
#> 38  34472.45      NA 28222
#> 39  34127.73      NA 28000
#> 40  33786.45      NA 27654
#> 41  33448.59      NA 27344
#> 42  33114.10      NA 27132
#> 43  32782.96      NA 27028
#> 44  32455.13      NA 26546
#> 45  32130.58      NA 26123
#> 46  31809.27      NA 26089
#> 47  31491.18      NA 25875
#> 48  31176.27      NA 25448
#> 49  30864.51      NA 25272
#> 50  30555.86      NA 24895
© www.soinside.com 2019 - 2024. All rights reserved.