Supongamos que tengo dos matrices, A1 y A2:

A1 = [1,2,2,2,3,3,7]
A2 = [0.5,1,1.5,2,7,2,6.9]

Supongamos que también tengo los datos de la barra de error para A1:

err_bars = [0.1,0.6,0.9,0.2,0.01,0.8,0.1]

Quiero ver si hay una manera de determinar si los datos en A2 encajan con los de A1.

¿Hay alguna forma de calcular el valor de Chi-cuadrado, F-test y p considerando las barras de error en los datos?

Hasta ahora no pude encontrar ninguna función Chi-cuadrado en Python que considere las barras de error de los datos.

0
shadi 12 ene. 2017 a las 16:29
¿Puede u pls elaborar su pregunta ..?
 – 
solanki...
12 ene. 2017 a las 16:33
Tal vez actualice su pregunta con una solución al caso que no considere los errores.
 – 
periphreal
12 ene. 2017 a las 16:35
Esta pregunta está fuera de tema. Debe moverse a validación cruzada. Usted pregunta cómo calcular una estadística de bondad de ajuste o de mínimos cuadrados que considere los errores de las observaciones. No está haciendo una pregunta de programación específica.
 – 
lucianopaz
12 ene. 2017 a las 16:42
Lo que estoy preguntando es que chisquared también se puede calcular considerando las barras de error en los datos observados (aquí A1) que se dan como (A1 [i] -A2 [i]) ^ 2 / (err_bars [i]) ^ 2 . Pero todos los que pude encontrar en Python fueron los que no consideraron barras de error en los datos; como scipy.stats.chisquare.
 – 
shadi
12 ene. 2017 a las 18:45

2 respuestas

Prueba esto:

   # obs -- observed value
    # exp -- expected value

def chisqr(obs, exp, error):
    chisqr = 0
    for i in range(len(obs)):
        chisqr = chisqr + ((obs[i]-exp[i])**2)/(error[i]**2)
    return chisqr

A1 = [1,2,2,2,3,3,7]
A2 = [0.5,1,1.5,2,7,2,6.9]
err_bars = [0.1,0.6,0.9,0.2,0.01,0.8,0.1]
print chisqr(A1, A2, err_bars)
1
Anand 12 ene. 2017 a las 18:55
Pero incluso aquí no se consideran las err_bars.
 – 
shadi
12 ene. 2017 a las 18:48
Permítame actualizar el código según la fórmula que proporcionó.
 – 
Anand
12 ene. 2017 a las 18:50
Actualicé el código según la fórmula que proporcionaste. Echar un vistazo.
 – 
Anand
12 ene. 2017 a las 18:56
Entonces, ¿cómo puedo obtener el pvalue?
 – 
shadi
12 ene. 2017 a las 18:57
Puede utilizar este código como punto de partida y modificar la fórmula y la función para definir la función de valor p. No conozco la fórmula para calcular el valor p, ya que no soy estadístico Definitivamente le recomendaría leer la documentación de Python, particularmente cómo definir una función. ¡buena suerte!
 – 
Anand
12 ene. 2017 a las 19:00

Si trabaja con datos numéricos, es probable que deba utilizar el paquete numpy para realizar la mayoría de sus cálculos. Para algo más que un pequeño cálculo, es significativamente más rápido y casi siempre más fácil de leer (un buen resumen de por qué es aquí). Cambiar a numpy te permite escribir esto como

A1 = np.array([1, 2, 2, 2, 3, 3, 7])
A2 = np.array([0.5, 1, 1.5, 2, 7, 2, 6.9])
err_bars = np.array([0.1, 0.6, 0.9, 0.2, 0.01, 0.8, 0.1])

def chisq(obs, exp, error):
    return np.sum((obs - exp) ** 2 / (error ** 2))

print(chisq(A1, A2, err_bars))
0
user144153 29 jul. 2019 a las 15:47