简体   繁体   中英

Panel regression error in R

I am running an unbalanced panel regression.

Independent Variable is Gross Dependent Varibales are DEX, GRW, Debt and Life. Time is Year Grouping is Country

I have successfully executed the following commands:

tino=read.delim("clipboard")
tino
summary(tino)
Dep<- with(tino, cbind(Gross, index=c("Country, Year"))            
Ind<- tino[ , c('DEX', 'GRW' , 'Debt', 'Life')] 
install.packages("plm")
library('plm')          
pandata<-plm.data(tino)
tino          
summary(pandata)  
summary(Dep)
summary(Ind)

However, When I run the Command below for results, I get an error.

pooling<- plm(Dep~Ind, data = pandata, model= "pooling") 

gives error below

Error in model.frame.default(terms(formula, lhs = lhs, rhs = rhs, data = data,: invalid type (list) for variable 'Ind'

Please help.

Thanks

Without access to your data, it is impossible to confirm that this will work, but I am going to try to point out several issues in your code that are likely contributing to the error.

This line is fine:

tino=read.delim("clipboard")

Here is where you start to make errors:

Dep<- with(tino, cbind(Gross, index=c("Country, Year"))            
Ind<- tino[ , c('DEX', 'GRW' , 'Debt', 'Life')] 

with() is typically used to create new vectors out of a data.frame. All it does is allow you to drop the $ notation for referencing variables in a data.frame and nothing else. From the read of your code, you may be thinking that with() is actually modifying the tino object, which it is not.

Further, when you want to construct a data.frame for use in a regression model, you want all of the right-hand and left-hand side variables in one data.frame or matrix rather than separating them. This is because most modelling functions operate using a "formula" and data argument, which are passed to model.frame() to preprocess the data before modelling.

This means you presumably want to do something like the following, skipping all of the above:

pandata <- plm.data(tino, index = c("Country", "Year"))
pooling <- plm(Gross ~ DEX + GRW + Debt + Life, data = pandata, model = "pooling")
summary(pooling)

If you have a lot of right-hand side variables, you can subset your data.frame, with something like:

pandata2 <- plm.data(tino[ , c('Gross', 'DEX', 'GRW' , 'Debt', 'Life')], index = c("Country", "Year"))
pooling2 <- plm(Gross ~ ., data = pandata2, model = "pooling")

using the . notation as a shorthand for "all other columns in the data."

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM