2017-11-17 14 views
1

私は既にいくつかの回帰結果を持っています。 fit1, fit2, fit3。 そして、回帰結果からBICを抽出するには、apply関数を使用します。複数の回帰結果からBICをどのように適用関数で適用するか

質問は、私は次のようにコーディングするとき、次のとおりです。

fitresult = cbind(fit1, fit2, fit3) 
BIC = apply(fitresult, 2, BIC) 

それがエラーを示しています。私がチェック

Error in UseMethod("logLik") : no applicable method for 'logLik' 
applied to an object of class "list" 

class(fitresult[1]) = 'list'loglikは、「リスト」クラスに適用することはできません見つけます。 はフィット結果オブジェクトではないため、このエラーは私がBIC(fitresult[1])を使用できないことを意味します。

適用機能を使用して、​​の各コンポーネントを機能させるにはどうすればapplyが機能しますか?各コンポーネントのclassを変更することによって?

+0

[最小限の再現性の例]を作成する方法を確認してください(https://stackoverflow.com/a/5963610/8386140)他の人があなたを助ける支援します。 – duckmayr

答えて

1

TLは、DRは:cbind動作(モデルオブジェクトから(モデルオブジェクトがlm関数で作成された場合、例えば、クラスがlmある)モデルクラスストリップが、モデルクラスとオブジェクトをBIC期待lmまたはglmなど)。代わりに、lapply(list(fit1, fit2, fit3), BIC)BICが動作します。


fit1fit2と仮定すると、とfit3は、これらのオブジェクトのモデリング関数(などlm又はglm)を実行起因オブジェクトされている(例えば、str(fit1)を実行するモデル出力を含むリストである。

BICがモデルオブジェクトを予期しています(たとえば、モデルがlmで作成された場合、出力オブジェクトはクラスlmのリストになります)。ただし、cbind(fit1, fit2, fit3)の出力はクラスmatrix、a各列には、特定のモデルオブジェクトのすべてのサブリスト要素が含まれています(たとえば、コンソールに​​,、fitresult[1, ]fitresult[2, ]と入力してください)。ただし、​​の列にはモデルクラスlmが添付されていないため、BICはそれらの操作方法を知らないため、たとえば、lmを使用してモデルを作成した場合、class(fit1)lmを返します。しかし、cbind操作の後。 class(fitresult[ ,1])listを返します。

代わりに、リストにこれらのモデルオブジェクトを配置し、各モデルオブジェクトにBICを実行するためにlapplyを使用します。

lapply(list(fit1, fit2, fit3), BIC) 

出力は、各要素が与えられたモデルからBICあるリストでなければなりません。あなたはベクトルとして出力したい場合は、あなたが行うことができます:

sapply(list(fit1, fit2, fit3), BIC) 
+0

またはvapply: 'vapply(list(fit1、fit2、fit3)、BIC、numeric(1))' – Parfait

関連する問題