使用海龟数据在 R 中创建转换矩阵

Creating a transition matrix in R using sea turtle data

这件事在我脑海中盘旋了一段时间。

来自 Broderick 等人。 2006年(http://www.ascension-island.gov.ac/wp-content/uploads/2012/12/are-green-turtles-globally-endangered.pdf),他们创建了一个转移矩阵(Table 1),用于乌龟存活和成长到下一个年龄的概率-class和乌龟存活和成长的概率到第i岁-class。

谁能告诉我如何在 R 中创建这种矩阵?

Table 1.

[Age-class                  S1 S2 S3 S4 S5 S6
Structure S1 (egg-neonate) P1 F2 F3 F4 F5 F6
S2 (pelagic individual)    G1 P2 0 0 0 0
S3 (benthic individual)    0 G2 P3 0 0 0
S4 (sub-adult)             0 0 G3 P4 0 0
S5 (maturing adult)        0 0 0 G4 P5 0
S6 (adult)                 0 0 0 0 G5 P6
Values S1   0 0 0 F4 F5 F6
S2          0.4394 0.5704 0 0 0 0
S3          0 0.0741 0.8413 0 0 0
S4          0 0 0.0391 0.8405 0 0
S5          0 0 0 0.0069 0.7782 0
S6          0 0 0 0.1700 0.9482]

此外,使用此矩阵,您可以计算存活到成年的幼龟的比例。

您有几个潜在的问题或障碍需要克服。由于 R 使用列主索引,您需要为 matrix 调用使用 byrow 参数。您还在值的最后一行中缺少 0(原始文章也是如此)。我看不出使用字符值创建上部矩阵有任何意义,因此将演示几个数据输入方法。使用 scan 引入数据允许从命令行导入文本而无需重新键入所有内容。 scan 的默认输入模式是 "numeric",因此您不需要包含 what 参数:

valsRMI3 = c(0.3299, 53.4639, + 90.6716)
valsRMI4 <-c(0.2474, 40.0980, 68.0037)  # copied from the PDF file

mvals <- scan(text="0.4394 0.5704 0 0 0 0
 0 0.0741 0.8413 0 0 0
 0 0 0.0391 0.8405 0 0
 0 0 0 0.0069 0.7782 0
 0 0 0 0 0.1700 0.9482")  # added the extra 0 after noting incorrect number of input values

为 RMI=3 的情况创建一个带有行和列标签的矩阵(用于索引):

matrix( c( 0,0,0,valsRMI3,  # the first row
           mvals),          # rest of matrix values
        nrow=6, 
        byrow=TRUE, 
        dimnames=list( paste0("S", 1:6), paste0("S", 1:6))  )

#--------------
       S1     S2     S3     S4      S5      S6
S1 0.0000 0.0000 0.0000 0.3299 53.4639 90.6716
S2 0.4394 0.5704 0.0000 0.0000  0.0000  0.0000
S3 0.0000 0.0741 0.8413 0.0000  0.0000  0.0000
S4 0.0000 0.0000 0.0391 0.8405  0.0000  0.0000
S5 0.0000 0.0000 0.0000 0.0069  0.7782  0.0000
S6 0.0000 0.0000 0.0000 0.0000  0.1700  0.9482

Matrixexpm 包中提供了矩阵指数函数,expm 中提供了矩阵幂函数,评估马尔可夫建模预测可能需要这些函数。