Come adattare una regressione come in R?


9

Ho alcuni dati di serie temporali in cui la variabile misurata è numeri interi positivi discreti (conteggi). Voglio testare se c'è una tendenza al rialzo nel tempo (o meno). La variabile indipendente (x) è nell'intervallo 0-500 e la variabile dipendente (y) è nell'intervallo 0-8.

Ho pensato di rispondere a questo adattando una regressione del modulo y = floor(a*x + b)utilizzando i minimi quadrati ordinari (OLS).

Come potrei fare questo usando R (o Python)? Esiste un pacchetto esistente per esso o sto meglio scrivendo il mio algoritmo?

PS: So che questa non è la tecnica ideale, ma devo fare un'analisi relativamente semplice che posso davvero capire - il mio background è la biologia non la matematica. So di violare le ipotesi sull'errore nella variabile misurata e sull'indipendenza delle misurazioni nel tempo.


5
Sebbene sia matematicamente naturale provare una regressione di questa forma, dietro si nasconde un errore statistico: il termine dell'errore sarà ora fortemente correlato con il valore previsto. Questa è una violazione abbastanza forte delle ipotesi OLS. Utilizzare invece una tecnica basata sul conteggio come suggerito dalla risposta di Greg Snow. (Ho volentieri valutato questa domanda, perché riflette un vero pensiero e intelligenza. Grazie per averlo chiesto qui!)
whuber

Risposte:


11

Potresti adattare il modello che affermi usando la funzione nls(non quadrati minimi quadrati) R, ma come hai detto che violerà molti dei presupposti e probabilmente non avrà molto senso (stai dicendo che il risultato previsto è casuale attorno a un passaggio funzione, non valori interi attorno a una relazione in costante aumento).

Il modo più comune per adattare i dati di conteggio è usare la regressione di Poisson usando la glmfunzione in R, il primo esempio nella pagina di aiuto è una regressione di Poisson, anche se se non si ha familiarità con le statistiche sarebbe meglio consultare uno statistico per assicurarsi che stai facendo le cose correttamente.

Se il valore di 8 è un massimo assoluto (impossibile vedere un conteggio più elevato, non solo quello che hai visto), potresti considerare la regressione logistica delle quote proporzionali, ci sono un paio di strumenti per farlo nei pacchetti R, ma tu dovresti davvero coinvolgere uno statistico se vuoi farlo.


"stai dicendo che il risultato previsto è casuale attorno a una funzione di passaggio, non a valori interi attorno a una relazione in costante aumento" --- Questo è qualcosa che non avevo considerato. Alla fine, sono andato con la regressione di Poisson per glm. Non è la scelta perfetta, ma "abbastanza buono" per quello di cui avevo bisogno.
afaulconbridge,

10

È che il suggerimento di Greg è la prima cosa da provare: la regressione di Poisson è il modello naturale in molti molti concreti situazioni.

Tuttavia, il modello che stai suggerendo può verificarsi ad esempio quando si osservano dati arrotondati: con iid normali errori .

Yi=axi+b+ϵi,
ϵi

Penso che sia interessante dare un'occhiata a cosa si può fare con esso. Indico per il cdf della variabile normale standard. Se , quindi usando notazioni informatiche familiari.FϵN(0,σ2)

P(ax+b+ϵ=k)=F(kb+1axσ)F(kbaxσ)=pnorm(k+1axb,sd=σ)pnorm(kaxb,sd=σ),

Si osservano punti dati . La probabilità del log è data da Questo non è identico ai minimi quadrati. Puoi provare a massimizzare questo con un metodo numerico. Ecco un'illustrazione in R:(xi,yi)

(a,b,σ)=ilog(F(yib+1axiσ)F(yibaxiσ)).
log_lik <- function(a,b,s,x,y)
  sum(log(pnorm(y+1-a*x-b, sd=s) - pnorm(y-a*x-b, sd=s)));

x <- 0:20
y <- floor(x+3+rnorm(length(x), sd=3))
plot(x,y, pch=19)
optim(c(1,1,1), function(p) -log_lik(p[1], p[2], p[3], x, y)) -> r
abline(r$par[2], r$par[1], lty=2, col="red")
t <- seq(0,20,by=0.01)
lines(t, floor( r$par[1]*t+r$par[2]), col="green")

lm(y~x) -> r1
abline(r1, lty=2, col="blue");

modello lineare arrotondato

In rosso e blu, le linee trovano rispettivamente con la massimizzazione numerica di questa probabilità e con i minimi quadrati. La scala verde è per trovata dalla massima verosimiglianza ... questo suggerisce che potresti usare meno quadrati, fino a una traduzione di di 0,5, e ottenere approssimativamente lo stesso risultato; oppure, che i minimi quadrati si adattino bene al modello dove è il numero intero più vicino. I dati arrotondati sono così spesso soddisfatti che sono sicuro che questo è noto ed è stato studiato a fondo ...ax+bax+ba,bb

Yi=[axi+b+ϵi],
[x]=x+0.5

4
+1 Adoro questa tecnica e in realtà ho presentato un articolo su un giornale di analisi del rischio alcuni anni fa. (Alcuni analisti del rischio sono piuttosto interessati ai dati valutati per intervallo.) È stato respinto perché "troppo matematico" per il loro pubblico. :-(. Un consiglio: quando si usano metodi numerici, è sempre una buona idea fornire buoni valori iniziali per la soluzione. Considerare di applicare OLS ai dati grezzi per ottenere quei valori, quindi "lucidarli" con l'ottimizzatore numerico.
whuber

Sì, questo è un buon suggerimento. In effetti, in quel caso scelgo valori remoti per sottolineare che "funziona", ma in pratica il tuo suggerimento sarebbe l'unica soluzione per evitare di partire da una regione molto piatta, a seconda dei dati ...
Elvis
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.