意外的样本行为

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

我目前正在运行一个小型模拟,并对结果感到恼火。 这是我的代码:

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)))
也会返回正确的结果。

非常感谢任何关于为什么会发生这种情况的见解!

r random simulation sample
1个回答
0
投票

你的基本事实是

"coke" then "zero", "light", "zero"

您的随机猜测选择“零”、“可乐”、“淡”之一,然后随机打乱这些值。所以你的最后三个值是这三个值的排列。但你的“基本事实”中有两次“零”。

sample
默认情况下永远不会选择一个值两次。您想更换样品吗?如果是这样,请添加
rest <- sample(options, 3, replace=TRUE)
,但这意味着您可能有“可乐”,“零”,“零”,“零”之类的东西。所以看看这对你的模拟是否有意义。目前尚不清楚您正在尝试建模哪种类型的流程。如果您更改为
return(c(rest, first))
,则意味着您至少有机会在最后三场比赛中两次获得零,而仅通过洗牌是不可能发生的
options

还使用

sum(k == ground_truth)
确保所有值都按准确顺序排列。如果这不是您想要的,您可能也需要更改它。

© www.soinside.com 2019 - 2024. All rights reserved.