En primer lugar, no soy un matemático, y nunca tomé estadísticas en la universidad, lo que sé sobre la desviación estándar lo he aprendido en las últimas semanas, así que sea amable...
Estoy trabajando en un software que calcula la desviación estándar de la concentración de oxígeno en una muestra de agua a lo largo del tiempo. Estoy usando un array numérico rodante de 600 dobles tomados a intervalos de 1 segundo (10 minutos de datos). Por matriz rodante quiero decir que a lo largo del tiempo, a medida que la matriz se llena, incremento un contador hasta que llega al límite de la matriz (600 elementos), y entonces pongo el contador a cero para empezar a sobrescribir los elementos anteriores de la matriz. De esta manera, a medida que el porcentaje de oxígeno se asienta, la desviación estándar disminuye con el tiempo. Cuando el llega al nivel requerido, el sensor de oxígeno toma una lectura sobre la concentración de oxígeno y luego pasa al siguiente punto de gas.
Mi pregunta es: ¿Estoy tomando demasiados puntos? Puede tomar un muy mucho tiempo para que baje al nivel solicitado para el experimento antes de tomar una lectura de calibración en ese punto de gas. Como tarda tanto, en realidad estoy permitiendo que el software se mueva al siguiente punto cuando el es un orden de magnitud mayor que el solicitado ( = 0,02 vs = 0,002).
Si reduzco el número de elementos de la matriz, creo que el cálculo sería mucho más rápido porque simplemente hay menos elementos que calcular y el conjunto de datos resultante es más pequeño para manipular. Al software no le importa el tamaño del array, sólo calcula el tamaño del array que se le pase. ¿Reducir el número de elementos de la matriz reduciría significativamente la precisión del cálculo? ¿Cambiando básicamente la precisión por la velocidad?
El software que utilizo para calcular la desviación estándar lo puedes encontrar aquí: http://www.devx.com/vb2themax/Tip/19007 . Se ha modificado ligeramente a partir de este ejemplo, pero no mucho:
Function ArrayStdDev(arr As Variant, Optional SampleStdDev As Boolean = True, _
Optional IgnoreEmpty As Boolean = True) As Double
Dim sum As Double
Dim sumSquare As Double
Dim value As Double
Dim count As Long
Dim Index As Long
' evaluate sum of values
' if arr isn't an array, the following statement raises an error
For Index = LBound(arr) To UBound(arr)
value = arr(Index)
' skip over non-numeric values
If value <> 0 Then
' add to the running total
count = count + 1
sum = sum + value
sumSquare = sumSquare + value * value
End If
Next
' evaluate the result
' use (Count-1) if evaluating the standard deviation of a sample
If count < 2 Then
ArrayStdDev = -9.99999
ElseIf SampleStdDev Then
ArrayStdDev = Sqr((sumSquare - (sum * sum / count)) / (count - 1))
Else
ArrayStdDev = Sqr((sumSquare - (sum * sum / count)) / count)
End If
End Function
Espero haber formulado una pregunta que tenga respuesta y agradezco cualquier idea que se ofrezca.