Mostrando entradas con la etiqueta Chi. Mostrar todas las entradas
Mostrando entradas con la etiqueta Chi. Mostrar todas las entradas

miércoles, 13 de junio de 2012

Generación masiva de muestras estadísticas con macros

Ya vimos como podíamos generar muestras estadísticas para distribuciones (Ver Generación de muestras estadísticas para distribuciones) de forma rápida y simple, pero este método tiene una limitación. Si necesitamos crear una serie de números, pero sin repetición, vamos a tener que utilizar la función aleatorio como se describió en Generación de muestras estadísticas para distribuciones y luego quitar los valores repetidos (con "Quitar Duplicados" por ej.) e ir agregando nuevos números aleatorios, volver a chequear que no hayan repetidos hasta obtener el tamaño de la muestra deseada. Este procedimiento puede no ser muy relevante si no estamos preocupados por el numero de la muestra, pero si lo estamos, esto puede ser muy complicado. Para esto mostraremos una herramienta muy similar a la función aleatorio() o aleatorio.entre(), pero que se hace con macros.

Primero debemos posicionarnos en la viñeta Programador y luego hacemos click en Visual Basic.



Luego seleccionamos Insertar y Modulo


En la pantalla blanca que se abre, colocamos el código que nos interesa:


Sub Aleatoriosunicos()
Dim i As Integer, j As Integer
Dim A() As Long
Dim esta As Boolean
Dim x As Long, y As Long, z As Long, num As Long
x = Application.InputBox(prompt:="Introduzca el rango mínimo al cual quiere que pertenezcan los números aleatorios" _
        , Title:="Generador de Números Aleatorios", Default:=1, Type:=1)
y = Application.InputBox(prompt:="Introduzca el rango máximo" _
        , Title:="Generador de Números Aleatorios", Default:=1000, Type:=1)
z = Application.InputBox(prompt:="Introduzca la cantidad de números aleatorios que desea generar?" _
        & " (<15000)?" _
        , Title:="Generador de Números Aleatorios", Default:=100, Type:=1)
If z = 0 Then Exit Sub
If z > 15000 Then z = 15000
If z > y - x + 1 Then
    MsgBox "!Ha especificado más números " _
    & "de los que son posibles en el rango!"
    Exit Sub
End If
ReDim A(z)
Randomize
A(1) = Int((y - x + 1) * Rnd + x)
For i = 2 To z
    Do
        num = Int((y - x + 1) * Rnd + x)
        esta = False
        For j = 1 To i - 1
           If num = A(j) Then esta = True: Exit For
        Next j
    Loop While esta
    A(i) = num
Next i
For i = 1 To z
    Cells(i, 2) = A(i)
Next i
End Sub

Nos quedará algo así:






Para entender que hace el código, iremos analizando paso por paso, para poder ir cambiando las propiedades más interesantes. Si nos fijamos la macro comienza con Sub Aleatoriosunicos() , si queremos cambiar el nombre de la Macro en vez de Aleatoriosunicos escribiremos el nombre que deseamos.
Luego en esta parte del código


estamos creando InputBox que nos permiten introducir el numero mínimo y máximo que queremos que aparezca en nuestra muestra y el tamaño de ella. Podemos cambiar el dialogo que aparece en los cuadros reemplazando el texto que esta entre comillas después de prompt:=. Además podemos cambiar los números minimos, máximos y tamaño de la muestra que salgan por defecto, esto lo hacemos reemplazando los números después de Default:

Por otro lado podemos ver que 


si el numero que se coloca en el InputBox que corresponde al tamaño de la muestra (z) es igual a 0 la macro deja de correr, si es mayor a 15000, se reemplazará el número introducido por 15000, generando una muestra de este tamaño. Si el tamaño de la muestra introducido es mayor que el rango de los números especificados la macro devuelve un MsgBox que indica el error. Si queremos podemos cambiar este texto reeplazandolo después de MsgBox.

Finalmente el resto del código crea los valores aleatorios comprobando que no estén repetidos una y otra vez.


De esta forma cada vez que queramos crear una muestra, solo debemos hacer correr la macro. Esto lo hacemos en la viñeta Programador, Macros, seleccionando la macro y haciendo click en Ejecutar.


La macro hará que aparezcan los Input Box mencionados, 





al colocar la información que nos piden nos quedará algo así. Podemos observar que la muestra se creará a partir de la celda B1.


Luego estos valores, serán los llamados x en las funciones de distribución. Por ej. podemos calcularlo para la normal, Chi cuadrado y Poisson. Para más detalle ver (Generacion de muestras estadisticas para distribuciones y Generación de distribuciones estadísticas).







Fuentes 

http://excelavanzado.com/macros.htm
http://www.excelavanzado.es/2008/11/generacin-de-nmeros-aleatorios-nicos.html
http://www.computacionynegocios.info/2012/06/generacion-de-muestras-estadisticas.html
http://www.computacionynegocios.info/2012/06/generacion-de-distribuciones.html



Leer más...

domingo, 10 de junio de 2012

Generación de distribuciones estadísticas


Excel es una herramienta que tiene una gran cantidad de funciones que nos permiten hacer las cosas de forma más simple, en este articulo específicamente veremos cómo generar distribuciones estadísticas con funciones, especialmente las distribuciones normal, chi, poisson, binomial y exponencial:


NORMAL:

DISTR.NORM devuelve la distribución acumulativa normal para la media y la desviación estándar especificadas.


- X: es el valor cuya distribución se desea obtener.
- Media: es la media aritmética de la distribución.
- Desv_estándar: es la desviación estándar de la distribución, un numero positivo.
- Acum: es un valor lógico: para usar la función distribución acumulativa = VERDADERO; para usar la     función de probabilidad bruta =FALSO.



CHI:

DISTR.CHI: Devuelve la probabilidad de una variable aleatoria continua siguiendo una distribución chi cuadrado de una sola cola.


- X: es el valor al que desea evaluar la distribución, un número no negativo.
- Grados_de_libertad: es el número de grados de libertad, un número entre 1 y 10^10, excluyendo 10^10.


POISSON:

POISSON: Devuelve la distribución de Poisson.



- X: es el número de sucesos.
- Media: es el valor numérico esperado, un numero positivo.
- Acumulado: es un valor lógico: para usar la probabilidad acumulativa se Poisson = VERDADERO: para usar la función de probabilidad bruta de Poisson = FALSO.


BINOMIAL:

DISTR.BINOM: : Devuelve la probabilidad de una variable aleatoria discreta siguiendo una distribución binomial.


- Núm_éxito: es el número de éxito en los ensayos.
- Ensayos: es el número de ensayos independientes.
- Prob_éxito: es la probabilidad de éxito en cada ensayo.
- Acumulado: es un valor lógico: para usar la función de distribución acumulativa = VERADERO; para usar la función de probabilidad bruta = FALSO.


EXPONENCIAL:

DISTR.EXP: Devuelve la distribución exponencial.

- X: es el valor de la función, un número no negativo.
- Lambda: es el valor del parámetro, un número positivo.
- Acum: es un valor lógico que devuelve la función: función de distribución acumulativa = VERDADERO; función de densidad de probabilidad = FALSO





Leer más...

miércoles, 6 de junio de 2012

Generación de muestras estadísticas para distribuciones


Generación de muestras estadísticas para distribuciones


El uso de las estadísticas es cada día un elemento mucho mas diferenciador, debido a el aumento de la incertidumbre en los negocios, así como en la vida diaria.
Para ello es necesario conocer desde el punto de vista de la computación, como generar las muestras correspondientes, para poder generar ciertos estudios o proyecciones que se verán a continuación.
Sin embargo, muchas veces tenemos que generar muestras para poder realizar nuestros estudios, teniendo dos caminos, uno es el procesamiento de datos existentes desde otras bases de datos, y también generar valores aleatorios para poder aplicar distribuciones estadísticas como poisson, chi cuadrado, normal, binomial o exponencial.

En el punto de aleatoriedad, centraremos la publicación de hoy.

Para poder desarrollar variables aleatorias, existe una función llamada ALEATORIO, la cual esta expresada de la siguiente manera.

=Aleatorio() à esta función nos entrega valores aleatorios, que sin embargo, se mantienen entre 0 y 1, por lo que para lograr valores mayores, debemos multiplicar por algún valor entero mucho mayor, por ejemplo: 10.000.000.

La ventaja de esta función, es que nos arroja valores totalmente desconocidos y que nos pueden ser de gran utilidad.
Como ha sido mencionado anteriormente, el problema es que se debe multiplicar por valores enteros para poder obtener valores mayores a 1. Es por eso que también existe la función “aleatorio.entre”.

=Aleatorio.Entre(cota inferior, cota superior)

A diferencia del valor entregado por la función “aleatorio”, este nos entrega un valor dentro de un intervalo definido por nosotros, algo muy cómodo en caso de tener una muestra estratificada o segmentada según ciertos números.

Desventajas
Las desventajas existentes para nuestras funciones, es el hecho de que cada vez que actualizamos el Excel o generamos cambios en celdas, los valores pueden cambiar en su totalidad, algo muy engorroso y que nos puede traer complicaciones cuando ya hemos hecho un análisis con los datos.

Ahora bien, falta el ultimo detalle…¿Cómo conectamos esto con las distribuciones estadísticas antes mencionadas?
Dentro de las funciones (dejaremos fotos para mirar como se compone la función de Excel), existe la posibilidad de establecer valores por nosotros, como el valor “x” en una poisson o la probabilidad que requerimos en una distribución normal, para estos puntos es en donde nosotros podemos dejar la función aleatorio (en su preferencia), recordando las restricciones asociadas a las mismas (ej: las probabilidades se mueven entre 0 y 1, por lo que nos sirve un “aleatorio simple”)






Para finalizar, se establece que si bien es un elemento bastante simple de aplicar, es muy potente a la hora de realizar estudios estadísticos útiles tanto para actividades laborales como en la educación, lo que sin duda comprueba la potencialidad de la herramienta Excel

Fuente: click acá
Leer más...