Não há problema de identificabilidade, exceto no sentido trivial de que qualquer modelo em particular pode ter duas descrições. O problema real parece ser a dificuldade de ajustar o modelo - mas isso se deve à maneira como os modelos são parametrizados, e não à falta de identificabilidade.
Esse problema tem uma solução igualmente trivial: declare, sem qualquer perda de generalidade, que . Se você quer ser realmente exigente, insista também que, se , então .β≥δβ=δα≥γ
Infelizmente, isso requer qualquer procedimento para ajustar o modelo a respeitar essas restrições. A introdução de uma restrição aqui não é tão ruim, porque o aplicativo é tal que obviamente todos os parâmetros não são negativos de qualquer maneira: o espaço do parâmetro já possui limites nítidos. A inclusão de mais uma restrição não forçará nenhuma alteração na forma como ajustamos o modelo.
Um método conhecido para converter uma otimização restrita em uma irrestrita é remetereter o problema para que, no novo espaço de parâmetro, os limites sejam empurrados para o infinito. Existem muitas maneiras de conseguir isso aqui. Uma consideração do significado dos parâmetros nos guiará. Em particular, é o máximo atingido pela função para . Dado , então necessariamente eν=α+γ
t→g(t;α,β,γ,δ)=α(1−e−βt)+γ(1−e−δt)
t≥0ν0≤α≤νγ=ν−α. Quando valores não negativos somam um todo fixo, geralmente funciona para parametrizar suas proporções do todo em termos de ângulos: seja uma proporção o cosseno ao quadrado e a outra o seno ao quadrado. Além disso, uma maneira simples de garantir que , e sejam positivos é torná-los exponenciais - ou seja, use seus logaritmos como parâmetros. Finalmente, para aplicar , defina como o cosseno quadrado de alguns ângulos vezes . Assim, podemos remeterar o problema ajustando a função
νβδδ≤βδβ
t→f(t;n,a,b,d)=en(1−cos(a)2exp(−ebt)−sin(a)2exp(−ebcos(d)2t)).
A partir de estimativas desses parâmetros (que, a propósito, não são "identificáveis" devido à ambiguidade nos ângulos e ), é possível recuperar os originais comoad
αβγδ=encos(a)2=eb=ensin(a)2=ebcos(d)2.
As propriedades das funções exponencial e trigonométrica asseguram todas as restrições: , e . (Como os flutuadores de precisão dupla podem se tornar astronomicamente pequenos, não há distinção prática entre e nessas restrições.)α>0β≥δ>0γ>0>≥
Nesse sentido bem definido, o modelo é identificável, mesmo que os parâmetros usados para ajustá-lo não sejam identificáveis.
Embora se possa usar o MCMC, se o objetivo é apenas ajustar a curva, é mais simples usar um solucionador numérico como Newton-Raphson. O truque é encontrar um bom valor inicial . O máximo de seria uma leve superestimação de ; então comece, talvez com . Você pode começar com , supondo que cada componente faça uma contribuição substancial ao todo. Faça algumas suposições razoáveis sobre e base nas taxas esperadas de decaimento. Por exemplo, se o intervalo de for razoável, considere como uma fração da maioryienn=log(max(yi)/2)a=π/4ebedtbt talvez, escolha arbitrariamente ; talvez use um valor inicial menor. (Muitas vezes você vai ter diferentes valores para as estimativas de parâmetros, dependendo estas escolhas, mas normalmente eles não afetará significativamente o função em si .)d=π/4f
Em muitas circunstâncias, essa abordagem funciona muito bem. Exceto quando a variação dos erros é do mesmo tamanho que ou maior (onde será difícil discernir qualquer sinal sem uma grande quantidade de dados), o ajuste funciona mesmo com pequenas quantidades de dados: todos precisa é de quatro.maxyi
Observe que, independentemente de como o modelo é adequado, normalmente haverá uma grande incerteza nos parâmetros: essa família de curvas é essencialmente uma pequena perturbação da família exponencial de dois parâmetros . Em muitas circunstâncias, então, dois dos parâmetros (correspondentes à amplitude e à maior taxa de decaimento ) podem ser identificados com razoável precisão, mas os outros dois parâmetros, que refletem pequenas variações dessa forma exponencial, geralmente são altamente incertos.t→Ae−BtAB
A figura mostra um exemplo de um ajuste desafiador. A curva subjacente é mostrada em preto. Por fim, atinge um máximo de , muito lentamente. Apenas pontos de dados estão disponíveis, plotados como pontos cinza. O desvio padrão dos erros aleatórios é , uma proporção considerável desse máximo. Muitos dos erros foram positivos, fazendo com que a curva ajustada em vermelho seja um pouco maior. Os dois componentes exponenciais da curva ajustada são mostrados como linhas cinza tracejadas e pontilhadas. Um mostra um rápido aumento para um limiar de no momento ; o outro reflete o outro exponencial subindo ao seu limite de4/3241/21/3t=11. (Você terá pouca esperança de reproduzir esse "ombro" afiado próximo de até ter pontos de dados ou mais: experimente variando no código abaixo.)t=11000n
Seu sucesso em qualquer problema específico dependerá da magnitude dos erros; a faixa de valores de que são amostrados; como esses valores são espaçados; quantos valores estão disponíveis; e escolha dos valores iniciais. No entanto, este parece ser um problema tratável em geral, com soluções que podem ser obtidas rapidamente. Além disso, qualquer ajustador de probabilidade máxima procederá de maneira semelhante para minimizar a soma dos quadrados dos resíduos - e, além disso, fornecerá regiões de confiança para os parâmetros.t
Este é o R
código que usei para testar esta proposta. Ele reproduz a figura e é facilmente modificado - altere os valores das variáveis no início - para estudar dados parecidos com os que você possa ter.
#
# Describe the underlying model
#
set.seed(17)
alpha <- 1
beta <- 2
gamma <- 1/3
delta <- 1/10
sigma <- 1/2 # Error SD.
n <- 24
x.max <- 20 # Largest value of t.
#
# The original parameterization.
#
g <- function(x, alpha, beta, gamma, delta) {
alpha * (1 - exp(-beta * x)) + gamma * (1 - exp(-delta * x))
}
#
# The re-parameterization. `f.1` and `f.2` are the two exponential components.
#
f <- function(x, nu, t.a, log.b, t.d) {
n <- exp(nu)
a <- cos(t.a)^2
alpha <- n*a
gamma <- n*(1-a)
beta <- exp(log.b)
delta <- cos(t.d)^2 * beta
n - alpha * exp(-beta * x) - gamma * exp(-delta * x)
}
f.1 <- function(x, nu, t.a, log.b, t.d) {
n <- exp(nu)
a <- cos(t.a)^2
alpha <- n*a
beta <- exp(log.b)
alpha * (1 - exp(-beta * x))
}
f.2 <- function(x, nu, t.a, log.b, t.d) {
n <- exp(nu)
a <- cos(t.a)^2
gamma <- n*(1-a)
beta <- exp(log.b)
delta <- cos(t.d)^2 * beta
gamma * (1 - exp(-delta * x))
}
#
# The objective to minimize is the mean squared residual.
# This is equivalent to finding the MLE for Gaussian errors.
#
obj <- function(theta, x, y) {
crossprod(y - f(x, theta[1], theta[2], theta[3], theta[4])) / length(x)
}
#
# Create data and plot them.
#
x <- seq(0, x.max, length.out=n)
y <- g(x, alpha, beta, gamma, delta) + rnorm(length(x), 0, sigma)
plot(x,y, pch=16, col="#00000040", xlab="t")
#
# Fit the curve.
#
theta <- c(nu=log(max(y)/2), t.a=pi/4, log.b=log(max(x)/10), t.d=pi/4)
fit <- nlm(obj, theta, x=x, y=y, gradtol=1e-14)
theta.hat <- fit$estimate
#
# Plot relevant curves.
#
curve(g(x, alpha, beta, gamma, delta), add=TRUE, lwd=2)
curve(f(x, theta.hat[1], theta.hat[2], theta.hat[3], theta.hat[4]),
add=TRUE, col="Red", lwd=2)
curve(f.1(x, theta.hat[1], theta.hat[2], theta.hat[3], theta.hat[4]),
add=TRUE, col="Gray", lty=2, lwd=2)
curve(f.2(x, theta.hat[1], theta.hat[2], theta.hat[3], theta.hat[4]),
add=TRUE, col="Gray", lty=3, lwd=2)