使用r中的集合概率从数据集中进行选择

使用r中的集合概率从数据集中进行选择,r,selection,sample,sampling,R,Selection,Sample,Sampling,我正在为我正在做的选择实验进行一些模拟。 作为其中的一部分,我想从我已经使用概率模拟选择的数据集中进行选择 首先,我使用起始频率来创建一个初始总体,其中得到1的概率为0.25,得到2的概率为0.5,得到3的概率为0.25。1、2和3代表3种不同的基因型 N <- 400 my_prob = c(0.25,0.5,0.25) N1=sample(c(1:3), N, replace= TRUE, prob=my_prob) P1 <-data.frame(N1) 现在我想在我的群体中

我正在为我正在做的选择实验进行一些模拟。 作为其中的一部分,我想从我已经使用概率模拟选择的数据集中进行选择

首先,我使用起始频率来创建一个初始总体,其中得到1的概率为0.25,得到2的概率为0.5,得到3的概率为0.25。1、2和3代表3种不同的基因型

N <- 400
my_prob = c(0.25,0.5,0.25)
N1=sample(c(1:3), N, replace= TRUE, prob=my_prob)
P1 <-data.frame(N1)
现在我想在我的群体中模拟选择,其中一个纯合子被选择,而杂合子被部分选择,所以在这个例子中概率为1-s^2,1-s,1,其中s=0.2。 最初,我使用sample_frac函数分别对每组进行采样,然后重新编译数据集

s <- 0.2
S1homo<- filter(P1, N1==1) %>%
  sample_frac((1-s)^2, replace= FALSE)
S1hetero <-filter(P1, N1==2) %>%
  sample_frac((1-s), replace= FALSE)
S1others <-filter(P1, N1==3)
S1 <- rbind(S1homo, S1hetero, S1others)
问题是它返回的数字没有任何变化,这是不现实的,例如,当我设置s=0.2时,S1homo总是返回1值的64%,而在我的初始总体中,每个值的数字都有一些变化

所以我想知道是否有一种方法可以从我的P1群体中选择,使用不同基因型的1-s^2,1-s,1的集合概率,这样我就不会总是得到每个被选择的群体返回的完全相同的数字。 我尝试使用我以前使用的示例函数来实现这一点,但无法使其正常工作

# sel is done to give the total number of values there will be in the new population when times by N
sel <-((1-s)^2 + 2*(1-s)+1)/4 
S1 <-sample(P1, N*sel, replace=FALSE, prob=c((1-s)^2,(1-s),1))
sample.intlengthx、大小、替换、问题中出错: 当“replace=FALSE”时,无法获取大于总体的样本


我不能100%确定您想做什么,但如果您希望1-s^2是随机选择的元素包含在样本中的概率,而不是选择的确切百分比,您可以使用样本n而不是样本frac,随机选择n来反映该比率:

S1homo<- filter(P1, N1==1) %>%
    sample_n(rbinom(1,sum(N1==1),(1-s)^2))

像这样使用rbinom可能有点间接,但我看不到另一种方法可以轻松地使用%>%。

如果不先放回任何一个球,就无法从5个球中抽取6个球的样本。选择replace=TRUE可在采样后替换对象,从而允许采样对象比正在采样的对象多。不过,你好,Renu,我不想采样的对象比初始对象大。我用N*sel做的是得到一个函数的数值,这个数值要小于初始值,所以在这篇文章中,我试图让它从400个群体中选择324个个体,如果这有意义的话,那么长度p1是1,小于N*sel。也许你想取样N1或P1$N1?啊,我明白了。是的,这两种方法都可以用样本长度来解决问题,但现在我有一个问题,我提供的不正确概率的数量。Hi John,每次我这样做时,它都会给我一个不同的数字,这很好。我能问一下这个函数是怎么做到的吗?只是为了让我知道未来reference@SamFenton如果选择项目的概率为p,则选择的项目数量为二项随机变量,参数为n和p,其中n=试验次数=从中选择的集合大小。函数rbinom模拟此随机变量,以确定要选择的项目数,然后采样进行实际采样。如果答案对您有效,您可以随时将其标记为已接受