26 votos

¿Existen prácticas comunes en matemáticas para evitar errores?

Se me ocurrió que las matemáticas son algo parecido a la programación (o viceversa, si se prefiere) porque, en ambas, es fácil cometer errores o pasarlos por alto, y el más mínimo error o suposición equivocada puede hacer que todo lo demás salga completamente mal.

En programación, para que el código sea menos propenso a errores y más fácil de mantener, existen algunos principios como no te repitas y refactorizar módulos grandes en otros más pequeños . Si preguntas a cualquier programador experimentado sobre esto, te dirá por qué estos principios son tan importantes y cómo facilitan la vida a largo plazo.

¿Hay algo que los matemáticos hagan con frecuencia para protegerse de los errores y facilitar las cosas en general? Si es así, ¿cuáles son y cómo funcionan?

31voto

YequalsX Puntos 320

Un análogo de la técnica de "refactorizar módulos grandes en otros más pequeños" es el de dividir la demostración de un teorema largo en una secuencia de lemas. Esto facilita el seguimiento del flujo lógico del argumento y, por tanto, la identificación de posibles puntos débiles. También permite utilizar "variables y notación definidas localmente" (es decir, introducir notación y similares que sólo se utilizan en la demostración del lema, y no en el contexto más amplio de la demostración del teorema). De forma análoga a la situación de la programación (creo), esto puede eliminar el desorden de la demostración general del teorema (tener mucha notación y construcciones auxiliares en un argumento puede hacer que sea más difícil de seguir).

El concepto de "no repetirse" (si lo he entendido bien) también tiene un análogo, que de nuevo tiene que ver con la demostración de lemas: los matemáticos suelen aislar varios principios en lemas técnicos, a menudo enunciados con mayor generalidad que la necesaria para una aplicación concreta. Entonces, en lugar de desgranar una y otra vez técnicas estrechamente relacionadas en un argumento, se puede se pueden deducir los resultados deseados como aplicaciones particulares del lema técnico general. (El lema de Nakayama en el álgebra conmutativa es un ejemplo de ello, el teorema de la categoría de Baire es otro).

Esto también tiene la ventaja de hacer el flujo de la prueba más fácil de seguir, porque uno puede reconocer típicamente cuando el autor está manipulando las cosas para ponerse en el contexto de algún lema general bien conocido, mientras que ad hoc las construcciones y los argumentos requieren mucho más esfuerzo para analizarlos. (Por supuesto, cualquier prueba nueva requerirá algunas ideas nuevas, lo que exigirá concentración y atención tanto por parte del autor como del lector, pero uno quiere reducir estos momentos al mínimo necesario, para que el esfuerzo de analizar la prueba pueda dirigirse a esos pocos lugares en los que es realmente necesario, en lugar de difundirse por todo el argumento).

Una tercera técnica que mencionaré, que es más difícil (para mí) de precisar, es la de sustituir el cálculo por el razonamiento conceptual. Lo que quiero decir es que los matemáticos introducen conceptos que tienen fundamentos intuitivos. (Un ejemplo sencillo sería el concepto de ortogonalidad de los vectores, que tiene una definición puramente algebraica en términos de desaparición del producto punto, pero que tiene una interpretación geomática como que los dos vectores están a 90 grados el uno del otro. Un ejemplo más avanzado sería la introducción por parte de Galois de la teoría de grupos para proporcionar un análisis conceptual del problema de la resolución de polinomios, que acabó sustituyendo los enfoques anteriores, más basados en fórmulas). Con tales conceptos en la mano, entonces, en lugar de razonar mediante cálculos algebraicos, se puede intentar razonar en términos de (o, al menos, estructurar el argumento de acuerdo con) los significados de los diversos conceptos involucrados. Esto hace que los argumentos sean más fáciles de seguir y, por tanto, de comprobar. (Por supuesto, también se convierte en una fuente potencial de error, ya que ofrece la oportunidad de sustituir inadvertidamente la lógica por la intuición, que podría ser errónea; pero la experiencia ha demostrado (en mi opinión) que las ventajas de introducir el razonamiento conceptual superan las desventajas).

8voto

Jonik Puntos 7937

Mi método habitual para encontrar errores graves es encontrar contraejemplos. Hay dos formas principales de encontrar contraejemplos: una es buscar conclusiones extremadamente potentes que puedan extraerse, y la otra es probar el resultado contra un zoológico estándar de ejemplos.

La primera me parece similar a análisis asintótico de un algoritmo. Si el tiempo de ejecución asintótico del algoritmo es más corto que el necesario para un algoritmo perfecto (por ejemplo, se ejecuta tan rápido que ni siquiera puede leer lo suficiente de la entrada para decidir correctamente la salida), entonces algo va mal. Siempre que veo un resultado computacional, me pregunto cómo podría utilizarlo para mejorar otros algoritmos. Si el algoritmo combinado resultante es más rápido de lo posible, entonces hubo un error en alguna parte.

El segundo parece un poco como pruebas En este caso, se trata de enviar entradas pregrabadas y comparar las salidas calculadas con las salidas pregrabadas. En mis zoológicos de ejemplos, lo sé más o menos todo sobre los ejemplos, así que ya tengo la salida "correcta" para cualquier resultado posible, y entonces sólo compruebo lo que el nuevo resultado produce realmente como salida. Algunos programadores ocupados incluso empiezan escribiendo pruebas, y luego sólo escriben el código suficiente para pasar las pruebas. Algunos matemáticos ocupados comienzan con ejemplos, y sólo demuestran los teoremas suficientes para entender los ejemplos.

El principal inconveniente de los contraejemplos es que no siempre existen. En algunas pruebas por contradicción, uno ya ha asumido lo imposible, por lo que algún paso menor en el medio puede ser erróneo, pero no hay ningún contraejemplo real que tenga todas las propiedades pre-supuestas (ya que nada en absoluto tiene todas las propiedades pre-supuestas). En programación esto no siempre es un problema. Si el código funciona con todas las entradas y produce una salida correcta, normalmente se considera correcto, incluso si parte del código (posiblemente nunca llamado) es incorrecto cuando se toma de forma aislada. Sin embargo, en matemáticas, generalmente no se toleran los errores en una demostración, incluso si esa parte de la demostración resulta ser superflua. Esos errores son fáciles de arreglar, pero siguen poniendo en duda el conjunto.

8voto

Cotton Seed Puntos 318

Interpretación del gráfico en su caso

Nota: El eje "y" no siempre es el riesgo relativo, como en el ejemplo de la viñeta del dlnm paquete. Este es sólo el caso de su ejemplo, porque utilizaron datos de mortalidad y modelos de regresión de Poisson. En su marco, el coeficiente de regresión exponencial de los modelos de Poisson $RR=\exp(\hat{\beta})$ es el riesgo relativo. Esto es análogo a la exponenciación de los coeficientes de regresión en la regresión logística, que es el odds ratio.

¿Puedo seguir utilizando el modelo?

Sí, todavía se puede utilizar ese modelo.

Resumamos lo que hace:

  1. Se utilizan B-splines cúbicos naturales como funciones base en lugar de polinomios para modelar la relación entre temperatura y $\mathrm{CO}_{2}$ ( arglag con opción type="ns" en lugar de type="poly" )
  2. Se supone que el efecto de la temperatura es no lineal, ya que se especifica argvar como splines. Una cosa importante que hay que saber para la interpretación de los gráficos es que la función crossbasis centra automáticamente los valores en la media del predictor (es decir, la temperatura media) si no se especifica lo contrario. Este es el valor de referencia con el que se comparan posteriormente las predicciones en los gráficos.
  3. Se consideran los rezagos hasta 12 (opción lag=12 en crossbasis ). (Por cierto: ¿Por qué suprimen las advertencias?)
  4. Se calcula un MLG con errores gaussianos y la función de enlace de identidad, lo que equivale a una regresión lineal simple (OLS). Podría haber utilizado el lm en su lugar.

El gráfico que ha proporcionado se interpreta de la siguiente manera: El eje x es el desfase.

Interpretación de los valores del eje Y: El eje Y representa los cambios en $\mathrm{CO}_{2}$ asociada a un aumento de 10, 20 o 30°C con respecto a la temperatura media. Si el cambio previsto es 0, significa que un aumento de la temperatura no está asociado a un aumento de $\mathrm{CO}_{2}$ en comparación con $\mathrm{CO}_{2}$ a temperatura media: La predicción $\mathrm{CO}_{2}$ la concentración es la misma en $\bar{x}_{Temp}+z$ grados (donde $z$ es cualquier cantidad, digamos 10 o 20 grados) y a la temperatura media $\bar{x}_{Temp}$ .

Esto significa que para un aumento de la temperatura de 10°C, la temperatura en el lag 0 (en la misma hora) aumenta el $\mathrm{CO}_{2}$ concentración en comparación con la temperatura media. Porque usted especificó cumul=TRUE en crosspred Los efectos son acumulativos. Los efectos acumulativos de un aumento de 10°C son casi inexistentes después de 4 horas en comparación con la temperatura media. Esto sugiere que los efectos no acumulativos son negativos en los rezagos 1-4 y nulos a partir de entonces.

Para los aumentos de temperatura de 20 o 30°C, los efectos acumulados en el $\mathrm{CO}_{2}$ son menores en las primeras 1-4 horas en comparación con $\mathrm{CO}_{2}$ a la temperatura media. Al igual que con los aumentos de temperatura de 10°C, los efectos acumulados son prácticamente inexistentes después de 4 o 5 horas. De nuevo: $\mathrm{CO}_{2}$ Las concentraciones son las mismas a la temperatura media y a un aumento de la temperatura de 20 o 30°C después de 4 o 5 horas.

Creo que un gráfico de contorno sería más fácil de interpretar. Prueba el siguiente código:

plot(cp, xlab="Temperature", col="red", zlab="CO2", shade=0.6,
     main="3D graph of temperature effect")

Interpretación del ejemplo dado en la viñeta del dlnm packge

En primer lugar, algo sobre modelos de retardo distribuido . Tienen la forma:

$$ Y_{i}=\alpha + \sum_{l=0}^{K}\beta_{j}x_{t-l} + \text{other predictors} +\epsilon_{i} $$ donde $K$ es el desfase máximo y $x$ es un predictor. Esto se acaba de ajustar utilizando una regresión lineal múltiple. Así que el coeficiente $\beta_{1}$ estimaría el efecto de $x_{t-1}$ del día anterior en $Y_{t}$ . En esencia, se incluyen en el modelo múltiples rezagos de los predictores simultáneamente. Obviamente, esto tiene el problema de que los predictores rezagados están muy correlacionados (autocorrelación).

Un método más avanzado son modelos de retardo distribuido polinómico . Tiene la misma fórmula básica que la anterior, pero la función impulso-respuesta se ve obligada a situarse en un polinomio de grado $q$ ( enlace a un documento para Stata):

$$ \beta_{i} = a_{0} + a_{1}i + a_{2}i^2 +\ldots+a_{q}i^q $$ donde $q$ es el grado del polinomio y $i$ la longitud del retraso. Otra formulación es $$ \beta_{i} = a_{0} + \sum_{j=1}^{q}a_{j}f_{j}(i) $$

Dónde $f_{j}(i)$ es un polinomio de grado $j$ en la longitud del retardo $i$ . Una buena introducción a la dlnm y los modelos de retardo distribuido polinómico se pueden encontrar aquí .

Estos modelos se utilizan a menudo en los estudios sobre la contaminación atmosférica y la salud porque la contaminación atmosférica tiene efectos retardados en los resultados de salud.

Veamos este gráfico del viñeta del dlnm paquete (página 13):

DLNM poylag

El grado de los polinomios fue $q=4$ en este caso por lo que la línea verde es un polinomio de 4º grado. El eje Y es el riesgo relativo (RR) estimado a través de la regresión de Poisson y el eje x el desfase considerado. El riesgo relativo tiene la siguiente interpretación: Las personas que estuvieron expuestas tienen un $(RR-1)\cdot100\%$ mayor/menor probabilidad de obtener el resultado (por ejemplo, muerte, cáncer de pulmón, etc.) en comparación con las personas que no estuvieron expuestas. Si $RR>1$ esto significa una asociación positiva y si $RR<1$ significa una asociación de protección. A $RR=1$ significa que no hay asociación. Vemos que por cada aumento de $\textrm{PM}_{10}$ en 10 unidades ( $\mu \mathrm{g}/m^{3}$ ), hay un $(1.001-1)\cdot100\%=0.1\%$ aumento del riesgo de morir en el lag 0 (es decir, el mismo día de la exposición). Curiosamente, la exposición de hace unos 9 días es protector: un aumento del 10 $~\mu \mathrm{g}/m^{3}$ se asocia a un disminuido riesgo de morir en comparación con las personas con 10 unidades menos de exposición. También podemos ver que la exposición de 15 días antes no influye (es decir $RR\approx1$ ).

Veamos el riesgo relativo acumulado:

DLNM cumulative

Es lo mismo que antes, pero los efectos se acumulan a lo largo del tiempo (es decir, se suman todas las contribuciones de los rezagos hasta el rezago máximo). La línea roja comienza en el mismo punto que la línea verde del primer gráfico (es decir $\approx1.001$ ). Podemos ver que las personas que han estado expuestas durante cinco días tienen un riesgo acumulado mayor de aproximadamente $(1.005-1)\cdot100\%=0.5\%$ a morir en comparación con las personas no expuestas. Como la línea verde va por debajo del riesgo relativo de $1$ tras un desfase de unos 5 días, la asociación acumulada tras 15 días es casi $1$ . Esto significa que los efectos protectores de $\textrm{PM}_{10}$ a partir del retraso 5 han compensado los efectos nocivos de los retrasos anteriores. Que esto sea científicamente razonable es otra cuestión.

3voto

Tas Puntos 11

Un ejemplo:

Después de que Doron Zeilberger recibiera repetidas críticas por los errores cometidos en su larga demostración de la conjetura de la matriz de signos alternos, la reescribió en una estructura en forma de árbol e hizo que otras personas comprobaran cada nodo del árbol:

http://arxiv.org/abs/math/9407211

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