2 votos

¿Cómo calcular una estimación de tiempo y trazarla?

Hace poco hice una página web para la comunidad de un juego. El juego básicamente tiene un dragón online con el que la gente puede luchar. Cada pelea le quita un poco de salud. En el siguiente encuentro con el dragón, la gente informará de su estado de salud. Este es un número de $11$ hasta $0$ . Si el dragón llega a cero, se producirá el llamado período de gracia, en el que todo el mundo puede entrar en el juego y matarlo muy fácilmente para obtener algunas buenas recompensas.

Este sitio ha estado funcionando durante una pequeña semana y he reunido cerca de mil informes hasta ahora, así que sentí que era el momento de calcular algunas estadísticas. La estadística más solicitada es una estimación de cuándo se producirá el periodo de gracia.

La idea que tengo con esto es que quiero trazar un gráfico en el sitio, en el $y$ -eje un rango de $0$ a $11$ En el $x$ -eje un rango de tiempo. Y básicamente trazar todos los informes que tengo con $3$ diferentes líneas:

  • La estimación de salud que genero en base a todos los informes
  • La salud basada en el valor más alto reportado
  • La salud basada en el valor más bajo reportado

Hacer esto no es realmente un problema, sólo trazar los números que tengo en el gráfico, donde se vuelve interesante es hacer una estimación más allá de estos números. Podría hacer algo como calcular la caída de la salud entre dos puntos, y usar eso para la pendiente descendente, pero será lineal y no muy precisa (ya que no consideraría todos los informes anteriores).

Por lo tanto, estoy buscando algunos consejos sobre cómo puedo enfocar esto. He intentado buscar en Google, pero me resulta muy difícil encontrar lo que necesito. Probablemente porque simplemente me falta el conocimiento de los términos que tengo que buscar. ¿Hay alguna fórmula de uso general para esto? ¿Cómo lo enfocarías tú mismo? ¡Cualquier cosa me ayudaría en este punto realmente!

@Moderadores: Siéntanse libres de añadir etiquetas adicionales ya que realmente no tengo ni idea.

1voto

user36293 Puntos 1

La tarea que estás intentando se llama extrapolación y es notoriamente peligrosa en comparación con la interpolación entre los puntos. Yo sugeriría tres enfoques:

  1. Extrapolación lineal utilizando los dos últimos puntos. Como señalas, esto tiene una utilidad limitada al ir mucho más allá del espacio entre puntos.

    $$y = y_{n-1} + (y_n - y_{n-1}) \frac{x - x_{n-1}}{ x_n - x_{n-1}}$$

  2. Pasa a un orden superior con la cuadrática y la cúbica utilizando los tres o cuatro últimos puntos. De este modo se captará parte de la variación de orden superior al final de la curva. Sin embargo, hay que tener cuidado, ya que la interpolación de orden superior puede llegar a ser bastante inestable .

  3. Para hacerlo mejor, se necesita un modelo para los datos, una idea de la forma de la tendencia general. Esto, combinado con la método de mínimos cuadrados de interpolación que puede utilizarse para predecir más allá de sus datos.

Yo sugeriría intentar el #3. No nos dices la naturaleza de los datos, pero asumiendo que la salud del dragón es principalmente decreciente, podrías ajustarla haciendo una función exponencial con un argumento polinómico, como

$$\exp( - |p(t)| ) $$ donde |p(t)| es el valor absoluto de un polinomio de bajo orden (<4). Esta función tiende a disminuir pero puede capturar alguna variación. Como alternativa, se puede ajustar la función $\log$ de tus datos a un polinomio y traza la exponencial del ajuste. Cualquiera de los dos enfoques asegura que la salud se mantiene positiva en la función ajustada, pero aún puede disminuir. Entonces puedes estimar la muerte del dragón en el tiempo $t_{dead}$ cuando la función ajustada cae por debajo de la unidad de salud mínima (por ejemplo, 1).

Los datos de ejemplo del comentario de Lennard son bastante lineales (correlación de 0,99), por lo que sólo estoy utilizando un polinomio de bajo orden. Los datos reales pueden ser de grano más fino y parece que la preocupación es el comportamiento detallado en el extremo de la distribución. Si este es el caso, un ajuste global para trazar con un ajuste local en las últimas horas para determinar el cruce de cero podría ser el más preciso. Para los datos proporcionados:

time=[0,8,16,24,36,38]
health=[11,9,6,4,1,0]  

Encontré que un ajuste cuadrático simple funcionaba mejor (añadir un término cúbico realmente evitaba un cruce de cero). Si el ajuste excluye el último punto de datos, se predice una muerte a las 40 horas, frente a las 38 de los datos reales. Como se ha señalado anteriormente, un mayor número de muestras con un ajuste sobre la última hora utilizando un polinomio de bajo orden probablemente mejoraría esto.

El código en R es:

require(stats)
require(graphics)
a=1
b=1
c=10
d=1
thefit=nls(health ~ (a*time*time+b*time+c),start=list(a=a,b=b,c=c))
plot(time,health)
new = data.frame(xdata = time)
p=coef(thefit)
curve(p["a"]*x^2+p["b"]*x+p["c"],col='red',add=TRUE)
p

       a            b            c 
0.001173024 -0.325246497 11.149887563 

Nonlinear least squares fit

Obviamente, es bastante lineal.

En el caso de PHP, en Google aparece un clase de regresión polinómica que pueden ser útiles para la pregunta.

1voto

erik Puntos 3923

En base a tu comentario sobre los dragones que reaparecen y el alargamiento de la vida, una cosa a modelar sería la vida en sí misma en lugar de los valores de salud provisionales. Si consideras la duración de la vida en función del número de generaciones o de la hora de inicio, puede que encuentres un modelo que se ajuste. Has observado que la duración de la vida es cada vez mayor, y la modelización puede ayudarte a evaluar si el aumento es lineal, cuadrático o de otro tipo.

Para las predicciones dentro de la vida, el mejor caso sería que todas las vidas siguieran una curva similar, al menos de forma aproximada. Entonces se pueden normalizar las cosas observando el porcentaje de vida transcurrido en función de la salud actual. Para las vidas pasadas de los dragones, se puede determinar retroactivamente el porcentaje de vida transcurrido en cada momento. Para la vida actual, eso es lo que quieres predecir. Basado en tu otro comentario, la curva no tendría una fórmula agradable, pero si siguen patrones similares incluso algo como un ajuste spline podría ser útil para hacer la predicción.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X