2015-06-21 105 views
1

我有一個數據框,有395個觀察值和36個變量。我正在進行交叉驗證,以選擇最佳的幾個變量來對學生進行分類。我寫了這個代碼:LDA交叉驗證和變量選擇

k<-5 
error <- c() 
for(l in 1:35){ 
    if(l!=31 && l!=32 && l!=33){ 
    x<-0 
    for (i in 1:k){ 
     train<-rep(TRUE, dim(student.mat)[1]) 
     for(j in 1:dim(student.mat)[1]/k){ 
     train[(i-1)*dim(student.mat)[1]/k+j]<-FALSE 
     } 
     test=!train 
     student.test=student.mat[test,] 
     student.train=student.mat[train,] 
     nota3.test=nota3[test] 
     lda.fit<-lda(nota3~student.mat[,i], data=student.mat, subset=train) 
     lda.pred<-predict(lda.fit, student.test) 
     table(lda.pred$class, nota3.test) 
     y<-mean(lda.pred$class!=nota3.test) 
     x<-x+y 
     #cat("k = ", i, "error: ", y*100,"%", "\n") 
    } 
    #cat("Media del error = ", x/k*100,"%", "\n") 
    error <- c(error, x/k) 
    }else{ 
    error <- c(error, 100) 
    } 
} 
error 
names(student.mat)[which.max(error)] 

,我得到這個錯誤:

錯誤表(lda.pred $類,nota3.test): 所有參數必須具有相同的長度 另外:丟失的警告消息 「newdata」有79行,但發現變量具有395行

,但如果我寫的數據集,而不是student.mat[,i]的一個變量的名稱,它的工作原理。 lda函數沒有正確讀取student.mat[,i]

+1

人們似乎對這個不久前涉及[R LDA問題,疹子。有沒有一種課程可以在分類中分配問題? –

+0

它是我的大學學位 – ajncespedes

回答

0

可以通過編程方式創建公式:

lda.fit<-lda(paste0("nota3~", names(student.mat)[i]), data=student.mat, subset=train) 
+0

它不起作用,我得到這個錯誤: 錯誤en lda.default(paste0(「nota3〜」,names(student.mat)[i]),data = student .mat,: 'x'不是矩陣 – ajncespedes