gpt4 book ai didi

r - 对时间序列数据使用马尔可夫链

转载 作者:行者123 更新时间:2023-12-03 23:17:12 25 4
gpt4 key购买 nike

这是我的数据框当前的结构(前 6 行)。我用的数据可用here .

ID  date        sps     time    pp  datetime            km
1 2012-06-19 MICRO 2:19 0 2012-06-19 02:19 80
2 2012-06-21 MUXX 23:23 1 2012-06-21 23:23 80
3 2012-07-15 MAMO 11:38 0 2012-07-15 11:38 80
4 2012-07-20 MICRO 22:19 0 2012-07-20 22:19 80
5 2012-07-29 MICRO 23:03 0 2012-07-29 23:03 80
8 2012-08-07 PRLO 2:04 0 2012-08-07 02:04 80

列代表:
  • ID : 识别号
  • date :观察日期
  • km :位置
  • sps : 物种代码
  • time : 观察时间
  • pp : 如果观察到的物种 ( sps ) 是捕食者 (1) 或猎物 (0)
  • 的代码
  • datetime : 转换 datetime行到 as.POSIXct格式

  • 我试图回答的问题:

    Does the likelihood of a predator (pp = 1) being observed increase with the number of times prey (pp = 0) are observed (e.g. is prey followed by predator more likely than prey followed by prey, etc.) at each location (km)?



    背景:
  • 对于每个位置 ( km ),我的数据中都有一个唯一的行,其中包含拍摄图像的时间以及照片是捕食者还是猎物的标识。
  • 每个地点都有许多捕食者和猎物的照片。
  • 对于每个位置,对捕食者和猎物的观察都是按时间顺序进行的。

  • 我正在尝试做的事情:
  • 对于每个位置,详尽地计算观测的时间对数量:猎物-猎物、猎物-捕食者、捕食者-猎物和捕食者-捕食者。
  • 对于每个位置,混洗(随机化)猎物/猎物的观察结果(即保持与观察到的猎物/猎物总数相同)并计算混洗产生的观察对的数量:猎物-猎物、猎物-捕食者、捕食者-猎物和捕食者捕食者。记录。计算步骤 (1) 中的观察次数与每次 shuffle 发现的观察次数之间的差异。重复 1000 次。这应该让我了解对猎物-猎物、猎物-捕食者、捕食者-猎物和捕食者-捕食者配对序列的原始观察有多大可能被赋予观察到的猎物/猎物比例。

  • 我的问题:

    假设马尔可夫链模型是回答我的问题的最合适的方法,我将如何在 R 中进行编码?

    在这一点上,我相信我应该使用的 R 包是 markovchain ,但我不知道如何将步骤 1 和 2 翻译成 R 代码。

    最佳答案

    这是一些代码:

    library(dplyr)
    library(markovchain)

    读入数据并格式化时间戳
    data <- read.table("~/Downloads/d1.txt", sep="\t", header=T, stringsAsFactors=F)
    data$datetime <- as.POSIXct(data$datetime)

    按时间排序
    data <- data[order(data$datetime, decreasing=F),]

    对于每个位置,创建一个 pp 序列
    data <- data %>% group_by(km) %>% summarize(pp_chain=list(pp)) %>% as.data.frame 
    pp_chains <- data$pp_chain; names(pp_chains) <- data$km

    在所有序列链上拟合马尔可夫模型
    fit <- markovchainFit(pp_chains)

    估计转移概率:
    print(fit$estimate)
    0 1
    0 0.9116832 0.08831677
    1 0.5250852 0.47491476

    这个矩阵表示从 0 到 0 的转换概率是 0.91;从 0 到 1 的转换概率是 0.088;等等。

    估计稳态:
    print(steadyStates(fit$estimate))
    0 1
    [1,] 0.8560214 0.1439786

    我们可以将转移概率与稳态进行比较。如果转换只是随机的,那么转换将不依赖于先前的状态,它们只会等于稳态值。

    事实并非如此,很明显,如果你有一个捕食者,你更有可能有另一个捕食者,反之亦然。

    关于r - 对时间序列数据使用马尔可夫链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48466825/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com