Como ajustar uma regressão como

9

Eu tenho alguns dados de séries temporais em que a variável medida é números inteiros positivos discretos (contagens). Quero testar se há uma tendência ascendente ao longo do tempo (ou não). A variável independente (x) está no intervalo de 0 a 500 e a variável dependente (y) está no intervalo de 0 a 8.

Eu pensei que respondesse isso ajustando uma regressão da forma y = floor(a*x + b)usando mínimos quadrados ordinários (OLS).

Como eu faria isso usando R (ou Python)? Existe um pacote existente para ele ou é melhor escrever meu próprio algoritmo?

PS: Eu sei que essa não é a técnica ideal, mas preciso fazer uma análise relativamente simples que eu possa realmente entender - minha formação é biologia, não matemática. Sei que estou violando suposições sobre erro na variável medida e independência das medidas ao longo do tempo.

afaulconbridge
fonte
5
Embora seja matematicamente natural tentar uma regressão dessa forma, por trás dela há um erro estatístico: o termo do erro agora estará fortemente correlacionado com o valor previsto. Essa é uma violação bastante forte das suposições do OLS. Em vez disso, use uma técnica baseada em contagem, conforme sugerido pela resposta de Greg Snow. (De bom grado votei esta questão, no entanto, porque ela reflete algum pensamento e esperteza reais. Obrigado por perguntar aqui!)
whuber

Respostas:

11

Você pode ajustar o modelo que declara usando a função nls(mínimos quadrados não lineares) R, mas como você disse que violará muitas das suposições e ainda provavelmente não fará muito sentido (você está dizendo que o resultado previsto é aleatório em torno de uma etapa função, não valores inteiros em torno de um relacionamento que aumenta suavemente).

A maneira mais comum de ajustar os dados de contagem é usar a regressão de Poisson usando a glmfunção in R, o primeiro exemplo na página de ajuda é uma regressão de Poisson, embora se você não estiver familiarizado com as estatísticas, seria melhor consultar um estatístico para garantir que você está fazendo as coisas corretamente.

Se o valor de 8 for um máximo absoluto (impossível de ver uma contagem mais alta, não é apenas isso que você viu), você pode considerar a regressão logística de probabilidades proporcionais, existem algumas ferramentas para fazer isso em pacotes R, mas você realmente deve envolver um estatístico se você quiser fazer isso.

Greg Snow
fonte
"você está dizendo que o resultado previsto é aleatório em torno de uma função step, não valores inteiros em um relacionamento que aumenta suavemente" --- Isso é algo que eu não havia considerado. No final, eu fui com a regressão de Poisson por glm. Não é a escolha perfeita, mas "suficientemente boa" para o que eu precisava.
precisa saber é o seguinte
10

É claro que a sugestão de Greg é a primeira coisa a tentar: a regressão de Poisson é o modelo natural em muitos aspectos concretos. situações.

No entanto, o modelo que você está sugerindo pode ocorrer, por exemplo, quando você observa dados arredondados: com erros normais do iid .ϵ i

Yi=axi+b+ϵi,
ϵi

Eu acho que é interessante dar uma olhada no que pode ser feito com isso. Denoto por o cdf da variável normal padrão. Se , então usando notações familiares do computador.ϵ N ( 0 , σ 2 ) P ( a x + b + ϵ = k )FϵN(0,σ2)

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

Você observa pontos de dados . A probabilidade do log é dada por Isso não é idêntico aos mínimos quadrados. Você pode tentar maximizar isso com um método numérico. Aqui está uma ilustração em 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");

modelo linear arredondado

Em vermelho e azul, as linhas encontradas por maximização numérica dessa probabilidade e mínimos quadrados, respectivamente. A escada verde é para encontrada a partir da probabilidade máxima ... isso sugere que você poderia usar mínimos quadrados, até uma tradução de por 0,5 e obter aproximadamente o mesmo resultado; ou, esses mínimos quadrados se encaixam bem no modelo onde é o número inteiro mais próximo. Os dados arredondados são tão frequentemente encontrados que tenho certeza de que isso é conhecido e que foi estudado extensivamente ...a x + b a , b b Y i = [ a x i + b + ϵ i ] , [ x ] = x + 0,5 ax+bax+ba,bb

Yi=[axi+b+ϵi],
[x]=x+0.5
Elvis
fonte
4
+1 Adoro essa técnica e, na verdade, enviei um artigo para uma revista de análise de risco alguns anos atrás. (Alguns analistas de risco estão bastante interessados ​​em dados com intervalo). Foi rejeitado como sendo "matemático demais" para o público. :-(. Uma dica: ao usar métodos numéricos, é sempre uma boa idéia fornecer bons valores iniciais para a solução. Considere aplicar OLS aos dados brutos para obter esses valores e, em seguida, "aperfeiçoá-los" com o otimizador numérico.
whuber
Sim, esta é uma boa sugestão. De fato, nesse caso, escolho valores remotos para enfatizar que "funciona", mas, na prática, sua sugestão seria a única solução para evitar começar de uma região muito plana, dependendo dos dados ...
Elvis