2016-05-11 15 views
0

教授から得たコードを使用してデータをトレーニングとテストのデータに分割しようとしていますが、エラーが発生しています。私はそれがデータのフォーマットのためだと思っていましたが、私はそれをハードコードに戻しましたが、何も動作しません。データは現在行列形式であり、ロジスティック回帰の正確さを予測するためにコードが使用されていると私は信じています。重回帰のエラー:置換するアイテムの数が置換の長さの倍数ではありません

A = matrix(
    c(64830,18213,4677,24761,9845,17504,22137,12531,5842,28827,66161,18852,5581,27219,10159,17527,23402,11409,8115,31425,68426,18274,5513,25687,10971,14104,19604,13438,6011,30055,69716,18366,5735,26556,11733,16605,20644,15516,5750,31116,73128,18906,5759,28555,11951,19810,22086,17425,6152,28469,1,1,1,0,1,0,0,0,0,1), 

nrow = 10, 
ncol = 6, 
byrow = FALSE) 


n<-row(A); 
K<-ncol(A)-1; 
x<-matrix(0,n,K); 

for(i in 1:K){x[,i]<-A[,i];} 
#A[,i] is 10long and x[,i] is 1long. 
A[,i:length(x[,i])]=x[,i] 
y<-A[,K+1]; 
#training/test data split: 
idx<-sample(1:n,floor(n/2),replace=FALSE); 
xtr<-x[idx,]; ytr<-y[idx]; 
xts<-x[-idx,]; yts<-y[-idx]; 
#fit the logistic model to it 
myglm<-glmnet(xtr,ytr,family = "binomial"); 
#Error in if (is.null(np) | (np[2] <= 1)) stop("x should be a matrix with 2 or more columns") : argument is of length zero 

#apply traning data to test data 
mypred<-predict(myglm,newx=xts,type="response",s=0.01); 
posteriprob<-mypred[,,1]; 
yhat<-matrix(1,nrow(xts),1); 
for(i in 1:nrow(xts)) 
{ 
    yhat[i]<-which.max(posteriprob[i,]); 
} 

acc<-sum(yhat+2==yts)/nrow(xts); 
cat("accuracy of test data:", acc, "\n"); 

最初のforloopは私に、このエラーを与える:x[, i] <- A[, i]で エラー:私はxtr/ytrを使用してロジスティックモデルを実行すると

Number of items to replace is not a multiple of replacement length

私はif (is.null(np) | (np[2] <= 1)) stop("x should be a matrix with 2 or more columns")にエラーが発生します:用

argument is of length zero

答えて

1

最初のエラー、それはタイプミスでした。 n<-row(A)からn<-nrow(A)に変更してください。しかし、その後A[,i:length(x[,i])]=x[,i]は、Aのサイズが10x6であり、length(x[,i])が10であるため、他のエラーが発生します。Probabyは、現在コーディングされているものとは違うことをしたいと思っています。

2番目のエラーの場合、xtrのサイズは、少なくともn x 2である必要があります。また、あなたのデータは二項式glmには適切ではありません。観察は1か0のどちらかでなければなりません。

+0

私はidxをどのように定義したので、最初の部分はすでに正しく動作していました。行列の最後の列が私の二項データであると考えられているので、私は混乱しています。 – user6318255

+0

'xtr <-x [idx]'はあなたにベクトルを与えます。おそらくあなたが望むのは 'xtr <-x [idx、]'です。とにかく、問題のコードを編集してみてください。可能であれば、同じページに入ることができます。 – zyurnaidi

+0

それはうまくいきましたが、今私はあなたが言及した観測エラーがあります。 glmnet式を変更して、最初の行列の最後の2項列を使用するようにするにはどうすればよいですか? 私は試しました:myglm <-glmnet(ytr、yts、family = "multinomial"); ytr/ytsは2項であるためです。私はこれがn×2である必要があることを理解していますが、この式を使用できない場合、ロジスティック回帰をどのように実装するかはわかりません。 – user6318255

関連する問題