2013-05-23 8 views
6

経路を示す地理的領域(LoadArea、DischargeArea)の対話用語を含むパネルデータセットを推定しようとしています。固定効果の仕様を使用して、相互作用項(LoadArea * DischargeAreaを)好きで、あなたは回帰を要約すると、次のエラーが生成されていません。インタラクション期間のある固定効果回帰でエラーが発生する

mult_fe<-plm(log(DayRate)~LoadArea *DischargeArea + factor(Laycan.Day.Diff) + CapUtil + Age 
+ I(Age^2) + WFRDWT + lag_BDTI, data=mult_reg1,model="within"); 


summary(mult_fe) 
Error in crossprod(t(X), beta) : non-conformable arguments 

これは、LM機能とPLMを交換する通常のOLS回帰で正常に動作します。 質問はなぜ私のモデルでは機能していないのですか?

答えて

4

これは、変数間の共線性の問題です。

lmコマンドは、共線性のために推定されなかった変数のベータベクトルに自動的にNAsを配置しますが、PLMはベータベクトルにNAを配置しません。

LoadArea + DischargeArea + LoadArea:DischargeArea 

そのPLMした後、それらをおとしめるます:

あなたはLoadArea * DischargeArea PLMは、お使いのモデルには3つの変数になる必要があり

。この場合

、およびデータに関する詳細な情報なしに私の推測では、これらの変数の1が完全に要因レベルのいずれかと同一線上にされていることである:あなたのケースでは

as.factor(Laycan.Day.Diff) 

私は推定しようとするだろう因子のないモデル。それがうまくいくと、要因が原因で問題が発生していることがわかります。その場合、各要因を明示的な0/1ダミーに変換し、問題がどこから来ているかを理解するまで1つ1つずつ追加することができます。変数は、あなたが何かを試みることができる同一直線上にあるかを判断するために

:ライン5

require(data.table) 
tmp  <- data.table(var1=1:10,var2=55:64,userid=rep(c(1,2),5)) 
cols  <- c('var1','var2') 
newnames <- c('demeaned_var1','demeaned_var2') 
tmp[,(newnames):=.SD-lapply(.SD,mean),.SDcols=cols,by=userid] 
cor(tmp[,newnames,with=F]) 

は屈辱です。この他のstack overflow postは、上記で詳細に使用したdata.tableの操作を説明しています。

上記のコードの出力は次のようになります。

> 
       demeaned_var1 demeaned_var2 
demeaned_var1    1    1 
demeaned_var2    1    1 

これはVARSは完全に同一直線上にあるdemeanedいることを教えてくれます。

+1

私は同じ問題を抱えています。しかし私のモデルでは、41の独立変数があります。どれがマルチ共線性を引き起こしているかをどのように知ることができますか? – Riccardo

+0

data.table(素晴らしいパッケージ)をお持ちの場合は、すべてのvarsを手動で下げてから相関テーブルを計算することで簡単に実行できます。私が上に貼ったもののようなもの。 – mmgm

+0

しばらくして、 'plm'パッケージには、' detect_lin_dep'と 'alias'という線形依存性を検出する2つの関数があります。データ変換後の線形依存(例えば、内部/非変換変換)は検出するのが困難な場合があるため、ドキュメントを必ず読んでください。 – Helix123

5

plm()がうまくいっていることに注意してください。それは、summary.plm()関数が悪いことです!関数の深い部分を調べると、R^2を計算する部分の問題が明らかになります。

Read more here on the same problem at stackexchange

クイックなどエレガントではない回避策は、次のとおり

(1)LoadArea交換:LoadArea * DischargeAreaとDischargeAreaを

(2)手動で可変別個の相互作用を作成

LoadxDischarge <- LoadArea*DischargeArea 
0

少なくとも標準エラーなどを取得する方法は、

を使用することです。
library("sandwich") 
library("lmtest") 
coeftest(mult_fe) 
関連する問題