2017-01-11 10 views
-2

pglmパッケージのpglm関数を使用して、順序付きロジスティックモデルのランダムエフェクトパネル推定を取得しようとしています。タイプ 'closure'のオブジェクトは、パネルロジットを推定するためにRのpglm :: pglm関数でサブセット化できません

スタンドアロン機能pglmをテストすると、私には望ましい結果が得られます。ここに私の仕様は次のとおり

pglm::pglm(as.numeric(y)~x1+x2+x3, df,family = pglm::ordinal('logit'), 
      model = "random", method = "bfgs", print.level = 3, R = 5, index = 'Year') 

: 1.すべての説明変数{X1、X2、X3は}数値倍である 2 yは1からも22

テーブルの範囲の順序付きカテゴリ変数パネルデータの作成に使用される1996年から2014年の範囲の「年」変数が含まれています。

別の関数でpglm機能を使用しようとする場合:xの

pdata.frame(data, index) 

エラーを計算する際に

pglm_fun <- function(df){ 

    df <- data.frame(df) 
    pglm::pglm(as.numeric(y)~x1+x2+x3, data = df,family = pglm::ordinal('logit'), 
       model = "random", method = "bfgs", print.level = 3, R = 5, index = 'Year') 

} 

は私が発生したエラーメッセージが表示されます[、na.check!]:型 'closure'のオブジェクトはサブセット化できません。

コンソールでコードを実行しようとすると、このようなエラーは発生せず、pdata.frame()機能が機能します。データフレームの

例:

df = data.frame(y = sort(rep(1:4,20)), 
     x1 = rnorm(80), 
     x2 = rnorm(80), 
     x3 = rnorm(80), 
     Year = rep(sample(1995:1998, replace = FALSE),20)) 
+1

あなたのコード内の 'index'は何ですか? 'plm'には' index() '関数もあり、混乱の原因になっている可能性があります。また、 'データ'とは何ですか? 'df'とはどのような関係がありますか?つまり、再現可能な例を投稿するべきです。http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+0

変数「年」をインデックスとして設定し、データは単純に 'pglm_fun'という引数に与えたデータフレームです。私はデータフレームdf –

+0

の例でポストを編集します 'pdata.frame(data、index =" Year ")'はどうでしょうか? –

答えて

0

[OK]を、私はそれを考え出しました。この場合、私が使用していた関数はグローバル変数を直接使用するのではなく、変数のコピーを作成していたため、Rに環境問題があります。 問題は関数内で個々の名前を宣言し、グローバル変数としてデータフレームを残すことによって解決される。

pglm_fun1 <- function("y","x1","x2","x3","Year"){ 
    require("pglm") 
    pglm(as.numeric(y)~x1+x2+x3, data = df, family = ordinal('logit'), 
      model = "random", method = "bfgs", print.level = 3, R = 5, index = 'Year') 

} 
関連する問題