R:模拟鱼塘的种群

qxgroojn  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(100)
    • bounty还有3天到期**。回答此问题可获得+50声望奖励。stats_noob正在寻找一个答案从一个有信誉的来源:你好!这个问题的答案已经提供了-但我正在寻找替代和新的方法来解决这个问题!谢谢你,谢谢

我正在使用R编程语言。
我最近遇到了以下数学难题:

  • 假设有一个池塘,里面有100条鱼
  • 每一天,有5%的机会,人口的池塘增加了5%,其目前的人口
  • 池塘的数量有5%的可能性比当前数量减少5%池塘的数量有90%的可能性保持不变

我写了一些R代码来表示池塘在1000天内的大小:

set.seed(123)
n_days <- 1000
pond_population <- rep(0, n_days)
pond_population[1] <- 100

for (i in 2:n_days) {
    prob <- runif(1)
    if (prob <= 0.05) {
        pond_population[i] <- pond_population[i-1] + round(pond_population[i-1] * 0.05)
    } else if (prob > 0.05 && prob <= 0.10) {
        pond_population[i] <- pond_population[i-1] - round(pond_population[i-1] * 0.05)
    } else {
        pond_population[i] <- pond_population[i-1]
    }
}
 

plot(pond_population, type = "l", main = "Pond Population Over Time", xlab = "Day", ylab = "Population")

字符串


的数据

    • 我的问题:我对这个问题的以下修改很好奇-假设每天你从这个池塘里钓到10条不同的鱼,标记这些鱼,然后把它们放回池塘。自然地,有可能在某些日子里你会钓到你以前钓到的鱼--也有可能你以前钓到的一些鱼会死。 * 当你在第1000天完成捕鱼后,你会知道目前鱼塘中有多少鱼?*

我有兴趣学习如何编写一个模拟程序来回答这个问题-可以添加到我已经编写的代码中,以跟踪每天鱼塘人口的大小以及您已经看到的池塘中的个体鱼(例如,鱼)。想象一下,如果给每一条鱼分配一个唯一ID)。
我不确定如何开始这个问题-我想我可能必须使用“堆栈”或“队列”来解决这个问题,但我不熟悉这些概念以及它们在这里的使用方式。
有人能教我怎么做吗?
谢谢你,谢谢

8mmmxcuj

8mmmxcuj1#

这里有一个方法

library(tidyverse)

set.seed(123)

fish_pond_sim <- function(pop=100, days=1000, fished_per_day=10) {
    fish <- tibble(
            id = 1:pop,
            seen = FALSE,
            dead = FALSE
            )

    results <- tibble(
        population = pop,
        day = 1,
        seen = 0,
        dead = 0,
        seen_and_alive = 0
    )
    living <- pop
  for (i in 2:days) {
    prob <- runif(1)
    five_percent <- round(length(living) * 0.05)
    if (prob <= 0.05) {
      five_pct_sample <- sample(living, five_percent, replace = FALSE)
      fish[fish$id %in% five_pct_sample,]$dead <- TRUE
    } else if (prob > 0.05 && prob <= 0.10) {
      fish <- fish %>% add_row(
        id = max(fish$id):(max(fish$id) + five_percent), 
        seen = FALSE,
        dead = FALSE
      )
    }

    fished_sample <- sample(living, fished_per_day, replace = FALSE)
    fish[fish$id %in% fished_sample,]$seen <- TRUE
    living <- fish[!fish$dead,]$id
    results <- results %>% add_row(
      population = length(living),
      day = i,
      seen = sum(fish$seen),
      dead = sum(fish$dead),
      seen_and_alive = sum(fish$seen & !fish$dead)
    )
  }
    return(results)
}

result <- fish_pond_sim(1000, 1000) 

result %>% 
    ggplot(aes(x = day)) +
    geom_line(aes(y = population, color = "Population")) +
    geom_line(aes(y = seen_and_alive, color = "Seen and Alive")) + 
    theme_bw()

字符串


的数据
要获得您将知道的百分比,您可以这样做:

result %>%
    slice_tail() %>%
    pull(seen_and_alive_percentage) # 84.00424

相关问题