R在面板模型

时间:2016-12-07 16:53:27

标签: r

我觉得这应该是世界上最简单的事情。首先,我对R来说比较新,但我想学习它。话虽如此,到目前为止我的经验表明R不是很直观。我在几个小时内在Python中弄清楚到目前为止已经花了2天没有得到R的结果。

我想在选择的面板数据中回归一系列因变量。我有几个带有各种归一化曲线的变量。我希望能够迭代许多而不是一次写回归1。

我想做类似以下的事情:plm(依赖~loopedvar + var2 + var3 + var4,data = mydata,model = c(" in"))

我使用grep创建了一个varlist,实际上非常简单。现在我想用varlist 1-by-1中的变量替换为' loopedvar。'

在使用SPSS的python中我会做类似

的事情
nvariables=len(varlist)
for variable in xrange(nvariables):
 testvariable=varlist[variable]
 spss.Submit("""AREG dependent WITH 
{}
var2
var3
var4
 /METHOD PW.
""" .format(testvariable))

我也找到了这个教程http://www.ats.ucla.edu/stat/r/pages/looping_strings.htm,但是我无法使它工作,而且我不理解R中的* apply函数。例如,当编写lapply时(varlist,function(x)[model] ])varlist [var]如何知道去哪里?

我尝试过使用粘贴的循环并使用不同的错误替换。

for (var in 1:length(varlist)) {
     models<-plm(substitute(dependent ~ i, list(i=as.name(paste0(var)), as.name("var2"), as.name("var3"), as.name("var4")) data=mydata, model=c("within")))
}

引发&#34;错误:意外的符号:[...(var4&#34;&#34;))数据]&#34;

for (var in 1:length(varlist)) {
+     models<-summary(plm(paste0("dependent ~ ",var," + var2 + var3 + var4"), data=mydata, model=c("within")))
+ }

引发&#34;错误:继承(对象,&#34;公式&#34;)不是真的&#34;

这些错误非常无益,我只是厌倦了猜测。在我的估计中,R语法并不是非常简单,我能做到的机会很小。

请不要发布不答复。根据我的经验,R人对此有着浓厚的兴趣。如果我没有充分描述我的问题或欲望只是要求更多信息,我将很乐意承担责任。

编辑:我忘记了plm函数中的索引参数。它应该在那里。

1 个答案:

答案 0 :(得分:0)

绝对是在R中包裹一个人更难的事情之一是它不喜欢&#34;宏&#34;在其他一些语言中使用的方法(我学会了在分支到R之前对Stata进行编码)。几乎总有一种方法可以使用* apply函数而不是loop-with-macro-reference来做你想做的事。

以下是我如何处理您的特定问题。

data <- data.frame(dep = runif(100), var1=runif(100), var2=runif(100),var3=runif(100)) #Create some fake data

varlist<-c("var1","var2","var3") # Declare your varlist as a vector

lm.results<- lapply(data[,varlist],function(x) lm(dep ~ x, data=data)) # run the regression on each variable.

让我稍微打破最后一行。 R中的数据帧实际上是具有额外结构的列表,其中列表中的每个项目都是变量/列。因此,lapply(data[,varlist],FUN)将使用FUN中的每一列评估函数data[,varlist],即datavarlist中的每个变量。

由于没有内置功能可以满足您的需求(通常没有)您可以动态声明它。 function(x) lm(dep ~ x, data=data)将变量作为参数(在lapply调用中,varlist中的每个变量)并对该变量进行回归dep。结果将存储在名为lm.results的新列表中。