Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ipynb - Colaboratory
Problema 2
Resumen
1. Enunciado del problema
2. Comentarios generales y criterio de corrección
3. Resolución "mínima" del problema
4. Extras de cosas que no hicimos énfasis o directamente no dimos en clase
Enunciado
(Continuando la historia del parcial del cuatrimestre anterior)
Sol, que estaba haciendo el asado y no quería apurarlo, quería saber si la tormenta se estaba
acercando y, en dicho caso, si tenía al menos 25 min para terminarlo antes de que se largara a
llover. Entonces, les amigues decidieron volver a medir a los 5 min, para determinar la distancia
que había recorrido la tormenta, y, a partir de ésta, estimar el tiempo que tardaría en llegar.
El primero en reportar su medición fue Agustín, que estaba hambriento y midió 3,14 s. Débora,
que era muy precisa midiendo, obtuvo un valor de 4,53 s. Jessica, que ya iba por su segunda
copa de vino, midió 5,87 s. El resto de les asistentes midieron: 4,61 s; 4,63 s; 4,62 s; 4,37 s; 4,58
s; 4,74 s; 4,61 s y 4,02 s.
a) ¿Qué valor reportarían para el tiempo entre el relámpago y el trueno? ¿Son todas las
mediciones confiables? Justifique.
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 1/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
3. Si usaban el error del promedio para el intervalo de confianza de los tiempos medidos: 24
/ 33 = 75% usaron el error del promedio.
De estas 5 categorias, la 4 fue la única decisiva para aprobar. Reportar un intervalo es clave
para poder decir si la tormenta llega antes de los 25 minutos: no es lo mismo (37 ± 1)
minutos que (37 ± 20) minutos, ¿no? Este es un tema que se mencionó a lo largo de todo el
curso, desde la primer clase.
El resto de las categorias influyó poco en la nota. En particular, excluir datos no fue algo en lo
que hayamos hecho mucho énfasis, y menos como evaluar numéricamente si son poco
confiables. Incluso evalué como positivas respuestas equivocadas, pero que de todas maneras
trataron de evualuar la confiabilidad a partir de alguna métrica.
De todas maneras, no duden en consultarme si quieren saber algo con más detalle de sus
parciales. :)
Resolución
Importo librerias de Python que voy a utilizar:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats
from scipy.optimize import curve_fit
v_sonido, dv_sonido = 343, 3 # Velocidad del sonido [m/s]
x1, dx1 = 1760, 25 # Primer distancia medida [m]
# Los primeros 3 tiempos corresponden a los de Jessica, Agustín, y Débora.
tiempos = np.array([5.87, 3.14, 4.53, 4.61, 4.63, 4.62, 4.37, 4.58, 4.74, 4.61, 4
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 2/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
tiempo_entre_mediciones = 5 # [min]
Punto a)
Lo primero que hacemos es mirar las mediciones. Un gráfico siempre da una intuición mejor de
los datos que ver una lista de números:
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
ax[0].set(xlabel="Número de medición", ylabel="Tiempo [s]")
ax[0].plot(tiempos, "o")
ax[1].set(xlabel="Tiempo [s]", ylabel="Cantidad de mediciones")
ax[1].hist(tiempos);
Los primeros dos datos se alejan bastante del resto. Tiene sentido pensar que podrían no
reflejar bien la magnitud a medir:
1. El primer dato corresponde a Jessica, que había estado tomando y tardó más en accionar
el cronómetro.
2. El segundo dato corresponde a Agustín, que estaba hambriento. Ya sea que haya sido sin
querer, o a propósito para que apuren el asado, midió un valor mucho menor que el resto.
No hicimos mucho énfasis en este tema durante la materia, así que si no los excluyen, no se
consideró mal.
¿Cómo podemos justificar excluir estos valores? Hasta donde aprendimos en la materia,
alcanzaría con mostrar este gráfico y tener una causa razonable para sospechar de esos datos.
En la sección Extras, lo discuto en más profundidad, mencionando cosas interesantes que
probaron sus compañeres y, en particular, porque es importante tener una razón externa a los
datos.
tiempos_buenos = tiempos[2:] # así excluyo los 2 primeros
tiempos_buenos
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 3/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
promedio = tiempos_buenos.mean()
desv_est = tiempos_buenos.std()
promedio, desv_est
(4.5233333333333325, 0.20077627128500813)
La variación de los datos se debe únicamente al tiempo de respuesta de las personas (para ver
el relámpago, escuchar el trueno, y accionar el cronómetro), ya que todos midieron el mismo
fenómeno (hubo un único relámpago-trueno). Entonces, el promedio (que mide el centro de los
datos) y la desviación estándar (que mide la variacion en los datos) nos dan un rango en el que
esperamos que hubiesen caido otras mediciones (si hubiese habido más). Si asumimos que los
datos son gaussianos, aproximadamente el 68% de las mediciones deberian caer en ese
intervalo: (4.52 ± 0.20) s.
Ahora, el mejor valor que podemos reportar para el tiempo t2 entre el relámpago y el trueno es
el promedio con el error del promedio:
N = tiempos_buenos.size
t2 = promedio
dt2 = desv_est / np.sqrt(N)
t2, dt2
(4.5233333333333325, 0.06692542376166938)
t2 = (4.523 ± 0.067) s
Aclaración: este es el mejor valor para el tiempo entre ese relámpago y trueno. Pero no nos
asegura que no haya otras fuentes de incerteza que no estemos considerando cuando
querramos usarlo para evaluar cuando llega la tormenta.
Por ejemplo, la tormenta puede ser extensa, de varios kilómetros. Si hubiesemos tenido mala
suerte y los dos relámpago-truenos que cronometramos hubieran correspondido a rayos que
cayeron "en la parte alejada de la tormenta", la tormenta en realidad hubiera estado mucho más
cerca de lo que estimamos y hubiese llegado mucho antes, arruinandole el asado a Sol.
Lo que es importante destacar es que esta información NO esta en nuestros datos. Tendríamos
que medir más rayos para poder evaluar una dispersión debido a esto.
Punto b)
Para saber la velocidad (media) v de la tormenta, necesitamos saber dos posiciones (x1 y x2 )
y el tiempo Δt que transcurrió entre ellas:
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 4/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
x2 − x1
v =
Δt
Podemos determinar la posición x2 como el tiempo t2 que tardó el sonido del trueno en llegar
por la velocidad del sonido vsonido :
x2 = vsonido t2
x2 = v_sonido * t2
dx2 = np.sqrt( (v_sonido * dt2)**2 + (t2 * dv_sonido)**2 )
x2, dx2
(1551.503333333333, 26.666387521687128)
x2 = (1552 ± 27) m
Para poder calcular el error en la velocidad, nos haría falta saber el error en Δt = 5 min , que
no conocemos. ¿Les amigues cronometraron el tiempo que pasó entre las dos mediciones y
justo hubo un rayo a los 5 minutos y 0 segundos? ¿O se les olvidó y lo hicieron a ojo?
A mi se me olvidó considerar esto, pero a una compañera se le ocurrió ver que tan chiquito
tendría que ser el error en Δt para que sea despreciable.
Consideremos que es despeciable (σΔt = 0 ), y que justo hubo un rayo a los 5:00 minutos.
v = (x2 - x1) / tiempo_entre_mediciones
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 5/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
dv = np.sqrt( (dx2)**2 + (dx1)**2 ) / tiempo_entre_mediciones
for unidad, factor in {"m/min": 1, "m/s": 1/60, "km/h": 60/1000}.items():
print(f"v = ({factor * v:.3f} ± {factor * dv:.3f}) {unidad}")
Punto c)
Como bien preguntaron algunos en el parcial, vamos a asumir que la tormenta se mueve en una
dimensión: hacia o alejandose del asado. Si no, la tormenta podria estar acercándose, pero
"pasarnos por al lado". En ese caso, la velocidad que determinamos en el punto anterior sería la
velocidad radial de la tormenta (en un sistema centrado en el asado).
Además, para calcular cuando llegará la tormenta, vamos a asumir que se mueve en un
movimiento rectilineo uniforme.
x(t) = vt + x2
t_llegada = -x2 / v
dt_llegada = t_llegada * np.sqrt((dx2 / x2)**2 + (dv / v)**2)
t_llegada, dt_llegada
24.000000000000004
Por como quedó escrito el ejercicio, es confuso si los 25 minutos son después de la segunda
medición, o de la primera medición, y por lo tanto necesitan solo 20 minutos de changüí. Varios
preguntaron por este punto. Originalmente, lo pensé para el primer caso. Pero al ir
reescribiendo el enunciado, mutó y creo que se interpreta el segundo caso.
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 6/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
Independientemente de cual interpreten, la tormenta no llegaría antes de los 30.6 min, así que
habría tiempo de sobra.
Extras
Excluyendo mediciones
Las mediciones las excluimos porque:
¿Pero como calculamos el promedio y la desviación estándar? ¿Excluimos los datos o no?
tiempos.mean(), tiempos[2:].mean()
(4.52, 4.5233333333333325)
tiempos.std(), tiempos[2:].std()
(0.6097540487770459, 0.20077627128500813)
No podemos evaluar si son confiables calculando medidas que los incluyan, ya que si
resultaran no ser confiables, esas medidas deberian estar equivocadas.
Entonces, el proceso es excluirlos, calcular a partir del resto, y evaluar si no diferian tanto y se
los puede incluir.
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 7/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
for ax, t in zip(axes, (tiempos[2:], tiempos)):
ax.set(xlabel="Número de medición", ylabel="Tiempo [s]")
promedio = t.mean()
desv_est = t.std()
ax.errorbar(np.arange(tiempos.size), tiempos, yerr=desv_est, fmt="o")
ax.axhline(promedio, label=r"$\bar{t}$")
ax.axhline(promedio + desv_est, label=r"$\bar{t} \pm \sigma$", linestyle="--"
ax.axhline(promedio - desv_est, linestyle="--")
ax.legend();
axes[0].set(title="Excluyendo")
axes[1].set(title="Sin excluir")
Aunque en ambos casos, excluyendolos y sin excluirlos, quedan afuera del intervalo de error, la
conclusión puede ser distinta.
Por empezar, recordemos que (si es una gaussiana) el 68% de los datos estan en el intervalo
dado por μ ± σ. Entonces es razonable que haya algunas mediciones por fuera de este
intervalo, como en el caso de la derecha. Pero en el caso de la izquierda, ya se encuentran muy
lejos.
Z-score
Sí, estan lejos. ¿Pero podemos dar un número?
promedio = tiempos[2:].mean()
desv_est = tiempos[2:].std()
(tiempos - promedio) / desv_est
-2.50693635])
stats.chi(df=1).sf(6.7)
2.084199479668314e-11
promedio = tiempos.mean()
desv_est = tiempos.std()
(tiempos - promedio) / desv_est
-0.82000276])
Hay una probabilidad baja, pero no despreciable de que esten a un poquito más de 2
desviaciones estandares:
stats.chi(df=1).sf(2.2)
0.02780689502699718
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 9/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
promedio = tiempos[2:-1].mean()
desv_est = tiempos[2:-1].std()
(tiempos - promedio) / desv_est
Excluyendo las dos primeras y la última, podemos ver que la última tiene un Z-score de 5.7, es
decir, está a más de 5 sigmas del promedio. Hay una probabilidad muy baja de que suceda
esto:
stats.chi(df=1).sf(5.7)
1.1980742842254699e-08
Y de hecho, este es el umbral que se usa en física de partículas: si están a más de 5 sigmas, no
se debe a un error aleatorio, sino que "hay algo ahí".
¿Deberíamos excluir también esta medición? ¿Por qué excluimos las otras dos y no esta? Acá
es donde no solo es importante poder "medir" que esten lejos, sino tener una causa que lo
justifique. Después de todo, 5 sigmas es un limite arbitrario. Podrían haber puesto 2 sigmas,
como es lo estándar en otras areas de la ciencia*, y terminar excluyendo todos los datos.
Toda esta discusión de que limite poner, me hace acordar a las discusiones que se estan dando
del p-value y a un video de Veritasium que les puede resultar interesante: Is Most Published
Research Wrong?.
*En diversas disciplinas se suelen usar intervalos de confianza de 95%. Por ejemplo, las
pruebas de las vacunas para el SARS-CoV-2 se reportaron con ese nivel de confianza. En el
caso de la Sputnik V, que tenía una eficacia del 91.6%, el intervalo de 95% de confianza era que
la eficacia estaba entre 85.6 y 95.2 (ver abstract del paper). Demasiados decimales tiene ese
91.6%, ¿no?
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 10/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
import ipywidgets
@ipywidgets.interact(error_tiempo_entre_mediciones=(0, 1, 0.01))
def error_velocidad(error_tiempo_entre_mediciones):
termino_1 = (dx1 / tiempo_entre_mediciones)**2
termino_2 = (dx2 / tiempo_entre_mediciones)**2
termino_3 = ((x2 - x1) / tiempo_entre_mediciones**2 * error_tiempo_entre_medi
dv = np.sqrt(termino_1 + termino_2 + termino_3)
for x in (termino_1, termino_2, termino_3, dv):
print(f"{x:.3f}")
error_tiemp… 0.20
25.000
28.444
2.782
7.498
¿Era despeciable? Todo depende de la precisión que quieran tener. También habría que ver
como impacta esto en la determinación del intervalo de tiempo de llegada, que en el fondo es lo
que nos interesa.
Extra: si les amigues hubiesen guardado los tiempos absolutos, en lugar del intervalo de tiempo
entre relámpago y trueno, podrían haberlo tenido en cuenta correctamente. Por ejemplo:
Relampago Trueno
1 20:53:43.72 20:53:48.11
2 20:58:52.10 20:56:56.51
Y de la diferencia entre los tiempos para el relampago, podian estimar mejor el intervalo entre
mediciones.
Pero las magnitudes que usamos para calcular el tiempo de llegada no eran independientes.
Había 3 opciones para calcular el tiempo de llegada, que dan el mismo valor medio, pero
distinto error (al ignorar las correlaciones):
Cualquiera de las 3 que hayan hecho está bien, ya que no es un tema que hayamos dado en la
materia.
De peor en mejor:
Δt Δt
tllegada = − = −
v sonido t1 t1
1 − 1 −
v sonido t2 t2
x1
Podemos calcular t1 =
v sonido
, pero tendriamos que "despropagar" para tener el error que tenia
t1 . Podemos asumir que el error es similar para t2 , pero si quieren poner el valor real, tomado
de esta resolución del parcial, es 5.131 ± 0.058
x1 / v_sonido, dt
(5.131195335276968, 0.06692542376166938)
El error de t2 nos dió un poco más grande, así que no me pueden decir que estoy haciendo
trampa :D
# Opción 1
t_llegada_1 = -x2 / v
dt_llegada_1 = t_llegada_1 * np.sqrt((dx2 / x2)**2 + (dv / v)**2)
print(f"t_llegada_1 = ({t_llegada_1:.1f} ± {dt_llegada_1:.1f}) min")
# Opción 2
t_llegada_2 = -tiempo_entre_mediciones / (1 - x1 / x2)
dt_llegada_2 = tiempo_entre_mediciones / (1 - x1 / x2)**2 * np.sqrt((dx1 / x2)**2
print(f"t_llegada_2 = ({t_llegada_2:.1f} ± {dt_llegada_2:.1f}) min")
# Opción 3
t1, dt1 = x1 / v_sonido, dt # No tenemos el error, pero podemos asumir que es pa
t2, dt2 = t, dt
t llegada 3 = -tiempo entre mediciones / (1 - t1 / t2)
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 12/13
24/6/2021 Labo 1B 2021 1c - Parcial - Problema 2.ipynb - Colaboratory
t_llegada_3 = -tiempo_entre_mediciones / (1 - t1 / t2)
dt_llegada_3 = tiempo_entre_mediciones / (1 - t1 / t2)**2 * np.sqrt((dt1 / t2)**2
print(f"t_llegada_3 = ({t_llegada_3:.1f} ± {dt_llegada_3:.1f}) min")
Como dije, el valor medio es el mismo en los 3 casos, pero el error es distinto. Esto se debe a
que los valores no son independientes, sino que están correlacionados.
En todos los casos, omití el error en Δt, que discutimos en la sección anterior.
https://colab.research.google.com/drive/19BqPJytAF3xteke5DT_Ws9wVRnxO4cqz#scrollTo=-JID7AT4L07D&printMode=true 13/13