Revistas en papel
 Commodore Amiga World Nº3 - Octubre 1989
Anterior
Menú
Logotipo

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España
para ofrecer los artículos de la revista Amiga World España.

ESTADíSTICA PARA AMIGA Amiga World

¿Quién no ha
visto muchas
veces en
televisión
imágenes
realizadas por
ordenador, en
las que se
muestran
resultados y
representaciones
gráficas
relacionadas con
la estadística?

Por José Dos Santos

Pues bien, ahora todos los lectores tendrán la posibilidad de realizar sus propios cálculos estadísticos, con varios tipos de representaciones gráficas, gracias al programa que ahora os presento y que se llama Amiga Estadística.

Antes de comenzar de lleno en la explicación del funcionamiento del programa y cómo funciona, voy a haceros una breve explicación sobre la ciencia estadística para todas aquellas personas que desconozcan el tema y también para ese grupo de personas que tengan una ligera idea de lo que es la estadística, pero necesitan que le refresquen la memoria.


La estadística como ciencia

Lo primero que hay que saber es que la estadística es una ciencia que trata, estudia y analiza los resultados sobre conjuntos de datos. Los sucesos que se estudian en un fenómeno reciben el nombre de datos. El conjunto de elementos o datos sobre lo que se realiza el estudio se llama población. Cuando ésta es muy grande, se escoge una parte de ella representativa que se denomina muestra. La estadística descriptiva tiene como objetivo principal el recoger datos, contarlos y clasificarlos, realizar cálculos y confeccionar tablas con ellos.

Para hacer una estadística hay que seguir los siguientes paso:

  1. Definición del fenómeno a estudiar. Hay que definirlo muy exactamente, con claridad y sin equivocaciones.

  2. Recogida de datos. Es una de las partes más importantes de la estadística descriptiva. Para poder conocer a fondo una población, es necesario recoger los datos y contarlos, procurando que no falte ninguno, ni que haya datos repetidos. Una vez recogidos y contados los datos, se procura clasificarlos, ordenándolos con arreglo a ciertos criterios.

  3. Tabulación. Una vez clasificados por grupos se presentan los resultados en tablas que permiten observarlos de una forma más rápida y segura. Una tabla ha de ser cualitativa, es decir, con sentido común. También ha de ser cuantitativa, pues los datos tienen que estar ordenados de menor a mayor, o siguiendo algún otro orden.

    Además de los datos, en la tabla debe haber una serie de cálculos matemáticos como son:

    La frecuencia absoluta, que es el número de veces que se repite un dato en una población.

    La frecuencia relativa, que es el cociente entre la frecuencia absoluta y el número total de los datos.

Las frecuencias relativas se pueden expresar en tantos por 1, que son tal como se obtienen tras realizar las operaciones antes mencionadas, o en tantos por ciento, que se obtienen multiplicando por 100 el tanto por 1.

    Las frecuencias acumuladas, que se obtienen cuando se suma a cada frecuencia las frecuencias anteriores. En las frecuencias absolutas acumuladas el último valor coincide con el número total de datos. En las frecuencias relativas acumuladas el último valor es la unidad.

  1. Cálculo de indicadores o medidas de control. Las variables estadísticas por medio de medidas que resuman en un solo valor, o medida central, el resultado de los datos obtenidos informan las consecuencias de la encuesta realizada o del fenómeno estudiado. Las principales medidas centrales son:

    • La moda, es el valor que más veces se repite.

    • La mediana, es el valor que ocupa la posición central.

    • La media aritmética, se calcula sumando todos los valores de la serie y dividiendo por el número total de datos de la serie N.

    • La media cuadrática, es la raíz cuadrada de la media aritmética de los cuadrados de los datos de la serie.

    • Recorrido o amplitud, es la diferencia entre el mayor y el menor de los datos.

    • Varianza, es la media aritmética de los cuadrados de las diferencias de cada valor.

    • Desviación estándar, es la raíz cuadrada de la varianza.
  1. Representaciones gráficas. Son formas de expresar los fenómenos estadísticos estableciendo una correspondencia entre los números reales y los puntos del plano. Las representaciones gráficas que emplea el programa son:

    • Diagrama de barras. Se emplea para representar en un sistema de coordenadas cartesianas los valores de una variable estadística en el eje de abscisas (eje vertical). Sobre cada uno de dichos valores se trazan segmentos o rectángulos, cuya longitud o altura sea proporcional a la frecuencia absoluta o relativa de cada valor.

    • Diagrama de sectores. En éstos se divide un círculo en partes proporcionales a las frecuencias relativas de cada suceso de la variable estadística. Sirven para poner de manifiesto la relación que hay entre los diversos sucesos.


Utilización del programa

lLa estadística

es una ciencia

que trata,

estudia y

analiza los

resultados

sobre

conjuntos de

datos.

Tras este repaso vamos a explicar la utilización del programa. En primer lugar, teclea y corrige el listado utilizando el corrector "Checksum 2.1" que se encuentra en las páginas finales de la revista. Después, arráncalo desde el Amiga Basic. En la pantalla aparecerá un menú con 5 opciones. Estas son las siguientes:

  • Introducción de datos
  • Diagrama de barras
  • Polígono de frecuencias
  • Diagrama de sectores
  • Salir del programa

Con las teclas de los cursores (la flecha hacia arriba y la flecha hacia abajo) se mueve una barra blanca que se debe colocar sobre la opción deseada. Para elegirla sólo es necesario pulsar la tecla RETURN. La primera opción permite introducir hasta un máximo de 500 datos. Estos serán ordenados y contabilizados, y después aparecerá en la pantalla la tabla de valores y a continuación las variables estadísticas antes mencionadas.

Lo primero que pide el programa es el nombre de la población. Para introducir un dato basta con teclearlo y pulsar RETURN. Si se ha cometido un error, para corregirlo hay que teclear la palabra "error", y el último dato introducido será ignorado por el programa. Una vez acabado el proceso hay que teclear la palabra "fin" para indicar al ordenador que se ha terminado, para después acceder a las tablas.

Siempre que introduzcamos un dato, el ordenador nos informará del número de orden que le corresponde. Si se introduce el valor 0, el ordenador lo ignorará. Las opciones siguientes crearán las representaciones gráficas antes mencionadas. La única condición que hay para poder ver la representación gráfica elegida es que existan datos. De lo contrario el ordenador indicará que no existen datos y volverá al menú principal. La opción Salir, como su propio nombre indica, permite la salida del programa al Workbench. Después de realizar alguna tarea, el programa se quedará a la espera de que el usuario pulse una tecla para continuar.


Estructura del programa

El programa está diseñado de manera que con un reducido número de subrutinas pueda funcionar perfectamente.

La primera y quizá la más interesante de ellas es la rutina Ordena. Su objetivo es ordenar de mayor a menor los valores contenidos en una matriz. Para que funcione es necesario que la variable n contenga el número de datos a ordenar y que en la matriz dato(n) se encuentren todos los valores. El resultado se almacena en la matriz ord(n). Debido a que el programa necesita que estos datos estén ordenados de menor a mayor, lo que hace en el segundo bucle es colocarlos en este orden. Esta rutina es ideal para ordenar pequeñas cantidades de números, pero para grandes datos puede resultar una tarea muy lenta y pesada.

Esta rutina a su vez utiliza la rutina Recol. El tercer bucle que hay en la rutina se encarga de contar los datos que se repiten.

La rutina Gráfica se encarga de dibujar la plantilla sobre la que se van a imprimir las frecuencias.

Las frecuencias las imprime la rutina Relleno, que además también va a imprimir en la pantalla las variables estadísticas.

La rutina Barra se va a encargar de hacer la representación gráfica del diagrama de barras. A la hora de realizar esta rutina el mayor problema que representaba era la adaptación a la pantalla de las barras que representan a cada valor. Además, la altura tenía que ser proporcional a la frecuencia absoluta o relativa de cada valor, con lo que no se podían utilizar valores fijos. El problema se resolvió creando la variable Alt, que por una regla de tres proporciona el valor máximo que siempre correspondería a la parte superior de la gráfica. El primer problema se resolvió dividiendo 551 entre el número total de datos que hay, con lo que se obtiene el número total de pixels que puede tener de longitud la barra. La barra se crea con las instrucciones AREA y AREA FILL, y debido a que esta última instrucción colorea el área con la pauta del área establecida en la instrucción PATTERN se emplea la instrucción COLOR para que quede más vistoso.

La rutina histograma se encarga de dibujar el polígono de frecuencias. Esta rutina es prácticamente una copia de la rutina anterior, que se ha realizado empleando las instrucciones COPY y PASTE del editor del Basic. Esto es debido a que los valores que calcula la rutina anterior se pueden emplear para crear el polígono de frecuencias. Simplemente se cambiaron las instrucciones AREA por otras LINE para dibujar la línea poligonal en vez de los rectángulos.

La rutina Tarta se encarga de crear el diagrama de sectores. Como el círculo abarca 360 grados, mediante una regla de tres se puede deducir la amplitud (sector circular) que corresponde a cada suceso de acuerdo con su frecuencia relativa, que suele expresarse en tanto por ciento. La fórmula para dibujar un radio en una circunferencia, que tenga N grados es:

    Y=COS (N*Pi/360)*(radio/2)
    X-SEN (N*Pi/360)*radio
    LINE (y inicial,x inicial)-(Y-X),color

Donde "Pi" es 3.1415927..., "Radio" es el radio de la circunferencia e "y inicial,x inicial) son las coordenadas del centro de la circunferencia. El programa está preparado para colorear los diferentes sectores que haya en la circunferencia, pero debido a que no lo hace de una manera muy afortunada, se ha anulado mediante una instrucción REM.

El programa

está diseñado

con un

reducido

número de

subrutinas

Las personas que sientan curiosidad por ver cómo quedarían los gráficos en color, aunque de una manera no muy satisfactoria, pueden anular el REM. El resto de la línea queda tal como aparece en el listado.


Ejemplo práctico

Despues de que hayas tecleado el programa correctamente, prueba a hacer una estadística sobre las notas obtenidas por los chicos de una clase. Elige la opción de introducir gráficos y a la pregunta del nombre responde con la palabra EDADES. A continuación, introduce estos valores y cuando termines introduce la palabra FIN. Como datos, teclea:

   5,2,3,7,5,4,3,8,6,7,4,5,5,6,9,6

Una vez hecho esto observa los resultados en los diferentes diagramas seleccionando cada opción desde el menú principal.

Aunque el programa es un tanto limitado, y esta versión no permite grabar o leer datos de un fichero (aunque ésto puede adaptarse fácilmente) resulta muy sencillo para cualquiera con unos mínimos conocimientos de programación añadir sus propias rutinas y ampliaciones al programa.

asd:                                                                                                    .925
IF n=501 THEN RETURN                                                                                    .710
PRINT "DATO N�";n;:INPUT d$:IF d$="fin" THEN RETURN                                                     .296
IF d$="error" THEN n=n-1:l=l-1:GOTO asd                                                                 .189
dat (n)=VAL(d$):n=n+1:FOR p=0 TO n-2:IF dat(n-1)=dat(p) THEN asd                                        .875
NEXT p:dato (1)=dat(n-1):l=l+1:GOTO asd                                                                 .867
'ORDENACION DE LOS DATOS                                                                                . 16
ordena:                                                                                                 .247
x=0:f=0                                                                                                 .147
bucle:                                                                                                  .908
FOR j=f TO n:IF dato(f)<datos(j)THEN GOTO recol                                                         .221
NEXT j:f=f+1:IF f<n THEN bucle                                                                          .506
FOR f=1 TO 0 STEP -1:IF dato(f)<>0 THEN ord(x)=dato(f):x=x+1                                            .609
NEXT f:x=x-1                                                                                            .318
FOR f=0 TO n:z=dat(f):FOR fx=0 TO x:IF z=ord (fx) THEN can(fx)=can(fx)+1                                . 59
NEXT fx:NEXT f                                                                                          .925
RETURN                                                                                                  .357
recol:                                                                                                  .369
lx=dato(f):LET dato(f)=dato(j):dato(j)=lx:GOTO bucle                                                    .337
grafica:                                                                                                .670
CLS                                                                                                     .313
LINE (20,20)-(600,20),1:LINE (20,20)-(20,180),1                                                         .815
LINE (600,20)-(600,180),1                                                                               .469
LINE (20,65)-(600,65),1:LINE(76,20)-(76,180),1                                                          .709
LINE(204,20)-(204,180),1:LINE(204,32)-(600,32),1                                                        .169
LINE(140,48)-(140,180),1                                                                                .127
LINE(402,32)-(402,180),1:LINE(303,48)-(303,180),1                                                       .633
LINE(501,48)-(501,180),1                                                                                .318
COLOR 2,0:LOCATE 5,12:PRINT "F.ABSOLUTAS"                                                               . 33
LOCATE 4,34:PRINT"FRECUENCIAS RELATIVAS"                                                                .689
LOCATE 8,12:PRINT "ORD.":LOCATE 8,20                                                                    .258
PRINT "ACUM.":LOCATE 8,27:PRINT "TANTO POR 1"                                                           .960
LOCATE 8,40:PRINT "TANTO POR %"                                                                         .912
LOCATE 8,52:PRINT "TANTO POR 1":LOCATE 8,64:PRINT "TANTO POR %"                                         .754
LOCATE 6,35:PRINT "ORDINARIAS"                                                                          .876
LOCATE 6,57:PRINT "ACUMULADAS":LINE(76,48)-(600,48),1                                                   . 69
RETURN                                                                                                  .357
relleno:                                                                                                .409
x1=0:acum=0:lin=10:acum1=0:tot=0                                                                        .841
FOR ju=0 TO x:tot=tot+can(ju):NEXT ju                                                                   .305
FOR lu=0 TO x:                                                                                          .519
LOCATE lin,4:PRINT ord(lu):LOCATE lin,l2:PRINT can(lu)                                                  .837
acum=acum+can(lu):LOCATE lin,20:PRINT acum                                                              .395
LOCATE lin,27:forl=can(lu)/tot                                                                          .267
:PRINT forl:LOCATE lin,40:PRINT forl*100                                                                . 49
acum1=acum1+forl:LOCATE lin,52:                                                                         .739
PRINT acum1:LOCATE lin,64:PRINT acum1*100                                                               . 66
lin=lin+1:IF lin=23 THEN GOSUB pausa:GOSUB grafica:lin=10                                               .617
NEXT lu:GOSUB pausa:mo=0:CLS                                                                            .933
FOR moda=0 TO x:IF can(moda)>mo THEN mo=can(moda)                                                       .649
NEXT moda:LOCATE 3,5:PRINT "MODA=";mo                                                                   . 23
LOCATE 5,5:PRINT "MEDIANA=";ord(x/2):ter=0:var=0:car=0                                                  .784
FOR ca=0 TO x:car=car+can(ca)/ord/ca):NEXT ca                                                           .741
FOR med=0 TO x:ter=ter+can(med)*ord(med):NEXT med                                                       .673
FOR va=o TO x:var=var+can(va)*ord(va)*ord(va):NEXT va                                                   .829
LOCATE 7,5:PRINT "MEDIA ARITMETICA=";acum/car                                                           .666
LOCATE 9,5:PRINT "MEDIA CUADRATICA=";SQR (var/acum)                                                     .896
LOCATE 11,5:PRINT "RECORRIDO O AMPLITUD =";ord(x)-ord(0)                                                .723
LOCATE 13,5:PRINT "VARIANZA =";var/acum-((ter/acum)*(ter/acum))                                         .304
LOCATE 15,5:PRINT "DESVIACION STANDAR=";                                                                .337
PRINT SQR (var/acum-((ter/acum)*ter/acum)))                                                             .942
GOSUB pausa:RETURN                                                                                      .427
pausa:                                                                                                  .635
a$=INKEY$:IF a$="" THEN pausa                                                                           .412
RETURN                                                                                                  .357
barra:                                                                                                  .347
CLS:IF n=0 THEN fallo                                                                                   .233
LOCATE 1,15:PRINT n$:max=0                                                                              .389
LINE(41,20)-(41,160),1:LINE(41,160)-(600,160),1                                                         .408
FOR ca=0 TO x:IF can(ca)>max THEN max=can(ca)                                                           .291
NEXT ca:alt=17/max:long=551/(x+1)                                                                       .278
FOR di=0 TO x:form=49+di*long:forl=form+long/2:pil=alt*can(di)*8                                        .818
AREA (form,159):AREA STEP(forl-form,0):AREA STEP(0,-pil)                                                .325
AREA STEP(-(forl=form),0)                                                                               .638
COLOR 3,2:AREAFILL                                                                                      .549
NEXT di:LINE(41,20)-(600,20),1:LINE(600,160)-(600,20),1:                                                .724
LINE(41,66)-(600,66),1                                                                                  . 77
LINE(41,113)-(600,113),1:COLOR 2,0:LOCATE 20,1:PRINT 0                                                  . 11
LOCATE 14,1:PRINT max*.33:LOCATE 8,1:                                                                   .897
PRINT max*.66:LOCATE 3,1:PRINT max                                                                      .440
IF x<24 THEN FOR ren=0 TO x:LOCATE 22,(long*ren+49)/8:PRINT ord(ren):NEXT ren                           .799
GOSUB pausa:RETURN                                                                                      .427
histograma:                                                                                             .643
CLS:IF n=0 THEN fallo                                                                                   .233
LOCATE 1,15:PRINT n$:max=0                                                                              .389
LINE(41,20)-(41,160),1:LINE(41,160)-(600,160),1                                                         .408
FOR ca=0 TO x:IF can(ca)>max THEN max=can(ca)                                                           .291
NEXT ca:alt=17/max:long=551/(x+1):forla=49:pila=159:                                                    .764
FOR di=0 TO x:form=49+di*long:                                                                          .  1
forl=form+long/2:pil=(136-alt*can(di)*8)+21                                                             .444
LINE(forla,pila)-(forl,pil),3:                                                                          .286
forla=forl:pila=pil:LINE(forl,160)-(forl,20),1                                                          .293
NEXT di:LINE(41,20)-(600,20),1:                                                                         .222
LINE(600,160)-(600,20),1:LINE(41,66)-(600,66),1                                                         .252
LINE(41,113)-(600,113),1:COLOR 2,0:LOCATE 20,1:PRINT 0                                                  . 11
LOCATE 14,1:PRINT max*.33:LOCATE 8,1                                                                    .641
:PRINT max*.66:LOCATE 3,1:PRINT max                                                                     .591
IF x<24 THEN FOR ren=0 TO x:LOCATE 22,(long*ren+49)/8:PRINT ord(ren):NEXT ren                           .799
GOSUB pausa:RETURN                                                                                      .427
tarta:                                                                                                  .835
CLS:IF n=0 THEN fallo                                                                                   .233
CIRCLE (320,80),100,2,,,.49:pi=3.1415927#:                                                              .538
gra=0:col=0:LOCATE 1,15:PRINT n$                                                                        .175
FOR par=0 TO X:gra=gra+(can(par)/tot)*360                                                               .697
alg=(gra*pi)/180                                                                                        .893
LINE(320,80)-(320+(SIN (alg))*100,80+(COS (alg))*50),2                                                  .671
in=SIN (alg)*5:in2=COS (alg)*5                                                                          .580
REM PAINT ((320-in)+(SIN (alg))*100,(80-in2)+(COS (alg))*50),col,2                                      .707
col=col+1:IF col=4 THEN col=0                                                                           .468
NEXT par                                                                                                .527
FOR par=0 TO x:gra=gra+(can(par)/tot)*360                                                               .697
alg=(gra*pi)/180                                                                                        .893
post=SGN (SIN (alg))                                                                                    .450
IF post=-1 THEN LINE (320+(SIN (alg))*100,80+(COS (alg))*50)-(270+SIN(alg)*100,80+COS (alg)*50),2       .604
IF post=1 THEN LINE (320+(SIN (alg)*100,80+(COS (alg))*50)-(370+SIN(alg)*100,80+COS (alg)*50,2          . 32
IF post=1 THEN LOCATE (COS(alg)*50+80)/8,(370+SIN(alg)*100)/8:PRINT ord(par);"=";can(par)/tot*100;"%"   .104
IF post=-1 THEN GOSUB inver                                                                             . 18
NEXT par:GOSUB pausa                                                                                    .231
RETURN                                                                                                  .357
inver:                                                                                                  .408
cade$=STR$(ord(par))+"="+STR$(can(par)/tot*100)+" %":lo=LEN (cade$)                                     .688
LOCATE (COS(alg)*50+80)/8,((320+SIN(alg)*100)/8)-lo-4:PRINT cade$                                       .748
RETURN                                                                                                  .357
sal:                                                                                                    .399
SYSTEM                                                                                                  .209
fallo:                                                                                                  .620
LOCATE 15,15:PRINT "NO EXISTEN DATOS":GOSUB pausa:RETURN                                                . 15
Numero de lineas: 154

Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal