首页 文章

R在面板模型中循环通过自变量

提问于
浏览
0

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

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

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

我使用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")))
}

引发“错误:意外符号:[...(var4”“))数据]”

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

抛出“错误:继承(对象,”公式“)不为”

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

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

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

1 回答

  • 0

    绝对是在R中包装一个人的难题之一是它不喜欢其他语言中使用的“宏”方法(我学会了在分支到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) 将使用 data[,varlist] 中的每一列来评估函数 FUN ,即 data 中的每个变量都在 varlist 中命名 .

    由于没有't a built in function for what you need (there often isn' t)你在运行中声明它 . function(x) lm(dep ~ x, data=data) 将变量作为参数(在 lapply 调用中, varlist 中的每个变量)并对该变量进行回退 dep . 结果将存储在名为 lm.results 的新列表中 .

相关问题