2017-12-09 53 views
0

glmnetパッケージを使用して機能を選択しようとしています。私はglmnetを実行しようとしています。しかし、私は出力を理解するのに苦労しています。私の目標は、遺伝子のリストとそのそれぞれの係数を得ることで、私は2つのラベルのグループをどのように関連づけているかに基づいて遺伝子リストをランク付けすることができます。glmnet出力データからデータを抽出する

x = manual_normalized_melt[,colnames(manual_normalized_melt) %in% 
sig_0_01_ROTS$Gene] 
y = cellID_reference$conditions 

glmnet_l0 <- glmnet(x = as.matrix(x), y = y, family = "binomial",alpha = 1) 

ここからどうやって行くのかに関するヒントや指示はありますか?私が知っているデータはglmnet_l0の範囲内にあることは分かっていますが、それをどのように抽出するのかは分かりません。

さらに、Rの機能選択にL0ノルムを使用する方法があるかどうかは知っていますが、

ありがとうございました!

+0

'str(glmnet_l0)'を試しましたか? – Heikki

答えて

0

Aバックは、私は特徴選択のためのパッケージにglmnetを包みながら、あなたは(行89から始まる)at the codeを見ることができますいずれか、またはあなたがデベロッパーツールを使用してパッケージをダウンロードすることができます:: install_github(「mlampros /特徴選択」)。 blog postでどのように動作するかについても説明しました。ここで

1

glmnetでいくつかのアプローチです:あなたは任意の(種中2つのレベルのアイリスデータ)を投稿していなかったので、最初の

いくつかのデータ:

data(iris) 
x <- iris[,1:4] 
y <- iris[,5] 
y[y == "setosa"] <- "virginica" 
y <- factor(y) 

まず何を参照するために相互検証モデルを実行します最高のラムダです:

library(glmnet) 
model_cv <- cv.glmnet(x = as.matrix(x), 
         y = y, 
         family = "binomial", 
         alpha = 1, 
         nfolds = 5, 
         intercept = FALSE) 

ここで私は最良のラムダを決定するために5倍のクロスバリデーションを選択しました。

あまりにも最高のラムダでの係数を参照してください。

coef(model_cv, s = "lambda.min") 
#output 
#5 x 1 sparse Matrix of class "dgCMatrix" 
         1 
(Intercept) .   
Sepal.Length -0.7966676 
Sepal.Width 1.9291364 
Petal.Length -0.9502821 
Petal.Width 2.7113327 

ここであなたは何の変数がドロップされなかった見ることができます(。または、彼らが持っているでしょう代わり係数の)。すべての機能が同じスケール(遺伝子発現データなど)にある場合、デフォルトではTRUEに設定されているため、standardize = FALSEをglmnet呼び出しの引数として追加することを検討することができます。少なくとも私は表現をモデリングします。今、あなたはすべてのデータとモデルを作ることができます

model_cv$lambda[which.min(model_cv$cvm)] 

:最高のラムダを表示するには

glmnet_l0 <- glmnet(x = as.matrix(x), 
        y = y, 
        family = "binomial", 
        alpha = 1, 
        intercept = FALSE) 

あなたはラムダスケールでそれをプロットし、最高の描いた縦線を追加することができますラムダ:

plot(glmnet_l0, xvar = "lambda") 
abline(v = log(model_cv$lambda[which.min(model_cv$cvm)])) 

enter image description here

ここで、係数はほとんどラムダではほとんど収縮していないことがわかります。

より高い次元のデータでは、多くの係数が0に向かって行くことがわかります。 coef行列の中で。

predict.glmnetセットs = model_cv$lambda[which.min(model_cv$cvm)]を使用すると、すべてのテストされたラムダの予測が生成されます。

また、postにチェックを入れると、その他の関連情報が含まれています。

関連する問題