我觉得这应该是世界上最容易的事情。首先,我对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
的新列表中。