使用 sapply 以预定义的概率进行采样
Using sapply to sample with pre-defined probability
我正在使用具有预定义概率的 sample
函数。
我编写了这段代码并且运行良好。但是,无法检查我的工作是否正确。有人会检查我的工作并对其进行评估吗?
df <- structure(list(A=c("A","B","C","D","E","F","G"),
probs=c(0.2,0.4,0.6,0.8,0.3,0.7,0.9)),
Names = c("name","probs"), class = "data.frame", row.names = c(1:7))
df$pred<-sapply(df$probs,function(x) sample(c("Yes","No"),1,prob=c(x,1-x),replace=TRUE))
在df
中,probs
是预定义的说"yes"
的概率。我对每个 probs
使用了 sapply
,并应用了 sample
函数。
检查这一点的一种方法是增加样本量并检查比例。
n <- 1e6
set.seed(123)
sapply(df$probs,function(x)
table(sample(c("Yes","No"),n,prob=c(x,1-x),replace=TRUE))/n)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#No 0.80006 0.599886 0.40003 0.200072 0.699906 0.299314 0.100044
#Yes 0.19994 0.400114 0.59997 0.799928 0.300094 0.700686 0.899956
我们可以看到所有 "Yes"
值几乎与 df$probs
相同,我们可以说我们所拥有的是正确的。
另一个选项使用 "purrr"
library(purrr)
sample_fun <- function(probs){
sample(c("Yes", "No"), size = 10^6, prob = c(probs, 1 - probs ), replace = T)
}
map(df$probs, ~ sample_fun(.x)) %>%
map_dbl( ~ mean(.x == "Yes")) %>%
purrr::set_names(df$A)
我正在使用具有预定义概率的 sample
函数。
我编写了这段代码并且运行良好。但是,无法检查我的工作是否正确。有人会检查我的工作并对其进行评估吗?
df <- structure(list(A=c("A","B","C","D","E","F","G"),
probs=c(0.2,0.4,0.6,0.8,0.3,0.7,0.9)),
Names = c("name","probs"), class = "data.frame", row.names = c(1:7))
df$pred<-sapply(df$probs,function(x) sample(c("Yes","No"),1,prob=c(x,1-x),replace=TRUE))
在df
中,probs
是预定义的说"yes"
的概率。我对每个 probs
使用了 sapply
,并应用了 sample
函数。
检查这一点的一种方法是增加样本量并检查比例。
n <- 1e6
set.seed(123)
sapply(df$probs,function(x)
table(sample(c("Yes","No"),n,prob=c(x,1-x),replace=TRUE))/n)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#No 0.80006 0.599886 0.40003 0.200072 0.699906 0.299314 0.100044
#Yes 0.19994 0.400114 0.59997 0.799928 0.300094 0.700686 0.899956
我们可以看到所有 "Yes"
值几乎与 df$probs
相同,我们可以说我们所拥有的是正确的。
另一个选项使用 "purrr"
library(purrr)
sample_fun <- function(probs){
sample(c("Yes", "No"), size = 10^6, prob = c(probs, 1 - probs ), replace = T)
}
map(df$probs, ~ sample_fun(.x)) %>%
map_dbl( ~ mean(.x == "Yes")) %>%
purrr::set_names(df$A)