|
|
|||||||||
| 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 | ![]() |
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.
|
lLa estadística |
|---|
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:
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.
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 |
|---|
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.
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 |
|