1

混合データ(因数分解、順序付け、数値)である環境データセットがあります。rda()関数に次のエントリ メソッドを使用したいと思います。

rda(X= Community, Y=Constrained, Z= Conditional)

ただし、この方法で 3 つのデータ フレームすべてを入力すると、それらは行列である必要があります。制約付きまたは条件付きのデータ フレームを行列に変換したくありません。それらのデータを因数分解して並べ替えたからです。それらを正しい形式で入力するために私が見つけた他の唯一の方法は、それらをすべてのベクトルに個別に分解することでした. これは、手動で行っている場合は機能しますが、いくつかの条件付きおよび制約付きのデータ フレームを反復処理する必要があります。誰にもアイデアはありますか?

例:

library(vegan)
data(dune)
data(dune.env)

rda(dune ~ dune.env$A1 + dune.env$Moisture + dune.env$Management + 
    Condition(dune.env$Use + dune.env$Manure)) 

これは私がやりたいことですが、実行するには時間がかかり、データのセットを反復するコードを書くのは非常に困難です

rda(X=dune, Y=dune.env[,1:3], Z=dune.env[,4:5]) 

制約付き変数を 1 つのデータ フレームに配置し、条件付き変数を別のデータ フレームに配置できるので、これが可能であれば素晴らしいことですが、それらは行列である必要があり、順序変数と因子変数が台無しになります。

助けてくれてどうもありがとう

ロブ

4

1 に答える 1

1

rda()モードで呼び出されると、データフレームを取得しrda(X, Y, Z)ます。の議論は?rdaコミュニティデータマトリックスについて取りますが、データフレームは受け入れ可能であり、それらの入力を経由as.matrix()して変換するときに想定されることさえあり、そこに問題があります。

rda()数式で呼び出すのはばかげています。dataあなたができるように議論があります:

rda(dune ~ A1 + Moisture + Management + Condition(Use + Manure), data = dune.env)

これはやや簡単で冗長ではありません。

ショートカットを取ることもできます、

rda(dune ~ . + Condition(Use + Manure), data = dune.env)

モデルの適合に必要な変数を利用.し、データオブジェクトにのみ含めることによって。

そして、Rに式を作成させることで、これを行うことができます。

nams <- names(dune.env)
form <- formula(paste("dune ~", paste(nams[1:3], collapse = " + "),
                      "+ Condition(", paste(nams[4:5], collapse = " + "), ")"))
rda(form, data = dune.env)

これは複雑に見えるかもしれませんが、関数に簡単にラップできます。

buildF <- function(X, Y, Z, data) {
  nams <- names(data)
  X <- deparse(substitute(X))
  f <- formula(paste(X, " ~", paste(nams[Y], collapse = " + "),
               "+ Condition(", paste(nams[Z], collapse = " + "), ")"))
  environment(f) <- parent.frame()
  f
}

使用中は次のようになります。

> buildF(dune, 1:3, 4:5, data = dune.env)
dune ~ A1 + Moisture + Management + Condition(Use + Manure)
> f <- buildF(dune, 1:3, 4:5, data = dune.env)
> f
dune ~ A1 + Moisture + Management + Condition(Use + Manure)
> rda(f, data = dune.env)
Call: rda(formula = dune ~ A1 + Moisture + Management +
Condition(Use + Manure), data = dune.env)

              Inertia Proportion Rank
Total         84.1237     1.0000     
Conditional   35.3628     0.4204    6
Constrained   27.8434     0.3310    6
Unconstrained 20.9175     0.2487    7
Inertia is variance 
Some constraints were aliased because they were collinear (redundant)

Eigenvalues for constrained axes:
  RDA1   RDA2   RDA3   RDA4   RDA5   RDA6 
14.674  4.718  2.756  2.346  2.085  1.265 

Eigenvalues for unconstrained axes:
   PC1    PC2    PC3    PC4    PC5    PC6    PC7 
6.6269 4.3091 3.5491 2.5465 2.3403 0.9335 0.6121 

[これは他の出力とまったく同じですが、rda()表示されていません。]

于 2013-01-25T23:22:21.073 に答える