【问题标题】:How can I use paste add predictors into a penalized regression argument?如何在惩罚回归参数中使用粘贴添加预测变量?
【发布时间】:2019-10-02 11:39:34
【问题描述】:

我不想将预测变量指定为回归参数,而是只传递一个字符串并将其更改为正确的语法,然后再将其用于惩罚回归。在Loop function to add large numbers of predictors in regression functionHow to use paste to get formula 中已经解释了如何为 lm 做到这一点,但它不适用于惩罚回归。

这是我的代码:

df<-data.frame(date=seq(as.Date("2018-01-01"), as.Date("2018-10-01"), by="days"))
df$month<-format(as.Date(df$date), "%m")
df$y<-runif(nrow(df),1,100)
df$time<- -floor(nrow(df)/2):(ceiling(nrow(df)/2)-1)/1000
df$month<-as.factor(df$month)

yname<-"y"
xnames<-colnames(training)
xnames<-xnames[-which(xnames==yname)]
xnames<-xnames[-which(xnames=="date")]
yname<-paste(yname,",")
formula<-paste(yname,"~",paste(xnames,collapse="+"))

ens<-penalized(formula, ~ 0,lambda1=1, lambda2=1, positive =TRUE, data=training)

我尝试使用 as.formula 作为公式,但它不适用于逗号。如果我手动输入变量名并且它适用于 lm 但不适用于受到惩罚,这一切都可以正常工作。有什么想法吗?

请注意,我已对问题进行了编辑,以使其更具体地用于惩罚。

【问题讨论】:

标签: r regression paste


【解决方案1】:

你快到了,你只需要使用'粘贴'功能:

string <- paste("month", "time", sep = " + ")

我不熟悉“惩罚”功能。但是,如果您还有其他问题,您可能需要粘贴整个公式。例如,对于线性回归,您需要使用类似:

string_variables <- paste("month", "time", sep = " + ")
string_formula <- paste("y ~ ", string_variables ,sep = " ")

# simple linear regression usage
ens <- lm(formula = string_formula, data=training)
summary(ens)

【讨论】:

  • 您的建议适用于您的设置。但是,如何更改它以便我可以指定向量 s=c("month","time") 而不是两个字符串(实际上我有一个更长的向量并且不想使用一个for循环)? string_variables
猜你喜欢
  • 2016-10-19
  • 2017-11-29
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2017-05-27
相关资源
最近更新 更多