我在两个数据帧上执行了非度量多维缩放(NMDS),每个数据帧包含不同的变量,但是对于相同的站点。我正在使用纯素包:
> head (ResponsesS3)
R1_S3 R10_S3 R11_S3 R12_S3 R2_S3 R3_S3 R4_S3 R6_S3 R7_S3 R8_S3 R9_S3
4 0 0 0 0 0 1 0 0 0 0 0
5 0 0 0 0 0 1 0 0 0 0 0
7 1 0 0 1 0 0 0 0 0 0 0
12 0 0 0 0 0 1 0 0 0 0 0
14 2 2 0 0 0 0 2 0 0 0 0
16 0 0 1 0 0 0 0 0 0 1 0
> head (EnvtS3)
Dep_Mark Dep_Work Dep_Ext Use_For Use_Fish Use_Ag Div_Prod
4 0.06222836 1.0852315 0.8367309 1.1415929 1.644670 0.1006964 0.566474
5 0.25946808 1.3342266 0.0000000 1.7123894 0.822335 0.0000000 0.283237
7 2.20668862 0.0000000 0.8769881 0.4280973 0.822335 0.5244603 0.849711
12 2.26323697 0.0000000 0.8090991 1.1415929 0.000000 1.4957609 1.416185
14 1.65107675 0.5195901 0.2921132 0.5707965 0.822335 1.7873609 0.849711
16 1.82230225 0.4760163 0.1915366 2.2831858 0.000000 1.6614904 0.849711
> ResponsesS3.mds = metaMDS (ResponsesS3, k =2, trymax = 100)
> EnvtS3.mds = metaMDS (EnvtS3, k =2, trymax = 100)
我使用procrustean叠加拟合结果
> pro.ResponsesS3.EnvtS3.mds <- procrustes(ResponsesS3.mds,EnvtS3.mds)
我最感兴趣的是了解每个数据集中的变量如何组合在一起。我想使用plot()函数返回来自ResponsesS3和EnvtS3的变量图,而不是站点(这是默认情况下plot函数返回的)。
这可能吗?
答案 0 :(得分:0)
不,这是不可能的。您会发现的问题是,如果您尝试procrustes()
,则两个数据集中会有不同数量的变量导致procrustes(..., scores = "species")
方法失败。
即使您符合procrustes(..., score = "sites")
(默认值),如果我们能提取物种信息,您建议谁绘制图?当前的绘图将一个matric的行与其他行的行连接起来;这适用于默认设置,因为假设数据集是在相同位置/站点上的测量值。但物种/变量是不可能的。更根本的是,我们应该如何将物种与环境变量配对?
最后,您试图了解变量如何比较,但是一旦计算出不相似性,就会使用一种基本上抛弃此信息的方法。
我会看一下coinertia分析的方法,其中 cocorresp 包中有一个粗略的界面,而 ade4 包中有一个更完整的界面。如果您发现自己想要比较两组物种数据,请尝试进行cocorrespondence分析, cocorresp 适合。
答案 1 :(得分:0)
像Gav所说,这些点必须一对一地匹配Procrustes旋转。但是,一旦进行了Procrustes旋转,您就可以自然地将其应用于具有相同列数的其他矩阵。列数是至关重要的:如果你有2维NMDS,你的变量也必须映射到这2个暗淡。函数metaMDS()
将为您提供与行分数排序相对应的列分数,但我不知道这些分数对您的情况有多大。在素食主义者中旋转这些分数的最简单方法是使用predict
方法和newdata
。继续你的例子:
predict(pro.ResponsesS3.EnvtS3.mds, newdata=scores(EnvtS3.mds, "species"))
这样只会旋转您的列分数("species"
),就像轮换您的行分数一样。
我们不知道你想要达到的目标,实际上可能有更好的方法来实现你的目标(检查Gavin的答案)。但是,这将进行轮换。