R 循环浏览面板模型中的自变量

  • 本文关键字:自变量 模型 循环 浏览 r
  • 更新时间 :
  • 英文 :


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

我想在一系列面板数据中回归所选因变量。我有几个变量,具有各种归一化曲线。我希望能够遍历许多,而不是一次编写 1 个回归。

我想做如下操作:plm(dependent ~ loopedvar + var2 + var3 + var4, data=mydata, model=c("within"))

我使用 grep 创建了一个变量列表,这实际上非常简单。现在我想将变量 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")))
}

抛出"错误:意外符号:[...(var4"))数据]">

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

抛出"错误:继承(对象,"公式")不是 TRUE">

这些错误非常无益,我只是厌倦了猜测。R 语法在我的估计中不是很简单,而且我正确理解它的机会很小。

请不要发布不回复。根据我的经验,R人对此有偏好。如果我没有充分描述我的问题或愿望,请索取更多信息,我很乐意提供帮助。

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

当然,在R中更难理解的一件事是它不喜欢其他一些语言中使用的"宏"方法(在分支到R之前,我学会了编写Stata代码)。 几乎总是有一种方法可以使用 *apply 函数而不是带有宏引用的循环来执行您想要执行的操作。

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

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]中的每个列,即data中的每个变量,以varlist命名。

由于没有内置函数来满足您需要的内容(通常没有),因此您可以即时声明它。function(x) lm(dep ~ x, data=data)将变量作为参数(在lapply调用中,每个变量varlist),并在该变量上回归dep。 结果将存储在名为lm.results的新列表中。

相关内容

最新更新