A menos que tenga la combinación adecuada de $\alpha$ , $\beta$ y los valores de $x_i$ Puede que sea imposible precisar el valor de $t_0$ . El problema es que estas curvas pueden ser difíciles de distinguir.
Para obtener un ajuste, considerar la búsqueda sobre un conjunto razonable de valores de $t_0$ . Para cada valor, el problema es un Modelo Lineal Generalizado de Poisson estándar, por lo que se puede ajustar de forma rutinaria. Extraiga una medida del ajuste, como la desviación (o medidas equivalentes AIC y BIC). Un valor "plausible" de $t_0$ es cualquiera cuyo ajuste no sea mucho mayor que el valor con menor desviación. Un buen umbral de corte para utilizar la diferencia es el doble del percentil superior de la distribución chi-cuadrado con 1 grado de libertad. El rango de valores resultantes de $t_0$ es un intervalo de confianza para $t_0$ .
Al elegir las unidades de medida adecuadas para $t_r$ (que llamaré simplemente $t$ ), podemos suponer que los valores muestrales de $t$ oscilan entre $0$ a $1$ . Esto facilita la comparación de los modelos y da $t_0$ un significado inherente. Por ejemplo, $t_0\approx -1$ es bastante grande porque es comparable a toda la gama del $t$ . Limitaremos nuestra búsqueda a los valores negativos de $t_0$ porque el modelo no tiene sentido cuando $t_0$ es igual o superior al más pequeño $t$ en el conjunto de datos.
He aquí un ejemplo generado a partir del modelo con $\log(\lambda)=0$ , $\alpha=2$ , $\beta=1/3$ y $t.0 = -1/10$ con $30$ $t$ valores igualmente espaciados a lo largo de su rango, como se describe en la pregunta.
He buscado una serie de $t.0$ valores geométricamente espaciados de $-0.01$ a $-3$ . Aquí está el gráfico de cómo varía la desviación:
Puntos dentro de la mitad del percentil 95 de $\chi^2(1)$ (igual a $1.92$ ) se indican como "significativos". Los valores correspondientes de $t_0$ van desde $-0.022$ a $-0.37$ . Un rango tan estrecho de estimaciones es raro En muchos casos, la desviación apenas cambiará, independientemente del valor que se dé a $t_0$ .
La siguiente figura ayuda a mostrar por qué las estimaciones de $t_0$ puede variar tanto. Para cada uno de los valores "significativos" de $t_0$ en la búsqueda, trazo la curva correspondiente al ajuste GLM de $\alpha$ , $\beta$ y $\log(\lambda)$ . Puedes ver que las curvas apenas varían:
Son los que más varían en los valores bajos de $t$ . Esta es una información valiosa. Indica que si se pudiera elegir qué valores de $t$ para medir, debe concentrar muchos de ellos en valores pequeños. Como ejemplo, he creado un conjunto de datos en el que $t$ fue muestreado en $6$ valores espaciados geométricamente de $0.007$ a $1$ . Cada uno de estos valores fue medido $5$ veces de forma independiente, produciendo otro conjunto de datos de $30$ valores. Aquí están los ajustes plausibles junto con los datos:
Casi no hay diferencias visibles entre ellos. El rango de valores plausibles de $t_0$ es notablemente más estrecho, lo que demuestra la mejora en la estimación que permite una mejor elección de los valores de $t$ a la muestra.
Para obtener intervalos de confianza para $\alpha$ , $\beta$ y $\log(\lambda)$ extraiga los intervalos de confianza del modelo GLM ajustado con $t_0$ se establece en el que tiene la menor desviación.
Los ajustes consiguen mantenerse iguales al reequilibrar los efectos de los otros parámetros como $t_0$ es variado. Utilizando de nuevo este primer conjunto de datos, he aquí cómo varían las estimaciones con $t_0$ (como $t_0$ a través de su $95\%$ intervalo de confianza: los valores "significativos" que se muestran en la segunda figura).
(El verdadero valor de $t_0$ está marcado con una línea vertical).
Incluso si se restringen los modelos a valores no negativos de $\alpha$ y $\beta$ , todavía hay una gran variedad de $(\log(\lambda),\alpha,\beta,t_0)$ combinaciones de parámetros que producen casi el mismo ajuste.
Para quienes estén interesados en profundizar en este tema, aquí está la R
código que produjo las cifras.
library(ggplot2)
#
# Specify the data-generation model.
#
lambda.log <- 0
t.0 <- -0.1
alpha <- 2
beta <- 1/3
size <- 0.95 # Percentile of chi-square(1) for deviance cutoff
# n <- 6
# x <- rep(exp(seq(-5, 0, length.out=n)), 5)
x <- seq(0, 1, length.out=30)
f <- function(x, theta) {
exp(theta["lambda.log"] - log(x - theta["t.0"]) * theta["alpha"] - theta["beta"] * x)
}
theta <- c(lambda.log=lambda.log, alpha=alpha, beta=beta, t.0=t.0)
#
# Generate data.
#
set.seed(17)
X <- data.frame(x=x, y.hat=f(x, theta))
X$y <- with(X, rpois(length(x), y.hat))
#
# Generate a closely-spaced set of regressors for the purpose of plotting
# fits, etc.
3
x.0 <- seq(min(x), max(x), length.out=201)
X.0 <- data.frame(x=x.0, y.hat=f(x.0, theta))
#
# FIGURE 1: Data with the underlying model.
#
ggplot(X, aes(x,y)) + geom_path(aes(x,y.hat), X.0, size=1) +
geom_point(alpha=1/2, shape=21, fill="Black") + #geom_smooth() +
xlab("t") +
ggtitle("Data with True Curve")
#
# Search a range of values of t.0.
#
u <- -exp(seq(-5, 1, length.out=31))
fits <- lapply(u, function(u) glm(y ~ I(log(x-u)) + x, X, family="poisson"))
#
# Identify which values of t.0 are closest to achieving the best deviance.
#
deviance <- sapply(fits, function(x) x$deviance)
i <- which(deviance <= min(deviance) + qchisq(size, 1)/2)
#
# FIGURE 2: Deviance vs. t.0
#
D <- data.frame(t.0=u, deviance=deviance,
Significant=deviance <= min(deviance) + qchisq(size, 1)/2)
ggplot(D, aes(x=t.0, y=deviance)) +
geom_line(size=1) +
geom_point(aes(color=Significant, shape=Significant), size=2) +
ggtitle("Deviance vs. t.0")
#
# FIGURE 3: Display plausible fits.
#
m <- length(i)
X.1 <- data.frame(t.0=rep(u[i], each=length(x.0)),
x = rep(x.0, m),
y.hat=c(sapply(i, function(j) {
b <- c(lambda.log=1, alpha=-1, beta=-1) * fits[[j]]$coef
f(x.0, c(b, t.0=u[j]))})))
X.1$t.0 <- ordered(signif(X.1$t.0, 1))
ggplot(X.1, aes(x,y.hat)) +
geom_line(aes(color=t.0, group=t.0), size=1, alpha=1/2) +
geom_point(aes(x,y), X, alpha=1/2, shape=21, fill="Black") +
xlab("t") + ylab("y") +
ggtitle("Plausible Fits For Varying t.0")
#
# FIGURE 4: Plot coefficients vs. t.0.
#
library(data.table)
a <- sapply(fits[i], coef)
A <- as.data.table(t(a))
names(A) <- c("lambda.log", "alpha", "beta")
A$t.0 <- u[i]
A <- rbind(A[, .(t.0, Estimate=lambda.log, Coefficient="log(lambda)")],
A[, .(t.0, Estimate=-alpha, Coefficient="alpha")],
A[, .(t.0, Estimate=-beta, Coefficient="beta")])
ggplot(A, aes(t.0, Estimate, group=Coefficient)) +
geom_vline(xintercept=t.0) +
geom_line(aes(color=Coefficient), size=1) +
ggtitle("Coefficient Estimates")