首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量向量传递给lm()公式

将变量向量传递给lm()公式
EN

Stack Overflow用户
提问于 2012-02-11 05:23:22
回答 6查看 52.1K关注 0票数 55

我试图自动化我的一段代码,这样编程就不会那么繁琐了。

基本上,我试图使用fastbw()rms包中逐步选择变量。我想将fastbw()选择的变量列表作为y ~ x1+x2+x3传递给一个公式,"x1“"x2”"x3“是fastbw()选择的变量列表。

下面是我尝试过但没有工作的代码

代码语言:javascript
复制
olsOAW0.r060 <- ols(roll_pct~byoy+trans_YoY+change18m, 
                    subset= helper=="POPNOAW0_r060", 
                    na.action = na.exclude, 
                    data = modelready)

OAW0 <- fastbw(olsOAW0.r060, rule="p", type="residual", sls= 0.05)

vec <- as.vector(OAW0$names.kept, mode="any")

b <- paste(vec, sep ="+") ##I even tried b <- paste(OAW0$names.kept, sep="+")

bestp.OAW0.r060 <- lm(roll_pct ~ b , 
                      data = modelready, 
                      subset = helper =="POPNOAW0_r060",    
                      na.action = na.exclude)

我是新的R,仍然没有落后于陡峭的学习曲线,所以道歉明显的编程错误。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-11 06:08:43

你快到了。您只需将整个公式组合在一起,如下所示:

代码语言:javascript
复制
paste("roll_pct ~ ",b,sep = "")

使用as.formula将其强制到一个实际的公式中,然后将其传递给lm。从技术上讲,我认为lm可能会强迫字符串本身,但强制使用它通常更安全。(一些期望公式的函数不会为您执行强制操作,而其他函数则会。)

票数 66
EN

Stack Overflow用户

发布于 2012-11-08 01:21:17

在定义b时,实际上需要使用折叠而不是seb。

代码语言:javascript
复制
b <- paste(OAW0$names.kept, collapse="+")

然后你可以把它写在乔兰的回答里

代码语言:javascript
复制
paste("roll_pct ~ ",b,sep = "")

或者直接使用:

代码语言:javascript
复制
paste("roll_pct ~ ",paste(OAW0$names.kept, collapse="+"),sep = "")
票数 29
EN

Stack Overflow用户

发布于 2015-11-10 13:27:32

我今天遇到了类似的问题,如果您想使它更加通用,甚至不需要有固定的类名,您可以使用

代码语言:javascript
复制
frmla <- as.formula(paste(colnames(modelready)[1], paste(colnames(modelready)[2:ncol(modelready)], sep = "", 
                              collapse = " + "), sep = " ~ "))

这假设您在第一列中有类变量或因变量,但是索引可以很容易地切换到最后一列,如下所示:

代码语言:javascript
复制
frmla <- as.formula(paste(colnames(modelready)[ncol(modelready)], paste(colnames(modelready)[1:(ncol(modelready)-1)], sep = "", 
                              collapse = " + "), sep = " ~ "))

然后使用以下方法继续使用lm

代码语言:javascript
复制
bestp.OAW0.r060 <- lm(frmla , data = modelready, ... )
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9238038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档