メチル化データのglmnetを使用した機能の選択とモデル(p >> N)


29

GLMとElastic Netを使用してそれらの関連機能を選択し、線形回帰モデルを構築します(つまり、予測と理解の両方であるため、比較的少ないパラメーターを残しておく方が良いでしょう)。出力は連続的です。それはだあたりの遺伝子例でした。私はパッケージについて読んでいますが、従うべき手順について100%確信が持てません。2000050glmnet

  1. CVを実行してラムダを選択します:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1)入力データが与えられたら、別のアルファ値を選択しますか?
    (Q2)モデルを構築する前に他に何かする必要がありますか?

  2. モデルに適合:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3)「共分散」よりも優れているものはありますか?
    (Q4)ラムダがCVによって選択された場合、なぜこのステップが必要なのnlambda=ですか?
    (Q5)lambda.minまたはを使用する方が良いlambda.1seですか?

  3. 係数を取得して、どのパラメーターが抜けているか( "。")を確認します。
    predict(model, type="coefficients")

    ヘルプページでは、多くがあるpredict方法(例えば、predict.fishnetpredict.glmnetpredict.lognet、など)。しかし、例で見たように、「プレーン」は予測します。
    (Q6)またはその他を使用する必要がありますpredictpredict.glmnet

正則化方法について読んだことにもかかわらず、私はRとこれらの統計パッケージがまったく新しいので、問題をコードに適合させているかどうかを確認することは困難です。どんな提案も歓迎します。

UPDATE
に基づいて、クラス列のオブジェクトがという要素が含まれ先に述べたように、」finalModelリサンプリングによって選択されたチューニングパラメータの値を装着したモデルで、このオブジェクトはことを使用して、新しいサンプルの予測を生成するために、伝統的な方法で使用することができますモデルの予測関数。」

caretアルファとラムダの両方を調整するために使用:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

fitM前のステップ2を交換しますか?その場合、glmnetオプション(type.gaussian="naive",lambda=cv$lambda.min/1se)を今指定する方法は?
そして、次predictのステップでは、私は置き換えることができますmodelfitM

私が行った場合

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

それはまったく意味がありますか、私は両方のパッケージ語彙を間違って混合していますか?

回答:


42

パート1

エラスティックネットでは、パラメーターに対する2種類の制約が使用されます。

  1. なげなわ制約(つまり絶対値のサイズ)βj
  2. リッジの制約(つまり 2サイズ)βj

αは、2つのタイプの相対的な重み付けを制御します。なげなわ制約は、モデル内の変数の選択/削除を可能にします。リッジ制約は、共線変数に対処できます。どちらを重視するかは、データのプロパティによって異なります。多くの相関変数には両方の制約が必要な場合がありますが、いくつかの相関変数はリッジ制約をより強調することを示唆する場合があります。

これを解決する1つの方法は、をとともにチューニングパラメーターとして扱い、現時点でをチューニングするのと同じ方法で、CVエラーが最小になる値を使用することです。αλλcv.glmnet

Rパッケージキャレットglmnetパッケージを使用してモデルを構築でき、パラメーターと両方を調整するように設定する必要があります。αλ

パート2

Q3

はい、この場合(変数の数観測数)の場合、使用するためのヘルプページmn?glmnet

type.gaussian = "naive"

途中で計算されたすべての内積を保存する代わりに、多数の変数で非効率的であるか、場合、オプションは内積を計算する必要があるたびにをループします。mn"naive"n

この引数を指定しなかった場合は、glmnet選択しているだろう"naive"と、とにかくが、それがデフォルトとオプションがパッケージに後で変更して、将来の日にコードを実行している包み、明示的にこれを指定することをお勧めします。m>500

Q4

簡単に言えばnlambda、条件とする最適な値を選択したため、高い値を指定する必要はありません。ただし、係数パスなどをプロットする場合は、間隔全体での値の適度なセットを使用すると、パスのセットがより適切になります。1つの特定の関連するパス全体を実行する計算負荷はそれほど大きくありません。これは、このジョブを正しく実行するためのアルゴリズムを開発する多くの努力の結果です。計算時間に大きな差が出ない限り、デフォルトのままにしておきます。α=0.5λλnlambda

Q5

これは、節約についての質問です。このlambda.minオプションは、最低CVエラーでの値を参照します。このの値での誤差は倍にわたる誤差の平均であるため、この誤差の推定値は不確かです。値を表す最良のモデル(よりも簡単だったサーチでは)、しかし、その中にエラーが発生した1つの最適なモデルの標準誤差。つまり、の値を選択値として使用しますλλklambda.1seλlambda.minlambda.1seλは、最良のモデルよりも若干単純なモデルになりますが、最良のモデルの誤差の倍CV推定の不確実性を考慮すると、誤差の点で最良のモデルと区別できません。k

選択はあなた次第です:

  1. 複雑すぎてわずかにオーバーフィットしている可能性がある最高のモデル: lambda.min
  2. 不確実性が与えられた場合、最良のモデルに匹敵する誤差を持つ最も単純なモデル: lambda.1se

パート3

これは単純なものであり、Rでよく出くわすものですpredict()。99.9%の時間、関数を使用します。Rは、最初の引数として提供されたオブジェクトに対して正しい関数の使用を手配します。

より技術的にpredictは、さまざまなタイプ(技術的にはクラスとして知られている)のオブジェクトに対するメソッド(関数のバージョン)を持つ汎用関数です。によって作成されたオブジェクトには、実際に適合するモデルのタイプに応じて特定のクラスがあります。glmnet(パッケージ)は、これらのさまざまなタイプのオブジェクトの関数のメソッドを提供します。Rはこれらのメソッドを認識しており、提供されたオブジェクトのクラスに基づいて適切なメソッドを選択します。glmnetpredict


2
素晴らしいアンサー!キャレットについて読みました。キャレットとglmnetパッケージの関係について100%確信がないので、これらのパッケージへの「マージ」またはglmnetからキャレットへの切り替えを明確にするために質問を更新しました。
PGreen

1
@PGreen:caret100個以上のMLパッケージからの関数インターフェイスをより一貫性のあるものにラップし、CV、gridsearchを追加し、非常識なパラメーターのデフォルト値を変更するRラッパーパッケージです。
smci

アルファチューニング用に追加するcva.glmnet(..)だけでcv.glmnet(...)、代わりにアルファとラムダを同時に調整できます。次にminlossplot(cva.fit)、どのアルファが最良の結果を与えるかを確認するために実行できます。これは、一部の両方でglmnetUtils
エスペンRiskedal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.