我目前正在运行一个小型模拟,并对结果感到恼火。 这是我的代码:
ground_truth <- c("coke", "zero", "light", "zero")
options <- c("zero", "coke", "light")
random_guess<- lapply(1:10000, function(x){
first <- sample(options, 1)
rest <- sample(options, 3)
return(c(first, rest))
})
final_res <- lapply(random_guess, function(k) {
sum(k == ground_truth)
}) %>% unlist()
table(final_res)
我注意到,无论我生成随机猜测的频率如何,代码都不会返回与基本事实的完美匹配,这似乎不太可能(不可能)。我对代码做了一个小调整,并更改了
return(c(first,rest))
return(c(rest, first))
,现在我确实时不时地与事实完全匹配。然而,这真的让我很困惑,因为我认为一切都是随机选择的。进行以下更改return(sample(c(first,rest)))
也会返回正确的结果。
非常感谢任何关于为什么会发生这种情况的见解!
你的基本事实是
"coke" then "zero", "light", "zero"
您的随机猜测选择“零”、“可乐”、“淡”之一,然后随机打乱这些值。所以你的最后三个值是这三个值的排列。但你的“基本事实”中有两次“零”。
sample
默认情况下永远不会选择一个值两次。您想更换样品吗?如果是这样,请添加rest <- sample(options, 3, replace=TRUE)
,但这意味着您可能有“可乐”,“零”,“零”,“零”之类的东西。所以看看这对你的模拟是否有意义。目前尚不清楚您正在尝试建模哪种类型的流程。如果您更改为return(c(rest, first))
,则意味着您至少有机会在最后三场比赛中两次获得零,而仅通过洗牌是不可能发生的options
还使用
sum(k == ground_truth)
确保所有值都按准确顺序排列。如果这不是您想要的,您可能也需要更改它。