2012-03-28 11 views
3

私は線形回帰をしようとしていますが、正の係数を持つ変数を使用することを検討しています(これはハードしきい値化と呼ばれていますが、わかりません)。例えばR線形回帰でスレッシュホールドを行う方法はありますか?

:上記の回帰で

> summary(lm1) 

Call: 
lm(formula = value ~ ., data = intCollect1[, -c(1, 3)]) 

Residuals: 
    Min  1Q Median  3Q  Max 
-15.6518 -0.2089 -0.0227 0.2035 15.2235 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.099763 0.024360 4.095 4.22e-05 *** 
modelNum3802 0.208867 0.008260 25.285 < 2e-16 *** 
modelNum8000 -0.086258 0.013104 -6.582 4.65e-11 *** 
modelNum8001 -0.058225 0.010741 -5.421 5.95e-08 *** 
modelNum8002 -0.001813 0.012087 -0.150 0.880776  
modelNum8003 -0.083646 0.011015 -7.594 3.13e-14 *** 
modelNum8004 0.002521 0.010729 0.235 0.814254  
modelNum8005 0.301286 0.011314 26.630 < 2e-16 *** 

、私は唯一のモデル3802、8004および8005の各変数名をコピーせずに、これを行うと、貼り付けする方法はありますを使用したいのでしょうか?

+2

'?coef'を確認できます。 負の係数 の変数を削除し、回帰を再計算すると、 の残りの係数の符号が変わる可能性があります。 –

答えて

3

代わりlmを使用して、あなたは次計画の面であなたの問題を定式化することができます

があなたの線形係数はすべて正で制約を受ける乗複製エラーの合計を最小限に抑えます。

このような問題はlimSolveパッケージからlseiを使用して解決することができます。あなたの例を見てみると、それはこのように多くなります:

x.variables <- c("modelNum3802", "modelNum8000", ...) 
num.var <- length(x.variables) 

lsei(A = intCollect1[, x.variables], 
    B = intCollect1$value, 
    G = diag(num.var), 
    H = rep(0, num.var)) 
1

私は見て価値があるとnnls(非負最小二乗)のパッケージを発見しました。

0

次の方法でも、あなたの線形回帰モデルを再定式ことができます。 ラベルは〜合計(EXP(\ alpha_i)のf_i)

最適化の対象は、 sum_j(label_jになります - sum_i(EXP(\ alpha_i) f_i))^ 2

これには、閉じた形の解を持っていませんが、それはalpha_i年代\に凸なので、効率的に解くことができます。あなたはalpha_i年代\を計算すると

することは、あなたはそれらを累乗することにより、通常の線形モデルの説明変数としてそれらを書き直すことができます。

関連する問題