2016-03-14 57 views
-1

我想运行一个logit回归与国家明智的删除R.说我有一个数据框与四个变量随着时间的推移:year,countryid(1-12),gdp和人口。我想找出一种方法来运行12个不同的回归,每个去除一个国家,看看每个回归的效果是什么。我一直在试图编写一个循环,将矢量中的系数下降,但没有取得任何成功。回归与国家明智的删除

任何帮助将不胜感激!

+1

请出示你的一些努力。 – Heroka

+1

使用'iris',像这样:'lapply(levels(iris $ Species),function(x)lm(Sepal.Length〜Sepal.Width,data = iris [iris $ Species!= x,]))''。你可以获得不同的'data.frame's,并移除感兴趣的变量的级别,并从每个变量中运行一个线性模型('lm')。猜猜你可以将这个想法适应你的实际数据。 – nicola

回答

1

这里有一个答案,你需要编辑一点具有确切变量工作,你必须

data(mtcars) 


y_var<-'mpg' 
x_vars<-setdiff(names(mtcars),y_var) 

for(i in x_vars){ 

    variables<-setdiff(x_vars,i) 
    fm <- as.formula(paste(y_var, " ~", paste(variables, collapse = "+"))) 
    linear_model<-glm(fm, data = mtcars) 
    assign(paste0('model_wout_',i),linear_model) #this will store your different linear models so you can call them with `summary(model.name)` 

} 

这也是一个线性模型 - 需要添加“二项”,使之分对数...

+0

OP想要删除行,而不是列。 –

0
variables <- c("year", "countryid1", "id2", ..., "id12", "gdp", "population") 

for (i in 2:13) { 
variables.to.fit <- variables[-i] 
} 

然后你必须把你的logit放在这个循环中。在每个循环中。这会在每个drop中删除每个id变量。

+0

欧特专门说有四列... – Heroka

0

下面是我该怎么做。

假数据:

的 '国家'
set.seed(123) 
nobs=500 
dat <- data.frame(y = rbinom(nobs,1,0.5), 
        var1=rnorm(nobs), 
        var2=sample(LETTERS[1:12],nobs,T)) 

矢量:型号

countries <- unique(dat$var2) 
names(countries) <- countries 

名单(使提取的东西后容易):

models <- lapply(countries, function(x){ 
    fit <- glm(y~var1+var2, data=dat[dat$var2!=x,], family=binomial) 
    fit 
}) 
+0

这工作完美!非常感谢! –