1

私はplmパッケージを使用していますが、ランダムおよびモデル内で問題があり、「空のモデル」というエラーが発生しています。ただし、モデルは空ではありません。エラーが発生したplm.fitのソースコードでは、次のように書かれています(頭のてっぺんから書いています...)

X <- model.matrix(formula,data, lhs=1,...)
if (ncol(X) == 0) stop("empty model")

ただし、元の関数に入力しているコマンドでこの動作を再現しようとすると、ncol(X) is 17 などになります。

私のコードは(データが削除されました...):

library(sampleSelection)
library(foreign)
library(censReg)
library(plm)
library(micEcon)
library(ggplot2)

data <- read.dta('kpfull1.dta')
summary(data)
attach(data)

data$profit_share <- p91/tnsvp
data$debt_assets <- d91/naba
data$naba3 <- naba^3
data$difprofit <- p91-p90
data$agri <- (mind==1)*1
data$hi <- (mind==2)*1
data$li <- (mind==3)*1
data$constr <- (mind==4)*1
data$trans <- (mind==5)*1
data$trade <- (mind==6)*1
data$rd <- (mind==7)*1
data$ser <- (mind==8)*1
data$fin <- (mind==9)*1
data$for1 <- data[,7]
detach(data)
data1 <- data
panel <- pdata.frame(data, c("num","rnd"))

testovaci <- plm(tb ~ profit_share  + debt_assets + naba + naba3 + for1 + dom + difprofit + agri + hi + li + constr + trans + trade + rd + ser + fin, data = panel, model = "within")
summary(testovaci)

model.matrix(tb ~ profit_share  + debt_assets + naba + naba3 + for1 + dom + difprofit + agri + hi + li + constr + trans + trade + rd + ser + fin, data)

model.matrix(tb ~ profit_share  + debt_assets + naba + naba3 + for1 + dom + difprofit + agri + hi + li + constr + trans + trade + rd + ser + fin, panel)

ありがとう、TomášKřehlík。

4

1 に答える 1

4

Giovanni Millo による R-help での回答:

親愛なるトーマス、親愛なるリストへ

その間、私は個人的な通信でデータを入手したので、フォローアップ。私が疑ったように、問題はデータの時間変動性の欠如に隠されています。実際、OLS は問題なく動作します。

%fmは数式、dataはデータセット、panelは変換されたデータセットです。pdata.frame

summary(lm(fm, data))

% (出力OK、省略)

plm「プーリング」と同様に

summary(plm(fm, panel, model="pooling"))

一方向(個人)効果 プーリングモデル

% (出力OK、省略)

しかしFEは失敗します:

summary(plm(fm, panel, model="within"))

Errore in plm.fit(formula, data, model, effect, random.method, inst.method) : empty model

さまざまな RE メソッドと同様に

summary(plm(fm, panel, model="random"))

Errore in plm.fit(formula, data, model = "within", effect = effect) : empty model

...エラー メッセージを見ると、問題があるのは内部/FE 部分であることは明らかです (RE メソッドは、エラー コンポーネントを推定するための FE に基づいています)。実際、右側の変数をパネル差分しようとすると、すべてゼロになります (NaN は分散シェアであり、0/0 です)。たとえば、最初の変数は次のようになります。

summary(diff(panel$profit_share))

total sum of squares : 0 id time NaN NaN

しかし、それは実際にはそれぞれ同じです。したがって、元のエラー メッセージが示すように、(変換された) モデルは実際には空です。データを詳しく調べる時間はありませんが、rhs 変数はすべて時定数のように見えます...

したがって、リストにあるパネル担当者にとってのポイントは次のとおりです。データに起因するエラーの主な原因はインデックスの不良であり、2 つ目はデータのばらつきの悪さです。lm()それが実行されていることを診断するための最初のステップplm(..., model="pooling")lm()失敗=> 不正なデータ、不正な数式; plm(..., "pooling")失敗=>基本的にインデックスに問題があります。他のパネル メソッドは失敗します => データの変動性の問題の可能性が最も高いです。

最高、ジョバンニ

PS RE モデルの ML 推定によって問題を回避しようとしましたが、特異な行列エラーが発生しました: したがって、データは実際には悪条件です

library(nlme) remod<-lme(tb ~ profit_share + debt_assets + naba + naba3 + for1 + dom + difprofit + agri + hi + li + constr + trans + trade + rd + ser + fin, random=~1|num, data=data) Errore in solve.default(estimates[dimE[1] - (p:1), dimE[2] - (p:1), drop = FALSE]) : il sistema è numericamente singolare: valore di condizione di reciprocità = 3.93401e-25

于 2012-07-10T15:02:19.987 に答える