martes, 22 de octubre de 2024

Funciones. Estadística.

Función para el cálculo de la desviación típica (Dt)

Sabemos que la desviación típica o desviación estándar (Dt en adelante) es un estadístico de dispersión que se basa en la varianza (ver [en esta entrada], en concreto es su raíz cuadrada. Y como no contamos con una función Built-In OOo Basic, deberemos crear una función para su cálculo.


Siendo la Dt un estadístico (s) derivado de la varianza (s2), podemos formular su cálculo como sigue...


... entendiendo que nos estamos refiriendo a la Dt de la muestra, dado que partimos del cálculo de la varianza de ésta y no de la población (1). Lo que tenemos en esta fórmula, es la formulación del cálculo de la varianza sobre la que aplicamos una raíz cuadrada.

En términos de formulación del algoritmo de la función optaremos por partir de la [función del cálculo de la varianza] de modo que sólo nos restará calcular la raíz cuadrada del resultado que nos devuelve dicha función (2).

Pero nos encontramos con un problema: en OOo Basic no contamos con un operador para el cálculo de la raíz cuadrada, por lo que deberemos buscar una alternativa. Esta alternativa consiste en aplicar la equivalencia entre las expresiones de la potencia y de la raíz, partiendo de las propiedades de los exponentes, uno de cuyos casos son los exponentes fraccionarios:

Dado que los exponentes fraccionarios son equivalentes a las raíces, éstas se pueden expresar y calcular como potencias de exponentes fraccionarios, lo que para nuestro caso (raíz cuadrada) permite la siguiente igualdad...


... y aplicado al valor de la varianza se puede expresar como...


... con lo que en nuestro algoritmo podemos usar la segunda expresión de la igualdad para realizar nuestro cálculo, dado que, como dijimos antes, en OOo Basic no disponemos del operador raíz cuadrada.

La función OOo Basic para calcular la Dt (s), queda como sigue:

Function fDesTip(ByRef mDatos() As Object) As Double

Dim vSum As Long
Dim vCuad As Double, vSumCuad As Double, vDesTip As Double
dim vN As Integer, i As Integer
Dim vMed As Double, vVarianza As Double

'Calculo del promedio

vSum = 0
vN = 0

For i = 0 To UBound(mDatos())
vSum = vSum + mDatos(i)
vN = i
Next

vN = vN + 1
vMed = vSum/vN

'Cálculo de la varianza

vCuad = 0
vSumCuad = 0

For i = 0 To UBound(mDatos())
vCuad = ((mDatos(i)-vMed)^2)
vSumCuad = vSumCuad + vCuad
Next

vVarianza = vSumCuad/(vN-1)

'Cálculo de la DT

vDesTip = vVarianza^(1/2) 

fDesTip = vDesTip

End Function

Una vez aclarada la forma de resolver el cálculo de la Dt, la función no presenta mayor dificultad: partimos de la función de la varianza, que a su vez implica el cálculo del promedio, y añadimos el cálculo de la Dt (vDesTip = vVarianza^(1/2)) según lo explicado anteriormente respecto a la equivalencia entre raíz cuadrada y potencia con exponente fraccionario (3). 

NOTA

(1) En cuyo caso, como sabemos, en lugar de n-1 deberíamos usar como divisor el valor N. Obsérvese que ahora s no aparece elevado al cuadrado, ya que usamos precisamente la raíz cuadrada para eliminar el efecto del cuadrado que se aplica a la diferencia de los valores respecto al promedio de los datos de la muestra.
(2) Al igual que en esa función, también aquí podríamos plantearnos usar fVarianza como función auxiliar, reduciendo en mucho el código de la función de cálculo de Dt. No obstante, y por las mismas razones que en esa ocasión, desarrollaremos una función que resuelva el procedimiento al completo.
(3) Lógicamente deberemos añadir una variable Double (vDesTip As Double) para asignar el resultado de dicho cálculo, además de modificar la expresión del Return (ahora fDesTip = vDesTip).

No hay comentarios:

Publicar un comentario

Comenta esta entrada