8

R の manova 関数を使用して多変量 ANOVA を実行しようとしています。私の問題は、依存変数のリストをすべて手動で入力せずに渡す方法を見つけようとしていることです。名前。私のデータは、「単位」が従属変数 (因子) であるデータ フレームにあり、残りの列はさまざまな数値応答変数です。例えば

  unit C_pct  Cln C_N_mol Cnmolln C_P_mol N_P_mol
1    C 48.22 3.88   53.92    3.99 3104.75   68.42
2    C 49.91 3.91   56.32    4.03 3454.53   62.04
3    C 50.75 3.93   56.96    4.04 3922.01   69.16
4   SH 50.72 3.93   46.58    3.84 2590.16   57.12
5   SH 51.06 3.93   43.27    3.77 2326.04   53.97
6   SH 48.62 3.88   40.97    3.71 2357.16   59.67

manova 呼び出しを次のように記述した場合

fit <- manova(cbind(C_pct, Cln) ~ unit, data = plots) 

それは正常に動作しますが、列の長いリストを1つずつ名前を付けずに渡すことができるようにしたいと思います。

fit <- manova(cbind(colnames(plots[5:32])) ~ unit, data = plots) 

また

fit <- manove(cbind(plots[,5:32]) ~ unit, data = plots)

エラーが発生します

"Error in model.frame.default(formula = as.matrix(cbind(colnames(plots[5:32]))) ~  : 
  variable lengths differ (found for 'unit')

cbind の使い方が間違っているためだと思いますが、わかりません。どんな助けでも大歓迎です!フォーマットが荒い場合は申し訳ありませんが、これは投稿された最初の質問です。

編集:両方の方法(実際には3つすべて)が機能します。皆さんありがとう!

4

2 に答える 2

9

manovaは、ほとんどの R モデリング関数と同様に、データセットで見つかった変数の名前から式を構築します。ただし、 を渡す場合、colnames技術的には、これらの変数の名前を表す文字列を渡します。したがって、関数はそれらをどうするかを知らず、チョークします。

実際にこれを回避できます。数式の LHS は、行列に解決する必要があるだけです。の使用は、データ フレームの環境でcbind(C_pct, Cln, ...)引数C_pct、などの名前を評価することによって行列を取得する方法です。Clnただし、最初にマトリックスを提供する場合は、評価は必要ありません。

fit <- manova(as.matrix(plots[, 5:32]) ~ unit, data=plots)

いくつかのメモ。このas.matrixようなデータ フレームから列を取得すると、データ フレームが返されるため、これが必要です。manovaこれは気に入らないので、データ フレームを行列に強制します。plots第二に、これはdata frame 内で呼び出される実際の変数がない場合に機能しますplots。これは、R がデータ フレーム内で名前を見つけられない場合、呼び出し元の環境 (この場合はグローバル環境) を検索するためです。

モデルをフィッティングする前に行列を作成することもできます。

plots$response <- as.matrix(plots[, 5:32])
fit <- manova(response ~ unit, data=plots)
于 2013-06-18T17:50:52.977 に答える
3

数式を文字列として作成し、数式にキャストできます。

responses <- paste( colnames( plots )[2:6], collapse=",")
myformula <- as.formula( paste0( "cbind(", responses , ")~ unit" ) )
manova( myformula, data = plots ) 

Call:
   manova(myformula, data = plots)

Terms:
                     unit Residuals
resp 1                0.4       6.8
resp 2                  0         0
resp 3              220.6      21.0
resp 4                0.1       0.0
resp 5          1715135.8  377938.1
Deg. of Freedom         1         4

Residual standard error: 1.3051760.027080132.293640.04966555307.3834
Estimated effects may be unbalanced
于 2013-06-18T18:02:08.297 に答える