Vorrei sapere come limitare determinati parametri in lm()
per avere un coefficiente positivo. Ci sono alcuni pacchetti o funzioni (ad esempio display
) in grado di rendere tutti i coefficienti e le intercettazioni positive.R - Forza certi parametri per avere coefficiente positivo in lm()
Ad esempio, in questo esempio, mi piacerebbe solo forzare x1
e x2
ha coefficienti positivi.
x1=c(NA,rnorm(99)*10)
x2=c(NA,NA,rnorm(98)*10)
x3=rnorm(100)*10
y=sin(x1)+cos(x2)-x3+rnorm(100)
lm(y~x1+x2+x3)
Call:
lm(formula = y ~ x1 + x2 + x3)
Coefficients:
(Intercept) x1 x2 x3
-0.06278 0.02261 -0.02233 -0.99626
ho funzione nnnpls()
provato in pacchetto 'nnls'
, può controllare il segno coefficiente facilmente. Purtroppo non posso usarlo a causa di problemi con NA nei dati in quanto questa funzione non consente NA.
Ho visto la funzione glmc()
può essere utilizzata per applicare i vincoli ma non ho potuto farlo funzionare.
Qualcuno potrebbe farmi sapere cosa devo fare?
Grazie, hai detto "Se vincoli i coefficienti di x1 e x2 per essere positivi, diventano zero (come previsto)", ma perché è? Inoltre, nella funzione penalizzata(), sembra che tu debba definire ogni parametro come positivo o negativo, puoi renderli liberi (ad esempio lambda3 può essere sia positivo che negativo senza specificarlo). –
No, 'positivo = FALSE' significa" libero ". Inoltre, se il minimo effettivo della somma dei quadrati si verifica per le stime negative, è molto probabile che il minimo nello spazio dei parametri vincolato si verifichi per zero. – Roland
Sarebbe più interessante se non fosse coinvolto alcun pacchetto; Diciamo che si vorrebbe applicarlo in un'impostazione non OLS. –