Foros del Web » Programando para Internet » ASP Clásico »

Como calcular la desviacion estandar en ASP?

Estas en el tema de Como calcular la desviacion estandar en ASP? en el foro de ASP Clásico en Foros del Web. Quiero sacar la desviacion estandar de datos que tengo en mi base de datos... Alguien sabe de alguna. funcion que la pueda calcular? o quiza ...
  #1 (permalink)  
Antiguo 09/11/2004, 11:59
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años, 11 meses
Puntos: 0
Como calcular la desviacion estandar en ASP?

Quiero sacar la desviacion estandar de datos que tengo
en mi base de datos...
Alguien sabe de alguna. funcion que la pueda calcular?
o quiza alguna funcion que alguien ya haya utilizado?
Agradecere muchisimo la ayuda u orientacion que me
puedan dar...
  #2 (permalink)  
Antiguo 09/11/2004, 12:53
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 21 años
Puntos: 4
bueno funciones estádisticas hasta donde sé no hay en ASP, jeje, olvide la formula ya. Hace años que vi eso en estadistica, porque no mejor nos explicas como se saca y vemos la forma de codificarlo no?
  #3 (permalink)  
Antiguo 09/11/2004, 13:34
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años, 11 meses
Puntos: 0
Exclamación

ok, creo que no siempre lo tendria directamente de una base de datos.
Asi que seria mejor:
"calcular la desviacion estandar de un arreglo de datos en ASP"

Encontre esto, es una funcion hecha por alguien en VB 5/6

Código:
'Function takes an array with numeric elements as a parameter
'and calcuates the standard deviation

Public Function StandardDeviation(NumericArray As Variant) _ 
As Double

Dim dblSum As Double, dblSumSqdDevs As Double, dblMean As Double
Dim lngCount As Long, dblAnswer As Double
Dim vElement As Variant
Dim lngStartPoint As Long, lngEndPoint As Long, lngCtr As Long

On Error GoTo errorhandler
'if NumericArray is not an array, this statement will
'raise an error in the errorhandler

lngCount = UBound(NumericArray)

On Error Resume Next
lngCount = 0

'the check below will allow
'for 0 or 1 based arrays.

vElement = NumericArray(0)

lngStartPoint = IIf(Err.Number = 0, 0, 1)
lngEndPoint = UBound(NumericArray)

'get sum and sample size
For lngCtr = lngStartPoint To lngEndPoint
  vElement = NumericArray(lngCtr)
    If IsNumeric(vElement) Then
      lngCount = lngCount + 1
      dblSum = dblSum + CDbl(vElement)
    End If
Next

'get mean
If lngCount > 1 Then
    dblMean = dblSum / lngCount

    'get sum of squared deviations
    For lngCtr = lngStartPoint To lngEndPoint
        vElement = NumericArray(lngCtr)

        If IsNumeric(vElement) Then
            dblSumSqdDevs = dblSumSqdDevs + _
            ((vElement - dblMean) ^ 2)
        End If
    Next

'divide result by sample size - 1 and get square root. 
'this function calculates standard deviation of a sample.  
'If your  set of values represents the population, use sample
'size not sample size - 1

    If lngCount > 1 Then
        lngCount = lngCount - 1 'eliminate for population values
        dblAnswer = Sqr(dblSumSqdDevs / lngCount)
    End If
    
End If

StandardDeviation = dblAnswer

Exit Function

errorhandler:
Err.Raise Err.Number
Exit Function
End Function
Necesito hacer alguna modificacion para q funcione con mi page?
o solo es copy-paste?
Estoy investigando la formula, en cuanto la enuentre la pongo.
  #4 (permalink)  
Antiguo 09/11/2004, 16:16
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años, 11 meses
Puntos: 0
Cuando agrego esta funcion a mi page ASP, me marca un error
de "expect ')'" en la cabecera de la funcion...
  #5 (permalink)  
Antiguo 09/11/2004, 16:34
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 21 años
Puntos: 4
DE SEGURO LA ESTÁS PONIENDO TAL CUAL ?


Public Function StandardDeviation(NumericArray As Variant) _
As Double
  #6 (permalink)  
Antiguo 09/11/2004, 17:02
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años, 11 meses
Puntos: 0
Cita:
Iniciado por orharo2003
DE SEGURO LA ESTÁS PONIENDO TAL CUAL ?


Public Function StandardDeviation(NumericArray As Variant) _
As Double
Asi es, no hay duda
  #7 (permalink)  
Antiguo 09/11/2004, 17:07
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 21 años
Puntos: 4
he ahi el error :

1.- Recuerda que con asp tradicional las funciones bueno más bien las declaraciones de tipo de datos las hace por tí.

osea:

Public Function StandardDeviation(NumericArray As Variant) _
As Double

x:

Public Function StandardDeviation(NumericArray )

tambien....

Dim dblSum, dblSumSqdDevs, dblMean
Dim lngCount, dblAnswer
Dim vElement
Dim lngStartPoint , lngEndPoint , lngCtr

y por falta de tiempo ..... una ultima observación.......

No exixte el goto ni el IIf en VBS.
  #8 (permalink)  
Antiguo 09/11/2004, 22:07
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 22 años, 6 meses
Puntos: 0
A mi tambien se me olvido la formula... pero a ver si me ayudan??? la desviacion Estandar no es la raiz cuadrada de la varianza????
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #9 (permalink)  
Antiguo 09/11/2004, 22:19
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 22 años, 6 meses
Puntos: 0
http://vppx134.vp.ehu.es/fisica/agus...es/node13.html
http://www.monografias.com/trabajos11/tebas/tebas.shtml

este esta mas claro...
http://148.216.10.83/estadistica/varianza.htm

y bueno no estab errado,

primero hay que sacar la media (X), que no es otra cosa que la sumatoria de los Xi partido por N

para luego sacar la varianza que es = (Xi - X)2 / N

y la desviacion estandar es la raiz cuadrada de la varianza.

bueno esto es facil, lo largo o la lata es programarlo...

Slds.
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #10 (permalink)  
Antiguo 10/11/2004, 03:21
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 22 años, 6 meses
Puntos: 0
mira esto lo encontre en un manual de SQL, puede que te sirva:
StDev, StDevP
Devuelve estimaciones de la desviación estándar para la población (el total de los registros de la tabla) o una muestra de la población representada (muestra aleatoria). Su sintaxis es:

StDev(expr)
StDevP(expr)
En donde expr representa el nombre del campo que contiene los datos que desean evaluarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL).

StDevP evalúa una población, y StDev evalúa una muestra de la población. Si la consulta contiene menos de dos registros (o ningún registro para StDevP), estas funciones devuelven un valor Null (el cual indica que la desviación estándar no puede calcularse).


SELECT
StDev(Gastos) AS Desviación
FROM
Pedidos
WHERE
País = 'España'


SELECT
StDevP(Gastos) AS Desviación
FROM
Pedidos
WHERE
País = 'España'

Sum
Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sintaxis es:

Sum(expr)
En donde expr representa el nombre del campo que contiene los datos que desean sumarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL).


SELECT
Sum(PrecioUnidad * Cantidad) AS Total
FROM
DetallePedido

Var, VarP
Devuelve una estimación de la varianza de una población (sobre el total de los registros) o una muestra de la población (muestra aleatoria de registros) sobre los valores de un campo. Su sintaxis es:

Var(expr)
VarP(expr)
VarP evalúa una población, y Var evalúa una muestra de la población. Expr el nombre del campo que contiene los datos que desean evaluarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL)

Si la consulta contiene menos de dos registros, Var y VarP devuelven Null (esto indica que la varianza no puede calcularse). Puede utilizar Var y VarP en una expresión de consulta o en una Instrucción SQL.


SELECT
Var(Gastos) AS Varianza
FROM
Pedidos
WHERE
País = 'España'


SELECT
VarP(Gastos) AS Varianza
FROM
Pedidos
WHERE
País = 'España'
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #11 (permalink)  
Antiguo 10/11/2004, 10:08
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años, 11 meses
Puntos: 0
OK, ahorita estoy modificando la funcion anterior para ver si funciona...
bueno, me devuelve un valor, pero lo estoy comparando con una
problema real para ver si el resultado es correcto.

Gracias por las funciones pero los datos los tengo dinamicamente en un
arreglo.

En cuanto termine de modificarlo lo pongo aqui para ver si se me escapa
algo. Gracias por tu ayuda!!
  #12 (permalink)  
Antiguo 11/11/2004, 16:32
 
Fecha de Ingreso: junio-2004
Mensajes: 70
Antigüedad: 20 años, 11 meses
Puntos: 0
Listo, este es el code

Código:
Public Function StandardDeviation(NumericArray,tam)

Dim dblSum
Dim dblSumSqdDevs
Dim dblMean
Dim lngCount
Dim dblAnswer
Dim vElementlngStartPoint
Dim lngEndPoint
Dim lngCtr

vElement = NumericArray(0)

lngStartPoint = 1
lngEndPoint = tam'UBound(NumericArray)

'get sum and sample size
For lngCtr = lngStartPoint To lngEndPoint
  vElement = NumericArray(lngCtr)
    If IsNumeric(vElement) Then
      lngCount = lngCount + 1
      dblSum = dblSum + CDbl(vElement)
    End If
Next

If lngCount > 1 Then
    dblMean = dblSum / lngCount

    For lngCtr = lngStartPoint To lngEndPoint
        vElement = NumericArray(lngCtr)

        If IsNumeric(vElement) Then
            dblSumSqdDevs = dblSumSqdDevs + ((vElement - dblMean) ^ 2)
        End If
    Next

    If lngCount > 1 Then
       lngCount = lngCount - 1 'Eliminarlo para poblaciones
        dblAnswer = Sqr(dblSumSqdDevs / lngCount)		
    End If
    
End If

StandardDeviation = formatnumber(dblAnswer,2)

End Function
Gracias a todos por su ayuda!!!
  #13 (permalink)  
Antiguo 12/11/2004, 03:34
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 5 meses
Puntos: 4
Al final lo habéis conseguido, enhorabuena.

Una preguntita: a la función se le pasa el vector de datos y la dimensión de ese vector (array), es decir, el número de datos.

Si ponemos esto en lugar de dejarlo como comentario nos ahorramos un parámetro que pasar ¿no?

lngEndPoint = UBound(NumericArray)

Además, esto simplifica las cosas si vamos a utilizar conjuntos de datos de distintas dimensiones. Por otro lado, ¿como se definen los datos que contiene el vector? Si se hace uno por uno habría que utilizar un bucle con Redim Preserve para ir aumentando la dimensión, pero, ¿como se definen todos en una sola línea de código?

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 11:30.