glmnet パッケージを使用して、バイナリ結果 (ロジット) を持つモデルになげなわ (L1 ペナルティ) を当てはめようとしています。私の予測子は、1 つの連続変数を除いて、すべてバイナリです (1/0 は順序付けられておらず、~4000 です)。予測変数をスパース行列に変換する必要があります。そうしないと永遠に、1 日かかるからです。私の質問は、行列を疎行列に変換するだけでなく、sparse.model.matrix を使用しているようです。何故ですか?ここでこれを行う必要がありますか?どちらの方法でも、結果は少し異なります。
また、因子を因子としてコーディングする必要がありますか (結果と予測因子の両方に関して)、またはスパース行列を使用して、結果が二項であることを glmnet モデルで指定するだけで十分ですか?
これが私がこれまでに行っていることです
#Create a random dataset, y is outcome, x_d is all the dummies (10 here for simplicity) and x_c is the cont variable
y<- sample(c(1:0), 200, replace = TRUE)
x_d<- matrix(data= sample(c(1:0), 2000, replace = TRUE), nrow=200, ncol=10)
x_c<- sample(60:90, 200, replace = TRUE)
#FIRST: scale that one cont variable.
scaled<-scale(x_c,center=TRUE, scale=TRUE)
#then predictors together
x<- cbind(x_d, scaled)
#HERE'S MY MAIN QUESTION: What i currently do is:
xt<-Matrix(x , sparse = TRUE)
#then run the cross validation...
cv_lasso_1<-cv.glmnet(xt, y, family="binomial", standardize=FALSE)
#which gives slightly different results from (here the outcome variable is in the x matrix too)
xt<-sparse.model.matrix(data=x, y~.)
#then run CV.
私の 2 つの質問を要約すると、次のとおりです。[はいの場合、行列を疎行列に変換するのと実際には何が違うのですか] 2-バイナリ変数を因子としてコード化する必要がありますか? 私が尋ねる理由は、私のデータセットが巨大であることです。因子としてコーディングせずにそれを行うだけで、多くの時間を節約できます。