2016-04-29 80 views
-2

我有一個.csv文件,輸入R使用fread()函數庫data.table
R逐列迴歸模型按列名迭代(數據表)

在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:

我轉移TrainDTTrainModel 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與響應變量。

ex。Fitmodel<-lm(TrainModel[[1]]~.,data=TrainModel)

_y將投入與其他變量如下圖:

enter image description here

而且我試着這樣說:

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

帶有錯誤信息:

enter image description here

如何用不同的_y變量迭代逐步迴歸?

非常感謝。

回答

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