使用海龟数据在 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
Matrix
和 expm
包中提供了矩阵指数函数,expm
中提供了矩阵幂函数,评估马尔可夫建模预测可能需要这些函数。
这件事在我脑海中盘旋了一段时间。
来自 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
Matrix
和 expm
包中提供了矩阵指数函数,expm
中提供了矩阵幂函数,评估马尔可夫建模预测可能需要这些函数。