È possibile in R (o in generale) forzare i coefficienti di regressione come un certo segno?


10

Sto lavorando con alcuni dati del mondo reale e i modelli di regressione stanno producendo risultati controintuitivi. Di solito mi fido delle statistiche ma in realtà alcune di queste cose non possono essere vere. Il problema principale che sto vedendo è che un aumento di una variabile sta causando un aumento della risposta quando, in realtà nella realtà, devono essere negativamente correlati.

Esiste un modo per forzare un segno specifico per ciascuno dei coefficienti di regressione? Anche qualsiasi codice R per fare questo sarebbe apprezzato.

Grazie per qualsiasi aiuto!



1
Potrebbe essere correlato qui

Questo link r-bloggers.com/positive-coefficient-regression-in-r Credo che risponda alla domanda di JRW sui valori R al quadrato. Come già commentato, è necessario prestare attenzione prima di forzare valori di coefficienti positivi.
Esme_

Risposte:


11
  1. attenzione alla distinzione tra correlazione marginale e correlazione parziale (correlazione condizionata ad altre variabili). Possono legittimamente essere di segno diverso.

    Questo è può in effetti essere negativo mentre il coefficiente di regressione in una regressione multipla è positivo. Non c'è necessariamente alcuna contraddizione in queste due cose. Vedi anche il paradosso di Simpson , che è in qualche modo correlato (specialmente il diagramma). In generale non si può dedurre che un coefficiente di regressione deve essere di un segno basato semplicemente su un argomento sulla correlazione marginale.corr(Y,Xi)

  2. Sì, è certamente possibile limitare i coefficienti di regressione a o 0 *. Esistono diversi modi per farlo; alcuni di questi possono essere fatti abbastanza facilmente in R, come via . Vedi anche le risposte a questa domanda che menzionano una serie di pacchetti R e altri possibili approcci.00nnls

    Tuttavia ti avverto di non ignorare frettolosamente i punti in 1. solo perché molti di questi sono facilmente implementabili.

    * (puoi usare programmi che non fanno negativo per fare non positivi negando la variabile corrispondente)


10

Ci può anche essere un modo, ma direi che è non è consigliabile nelle vostre circostanze.

Se hai un risultato impossibile:

1) C'è un problema con i tuoi dati 2) C'è un problema con la tua definizione di "impossibile" o 3) Stai usando il metodo sbagliato

Innanzitutto, controlla i dati. Secondo, controlla il codice. (O chiedi ad altri di controllarlo). Se entrambi vanno bene, forse sta accadendo qualcosa di inaspettato.

Fortunatamente per te, hai una semplice "impossibilità": dici che due variabili non possono essere correlate positivamente. Quindi, crea un diagramma a dispersione e aggiungi uno più fluido e vedi. Un singolo anomalo potrebbe causare questo; o potrebbe essere una relazione non lineare. O qualcos'altro.

Ma, se sei fortunato, hai trovato qualcosa di nuovo. Come diceva il mio professore preferito "Se non sei sorpreso, non hai imparato nulla".


(+1 sia a Peter che a Glen) @JRW - Se risolvi il segno, vorrei essere una mosca sul muro quando provi a spiegare al tuo pubblico il coefficiente che "hai ottenuto" e il suo intervallo di confidenza. Inoltre, potrebbero legittimamente chiedere: hai corretto il segno e / o la gamma degli altri? In caso contrario, perché no?
rolando2,

6

Per rispondere alla tua domanda specifica, puoi provare il pacchetto nnls che minimizza la regressione dei quadrati con vincoli non negativi sui coefficienti. È possibile utilizzarlo per ottenere i segni desiderati modificando i segni dei predittori appropriati.

A proposito, ecco un modo molto semplice per creare un set di dati per dimostrare come sia possibile avere correlazioni positive e coefficienti di regressione negativi.

> n <- rnorm(200)
> x <- rnorm(200)
> d <- data.frame(x1 = x+n, x2= 2*x+n, y=x)
> cor(d)
      x1        x2         y
 x1 1.0000000 0.9474537 0.7260542
 x2 0.9474537 1.0000000 0.9078732
 y  0.7260542 0.9078732 1.0000000
> plot(d)
> lm(y~x1+x2-1, d)

Call:
lm(formula = y ~ x1 + x2 - 1, data = d)

Coefficients:
x1  x2  
-1   1  

Ho appena giocato un po 'con questo pacchetto nnls. Esiste un modo per ottenere un valore R al quadrato corretto (o qualcosa di equivalente) o dovrei provare a calcolarlo da solo?
JRW,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.