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

时间:2016-02-27 12:44:27

标签: r matrix markov

这一直在我脑海中嘎嘎作响。

来自Broderick等人。 2006年(http://www.ascension-island.gov.ac/wp-content/uploads/2012/12/are-green-turtles-globally-endangered.pdf),他们创建了一个转换矩阵(表1),表明乌龟存活并成长到下一个年龄阶段的概率以及乌龟存活并成长为第i个年龄阶段的可能性。

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

表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]

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

1 个答案:

答案 0 :(得分:1)

你有一些潜在的问题或障碍可以克服。由于R使用列主索引,因此您需要使用byrow参数进行matrix调用。您还错过了值的最后一行中的0(与原始文章一样)。我没有看到使用字符值创建上部矩阵的任何意义,因此将演示一些数据输入方法。使用scan引入数据允许用户从命令行导入文本而无需重新输入所有内容。使用scan输入的默认模式是"数字"所以你不需要包含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中的矩阵幂可用于评估马尔可夫模型预测。