Posterior a de esta extensa recopilación de datos pudimos solucionar este disgusto que tienen algunos usuarios. Te regalamos la solución y nuestro deseo es servirte de mucha ayuda.
Solución:
Si el objetivo es determinar una envolvente de la siguiente forma
$$f(t)=Apm sqrtD t+B t$$
que contiene una proporción esperada deseada ($1-alfa$) de los valores en cada paso de tiempo, entonces para la serie de tiempo mencionada los coeficientes son $A=1$, $B=0$y $D=(Phi^-1(1-alpha/2))^2$ dónde $Fi^-1$ es la inversa de la función de distribución acumulativa normal estándar. No se necesitan datos.
(* Generate several time series *)
nSim = 200
n = 100
ManyRandomWalks = Table[RandomWalkData = RandomVariate[NormalDistribution[0, 1], n];
RandomWalk = 1 + Accumulate[RandomWalkData];
RandomWalk, i, 1, nSim];
(* Set parameters associated with this particular method of generating a time series *)
(* No need to estimate those from the data *)
α = 0.01; (* Proportion of observations expected to be outside the envelope *)
a, d, b = 1,
InverseCDF[NormalDistribution[0, 1], 1 - α/2]^2, 0
(* Plot the time series and an envelope containing the central 100(1-α)% of the values
for each time step *)
Show[ListPlot[ManyRandomWalks, Joined -> True, PlotStyle -> Thin],
Plot[a + Sqrt[d t] + b t, a - Sqrt[d t] + b t, t, 0, n, PlotStyle -> Thickness[0.01], Red]]
He conectado los puntos como recordatorio de que hay no 100*200 puntos independientes para los que someter a una regresión.
Supongamos que uno tiene un montón de series de tiempo sin detalles sobre el mecanismo de generación de datos, pero sabe que cada serie de tiempo se generó independientemente de las demás. (Sí, eso es usar una interpretación algo vaga de la independencia).
Además, se quiere estimar un sobre que contendría la central $100(1-alfa)$% de las observaciones para cada paso de tiempo tal que la envolvente tenga la siguiente forma funcional:
$$f(t)=Apm sqrtD t+B t$$
Uno podría encontrar las estimaciones muestrales de la $1-alfa/2$% y $alfa/2$% cuantiles para cada paso de tiempo y luego ajustar una regresión para obtener estimaciones de los parámetros $A$, $B$y $D$.
Usando los datos simulados del OP (ManyRandomWalks
) creamos un conjunto de datos que tiene el paso de tiempo y un $-1$ asociado con los cuantiles inferiores y $+1$ asociado con los cuantiles superiores y luego ejecutar NonlinearModelFit
.
α = 0.05;
lower = Quantile[#, α/2] & /@ Transpose[ManyRandomWalks];
upper = Quantile[#, 1 - α/2] & /@ Transpose[ManyRandomWalks];
data = Transpose[Join[Range[n], Range[n]],
Join[ConstantArray[-1, n], ConstantArray[1, n]],
Join[lower, upper]];
nlm = NonlinearModelFit[data, a + p Sqrt[d t] + b t, a, b, d, t, p];
nlm["BestFitParameters"]
(* a -> 0.227842, b -> 0.0196022, d -> 4.00303 *)
Ahora traza todo:
Show[ListPlot[ManyRandomWalks, Joined -> True, PlotStyle -> Thin],
Plot[a + Sqrt[d t] + b t, a - Sqrt[d t] + b t /. nlm["BestFitParameters"], t, 0, n,
PlotStyle -> Thickness[0.01], Red],
ListPlot[data[[All, 1, 3]], PlotStyle -> Black, PointSize[0.01]]]