在看到您的模拟代码后进行编辑
我认为您没有考虑到某个数量也可以在一个样本中多次出现的事实。考虑到这一点,我们得到相同的结果。这是您修改后的代码:
fx02<-function(ll,n,k){
a1<-matrix(0,n,2)
samp1 <- sample(1:n, k, replace=TRUE)
samp2 <- sample(1:n, k, replace=TRUE)
a1[sort(unique(samp1)), 1] <- as.numeric(table(samp1))
a1[sort(unique(samp2)), 2] <- as.numeric(table(samp2))
sum(rowSums(a1)==1)/n
}
ss<-(1:60)*5 #The grid of values of k for which we'll compute the probability.
a4<-matrix(NA,length(ss),2)
for(i in 1:length(ss)){
a2<-ss[i]
a3<-c(lapply(1:1000,fx02,n=100,k=a2),recursive=TRUE);
a4[i,]<-c(a2,mean(a3))
}
plot(a4,xlab="k",ylab="frequency of distinct draw", pch=16, las=1)
abline(h=0.3697296, v=50)
max(a4[,2])
[1] 0.36971

原始答案
对于实验2(有放回),我认为某个数字恰好画一次的概率是:
或
Ponce=2k(n−1)(2k−1)(1/n)2k
Ponce=2k(n−1)(2k−1)n−2k
这可以通过一个简单的例子来检查,其中和。在这种情况下,恰好抽取某个数字一次的概率是。n=3k=22(4/9)2≈0.395
上述公式的最大值出现在:
或
其中被四舍五入到最接近的整数。正如@user603 在评论中已经提到的,对于较大的来说,这大约是对于,所以 50。和的最大概率将在左右(正如评论中已经计算的那样@user603)。
kmax=⌊−1[2(log(n+1)+log(1/n))]⌉
kmax=⌊−1[2(log(n+1)−log(n))]⌉
kmaxn/2nn=100kmax≈49.75n=100kmax=500.3697
我设置了一个模拟来检查这个结果R
:
prob.once <- vector()
draw.once <- function(n, k, sim=10000, repl=TRUE){
for ( i in 1:sim ) {
samp1 <- sample(1:n, size=k, replace=repl)
samp2 <- sample(1:n, size=k, replace=repl)
if ((is.element(1, samp1) & !is.element(1, samp2) & !is.element(1, samp1[duplicated(samp1)])) |
(!is.element(1, samp1) & is.element(1, samp2) & !is.element(1, samp2[duplicated(samp2)])) ){
prob.once[i] <- 1
} else {
prob.once[i] <- 0
}
}
mean(prob.once)
}
krepl <- 1:300
probs.repl <- sapply(krepl, FUN=draw.once, n=100, sim=20000, repl=TRUE)
plot(probs.repl~krepl, pch=16, type="p", lwd=2, las=1, ylab="Probability", xlab="k", col="steelblue")
abline(h=0.3697296)
abline(v=50)

模拟结果似乎证实了上述考虑。