【问题标题】:R stepwise regression model iteration by column name (data table)R逐步回归模型按列名迭代(数据表)
【发布时间】:2016-08-24 01:46:45
【问题描述】:

我有一个.csv 文件,并在 R 中输入使用来自 librarydata.tablefread() 函数。

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

这是 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.table TrainDTPracticeDT

TrainDT<-DT[1:round(0.7*nrow(DT),0)]
PracticeDT<-DT[round(0.7*nrow(DT),0):nrow(DT)]

我写了一个 for 循环来拟合逐步回归模型 step()predict() 它。

按照以下步骤拟合模型:

第 1 步:

我将TrainDT 转移到TrainModel data.table 与2673 obs72 variablescbind() 一个名为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的内容:

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

第 2 步:

这是我的问题:

我使用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&lt;-lm(TrainModel[[1]]~.,data=TrainModel)

_y 将与其他变量一起放入如下图:

我尝试这种方式:

x<-paste(names(DT[1,1,with=FALSE]),'_y',sep ='' )
ModelTest_8<-lm(`x`~.,data=TrainModel)

带有错误信息:

如何使用不同的_y 变量迭代逐步回归?

非常感谢。

【问题讨论】:

    标签: r data.table regression


    【解决方案1】:

    在没有可重复数据的情况下,这里有一个使用虹膜数据的解决方案:

    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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多