【问题标题】:R programming (Monte Carlo Simulation)R 编程(蒙特卡洛模拟)
【发布时间】:2018-09-24 13:33:00
【问题描述】:

您好,我想问一下如何使用 Monte Carlo Simulation 抽取 50 个虹膜数据实例(其中包含 150 个实例)? 任何想法? 非常感谢

【问题讨论】:

  • iris[sample.int(nrow(iris),50),] ?不过,您的问题非常广泛...

标签: r programming-languages simulation montecarlo


【解决方案1】:

这是在基础 R 中执行此操作的一种方法。

您可以使用替换对 50 行进行采样

iris[sample(1:nrow(iris), size = 50, replace = TRUE), ]

要制作一个列表,例如,包含 50 行的 1000 个样本并进行替换,您可以使用 lapply

iris_mc_samps <- lapply(1:1000, function(x) iris[sample(1:nrow(iris), size = 50, replace = TRUE), ])

【讨论】:

    【解决方案2】:

    我们可以使用sample_n from 选择50行替换。

    # Set seed for reproducibility
    set.seed(12800)
    
    library(dplyr)
    library(purrr)
    
    iris_sub <- iris %>% sample_n(size = 50, replace = TRUE)
    

    在这里,我展示了一种方法,可以使用 包中的 map_dfr 重复此过程 1000 次。最终结果是一个包含 50000 行的数据框。创建了一个名为Time 的新列来记录采样次数。

    iris_sample <- map_dfr(1:1000, ~iris %>%
                             sample_n(size = 50, replace = TRUE) %>%
                             mutate(Time = .x))
    

    【讨论】:

    • 如果我想使用 Morte Carlo 模拟从 iris 数据中抽取 50 行,我只使用第一个代码,或者我使用第二个代码,将其修改重复 50 次,每次只取 1 个样本。 iris_sample % sample_n(size = 1, replace = TRUE) %>% mutate(Time = .x))
    • @TwkWeiKeong 你是在问我应该使用哪个,还是说这是你想做的?我想你的提议是好的。如果此答案解决了您的问题,请考虑接受。
    • 我在问我应该选择哪一个。这两种方法是否相似?提前致谢
    • 是的,他们和我很相似。第一个在计算时间和代码简单性方面更好。
    • 我可以再问你 1 个问题吗?我想通过使用 Jackknife 重采样从 150 个虹膜数据中抽取 50 个实例。可能吗? stackoverflow.com/questions/49834613/…
    猜你喜欢
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2016-08-19
    • 2018-04-03
    • 2023-03-05
    • 2013-03-10
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多