R按列名逐步回归模型迭代(数据表)

时间:2016-04-29 03:44:52

标签: r data.table regression

我有一个.csv文件并使用库fread()中使用data.table函数的R输入。

使用8928 obs71 variable在R中输入的文件。

以下是包含71列和8928行的数据内容DT

01F0017S 01F0029S 01F0061S ... 01F3676S 01F3686S 01F3736S
49.25    47.58    119.00       116.77   34.00    188.44
....
52.25    49.40    199.18   ... 118.83   33.10    186.13

然后我创建了两个名为data.tableTrainDT的{​​{1}}:

PracticeDT

我写了一个for循环来适应逐步回归模型TrainDT<-DT[1:round(0.7*nrow(DT),0)] PracticeDT<-DT[round(0.7*nrow(DT),0):nrow(DT)] step()它。

按照以下步骤拟合模型:

第1步:

我将predict()移至TrainDT data.table,其中包含TrainModel2673 obs72 variables一个名为cbind()的新列

01F0017S_y

TrainModel<-cbind(setnames(TrainDT[7:nrow(TrainDT),i,with=F],paste0(names(DT[1,i,with=FALSE]),'_y')),TrainDT[1:(nrow(TrainDT)-6),1:length(TrainDT),with=F]) 的内容:

TrainModel

第2步:

这是我的问题:

我使用01F0017S_y 01F0017S 01F0029S 01F0061S ... 01F3676S 01F3686S 01F3736S 43.74 49.25 47.58 119.00 116.77 34.00 188.44 .... 44.55 52.25 49.40 199.18 ... 118.83 33.10 186.13 来拟合回归模型和lm脚本,如下所示:

step(lm,direction='both')

如何使此线性模型与列Fitmodel<-lm(`01F0017S_y`~.,data=TrainModel) stepwise<-step(Fitmodel,sacle=0,direction = 'both') 以不同的名称进行逐步回归?

例如:

_y

我写的循环会自动创建带Fitmodel<-lm(`01F0017S_y`~.,data=TrainModel) Fitmodel<-lm(`01F0029S_y`~.,data=TrainModel) Fitmodel<-lm(`01F0061S_y`~.,data=TrainModel) 的变量,但不知道如何分配给迭代。

我尝试某种方式来分配变量_y,但总是失败,因为模型会将变量_y与响应变量放在一起。

离。 _y

Fitmodel<-lm(TrainModel[[1]]~.,data=TrainModel)将与其他人一起变量如下图所示:

enter image description here

我试着这样:

_y

有错误信息:

enter image description here

如何使用不同的x<-paste(names(DT[1,1,with=FALSE]),'_y',sep ='' ) ModelTest_8<-lm(`x`~.,data=TrainModel) 变量迭代逐步回归?

非常感谢。

1 个答案:

答案 0 :(得分:0)

在没有可重现的数据的情况下,这是使用虹膜数据的解决方案:

dat <- iris[, !names(iris) %in% "Species"]    
responses<- grep("Length", names(iris), value=T)
predictor <- grep("Width", names(iris), value=T)
models <- lapply(responses, function(x) as.formula(paste(x, paste(predictor,collapse="+"), sep="~")))

models
[[1]]
Sepal.Length ~ Sepal.Width + Petal.Width
<environment: 0x0000000015c28de0>

[[2]]
Petal.Length ~ Sepal.Width + Petal.Width
<environment: 0x0000000015c2c9e0>


fits <- lapply(models, lm, data=dat)
steps <- lapply(fits, step, sacle=0, direction="both")