Simulating simple “organisms” to teach morphological data analysis

stars color

Versión en español aquí

I had to teach the basics of morphological data analysis in R in a classroom for a small workshop. While preparing the material it was proposed to me that students could collect their own data (it was possible to find a relatively good number of lizards, insects, and plants nearby). I decided not to include data collection as part of my workshop, first because of logistics ( I didn’t know the place myself), and second and most importantly, because I wouldn’t be able to control the “real life” data the students were going to analyze.

Although the unpredictability of the data is an intrinsic characteristic of any process of data collection in nature, the goal of the workshop was to learn to perform the basic analyses using R. The only way to know if the students were achieving this was to know the results in advance.

So once I decided that data collection wasn’t going to be part of the workshop I had to find a way to provide data to the students to be analyzed. I decided to design my own organisms with characteristics that would make them easy to measure. Most importantly, I designed them so that their trait distributions were known by me (this would allow me to teach about normal distributions, parametric and non-parametric tests, normality tests, etc). Additionally, I created 3 populations of these organisms (of the same “species”), each with particular characteristics. For example, in one population male-biased sexual dimorphism would be present for body size, in another one two given traits would be inversely correlated but without any dimorphism, etc.

I had some fun simulating these populations, and I also think they can be helpful when teaching the very basics of morphological data analysis, so I figured I would share a bit of how I created these little beasts.

The stars

My organisms belong to some kind of sea star (I have no knowledge of sea star taxonomy, so I didn’t intend to make “strict” sea stars). They have three traits that can be easily measured: body diameter, “mouth” diameter, and “spike” length.

star

The basic star morphology

To design the stars I used R. My code might look archaic and I’m sure there are simpler ways to do this, but it worked for me.

First I had to define the “plot space”:

par(mfrow=c(4,2),pty="s",mar = rep(0, 4))
x <- c(-3:33)
y <- c(-3:33)

The first line is probably irrelevant. I wanted to produce 8 stars per page to later print and cut them, so I chose that configuration. Then, x and y will later define the space on which I will draw my organisms. There is no special reason why these numbers happen to go from -3 to 33, it was just trial and error.

After those details, the first thing to do was to define some parameters:

rp <- 13 # mean ratio / males = 13, females = 10
rm <- 3.5 # mean ratio mouth / males = 4, females = 3.5
ln <- 6 # mean spike length
num <- rnorm(48, mean = rp, sd = 1.5)
rc <- rnorm(48, mean = rm, sd = 1)
lnn <- rnorm(48, mean = ln, sd = 1.5)

As you can see, rp, rm, and ln are mean values for each of the 3 traits in a particular population (notice that I use “ratio” as a parameter, but this will define the diameter later). My notes indicate that in this population males were larger than females in both body (13 vs 10) and mouth diameter (4 vs 3.5).

The next 3 lines of code give me 3 groups of data. Particularly they will generate 48 numbers (I was creating populations of 96 individuals, 48 of each sex) following a normal distribution around the mean of each of the above traits and with standard deviations as shown (all of this using rnorm). In this way I knew in advance that the traits were normally distributed. The numbers, although following a normal distribution, were randomly generated, thus giving some realism to the population.

c <- 1
while (c<9) {
plot(x,y,type='n',axes=FALSE,ann=FALSE)
r <- num[c]
xx <- c(r-r,0.8*r,r,1.2*r,r+r,1.2*r,r,0.8*r)
yy <- c(r,1.2*r,r+r,1.2*r,r,0.8*r,r-r,0.8*r)
polygon(xx,yy,lwd=2)
points(r,r, cex=rc[c],lwd=2)
lines(c(0.8*r,(0.8*r)-(lnn[c]/sqrt(2))),c(1.2*r,(1.2*r)+(lnn[c]/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+(lnn[c]/sqrt(2))),c(1.2*r,(1.2*r)+(lnn[c]/sqrt(2))),lwd=2)
lines(c(0.8*r,(0.8*r)-(lnn[c]/sqrt(2))),c(0.8*r,(0.8*r)-(lnn[c]/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+(lnn[c]/sqrt(2))),c(0.8*r,(0.8*r)-(lnn[c]/sqrt(2))),lwd=2)
c <- c+1
}

These lines form a loop by which 48 stars will be created. The first thing you might notice is that the condition of the "while” function only goes up until numbers smaller than 9. This is because, as I mentioned before, I wanted to generate 8 stars per page to print and cut them later. You can modify this to create all your stars at once, and saving the outputs as you wish.

In the next step I use the plot function to create a blank space (here the and y values from the first lines are used). The method I used to draw my stars was the polygon function. If you follow the code you will notice that it will use a different value of the random list of 48 ratios each time to draw the contour of the star. To draw the mouth I simply use the function points, again using a different randomly generated mouth ratio (rc[c]) and also considering the value of body diameter (r) to let the code know where to put the mouth. Finally, I use the function lines to draw the spikes of the star. I also use one randomized number from the list of values for spikes (lnn[c]).

There was a funny situation when making the code to draw the spikes. People usually make jokes complaining on how they will never use things they learned in their math class at school. “I’m still waiting for the day in which I will make use of the Pythagoras’ theorem”. I’m happy to say that for me, that day arrived when I had to make the code for the spikes. Since I wanted to draw the spikes forming a 45º degree angle with respect to the adjacent “arms” of the star I had to make a quick check on the classic theorem to calculate the proximal and distal positions of the spikes. So don’t complain about your high school geometry.

This is a sample of 8 stars you could get from a run of the code:

Ssss

In my case, I created 3 populations with different morphological characteristics. To make things more colorful I gave each population a color, and each sex within a population a different shade of that color (females were darker and males lighter). I didn’t include the color in the code, but printed the stars in color paper depending on sex and population.

stars color

A sample of the colors I used. The morphology of these individuals is the same (the image is just to give you an idea of the colors), but the populations had different morphological characteristics.

After measuring the traits of the stars the students can start to compare the populations and describe the patterns you previously determined in your code. In the following graph I compare two populations with respect to 2 of their traits and you can see how different they are with respect to their morphological patterns. In the pink population, for example, males have in average larger body diameters than females. No relationship is observed between body diameter and spike length. In contrast, in the blue population females are in average larger than males. Moreover, there is a negative relationship between body diameter and spike length.

comparison

The use of the stars and the application of these and some other simple analyses should be enough to teach (and entertain) your students about simple morphological comparisons without risking not having reliable data. The approach can also reflect to some extend what occurs in nature: although you can see that individuals show differences between them, it is not possible to know the patterns shown by each particular population until you measure a good amount of stars and observe how traits relate to each other.

Finally, there are many things you can teach with a dataset like this, including correct data collection, descriptive statistics, statistical tests for mean comparison, associations between variables, graph plotting, sexual dimorphism, among others.

In addition to the code I showed before I will leave two additional pieces of code, one for each of the remaining 2 populations, in case it is useful for anybody even as a base to improve or create different, more interesting codes. If you would like to skip the coding part and just get the stars you can contact me and I will be happy to send them to you, ready to print. Also, if you have questions about the code (which is probable since is quite messy) you can also contact me and again, I’ll be happy to help.

Extra codes

*remember that if you want males to be different from females you will have to run the code twice, once per sex and using different parameters. A small description of each population is provided. Also, notice that in these 2 populations the parameters of mouth diameter and spike length are defined by body diameter, so no normally-distributed random values were generated for them.

###POP 2 ###
### there is not sexual dimorphism in body or mouth diameter
### sexual dimorphism in spike length
### traits are positively related to body diameter
par(mfrow=c(4,2),pty="s",mar = rep(0, 4))
x <- c(-3:33)
y <- c(-3:33)

rp <- 13 # mean ratio / males = 13, females = 13
rm # mean ratio mouth / males = num[c]/3, females = num[c]/3
ln # mean needle length / males = num[c]/2, females = num[c]/1.2

num <- rnorm(48, mean = rp, sd = 1.5)
#rc <- rnorm(48, mean = rm, sd = 1)
#lnn <- rnorm(48, mean = ln, sd = 1.5)

c <- 1
while (c<49) {
plot(x,y,type='n',axes=FALSE,ann=FALSE)
r <- num[c]
xx <- c(r-r,0.8*r,r,1.2*r,r+r,1.2*r,r,0.8*r)
yy <- c(r,1.2*r,r+r,1.2*r,r,0.8*r,r-r,0.8*r)
polygon(xx,yy,lwd=2)
points(r,r, cex=num[c]/3,lwd=2)
lines(c(0.8*r,(0.8*r)-((num[c]/1.2)/sqrt(2))),c(1.2*r,(1.2*r)+((num[c]/1.2)/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+((num[c]/1.2)/sqrt(2))),c(1.2*r,(1.2*r)+((num[c]/1.2)/sqrt(2))),lwd=2)
lines(c(0.8*r,(0.8*r)-((num[c]/1.2)/sqrt(2))),c(0.8*r,(0.8*r)-((num[c]/1.2)/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+((num[c]/1.2)/sqrt(2))),c(0.8*r,(0.8*r)-((num[c]/1.2)/sqrt(2))),lwd=2)
c <- c+1
}

### POP 3 ###
### there is sexual dimorphism in body diameter (females larger)
### needle length negatively related to body diameter
### mouth diameter is positively related to body diameter

par(mfrow=c(4,2),pty="s",mar = rep(0, 4))
x <- c(-3:33)
y <- c(-3:33)

rp <- 13 # mean ratio / males = 10, females = 13
rm # mean ratio mouth / males = num[c]/3, females = num[c]/3
ln # mean needle length / males = 60/num[c], females = 80/num[c]

num <- rnorm(48, mean = rp, sd = 1.5)
#rc <- rnorm(48, mean = rm, sd = 1)
#lnn <- rnorm(48, mean = ln, sd = 1.5)

c <- 41
while (c<49) {
plot(x,y,type='n',axes=FALSE,ann=FALSE)
r <- num[c]
xx <- c(r-r,0.8*r,r,1.2*r,r+r,1.2*r,r,0.8*r)
yy <- c(r,1.2*r,r+r,1.2*r,r,0.8*r,r-r,0.8*r)
polygon(xx,yy,lwd=2)
points(r,r, cex=num[c]/3,lwd=2)
lines(c(0.8*r,(0.8*r)-((80/num[c])/sqrt(2))),c(1.2*r,(1.2*r)+((80/num[c])/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+((80/num[c])/sqrt(2))),c(1.2*r,(1.2*r)+((80/num[c])/sqrt(2))),lwd=2)
lines(c(0.8*r,(0.8*r)-((80/num[c])/sqrt(2))),c(0.8*r,(0.8*r)-((80/num[c])/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+((80/num[c])/sqrt(2))),c(0.8*r,(0.8*r)-((80/num[c])/sqrt(2))),lwd=2)
c <- c+1
}

 

Simulando “organismos” simples para enseñar análisis de datos morfológicos

stars color

Hace poco tuve que enseñar lo básico acerca del análisis de datos morfológicos en R en un pequeño taller. Mientras preparaba el material se me propuso que los estudiantes colectaran sus propios datos (cerca al lugar es posible encontrar un buen número de lagartijas, insectos, y plantas). Decidí no incluir la colecta de datos como parte del taller, primero debido a la logística (no conocía el lugar de antemano), y segundo y más importante, porque no sería capaz de controlar los datos del “mundo real” que los estudiantes deberían analizar.

A pesar que la incertidumbre de los datos es una característica intrínseca de cualquier proceso de colecta de datos en la naturaleza, el objetivo del taller era aprender a realizar análisis básicos de datos morfológicos. La única forma de saber si los estudiantes estaban logrando el objetivo era conociendo los resultados con anticipación.

Una vez que decidí que la colecta de datos no sería parte del taller tuve que pensar en una manera de proveer datos a los estudiantes para que pudieran trabajar. Entonces decidí diseñar mis propios organismos con características que pudieran ser fáciles de medir. Pero sobretodo, los diseñé de modo que las distribuciones de sus rasgos fueran conocidas por mí (esto me permitiría enseñar acerca de distribuciones normales, tests paramétricos y no-paramétricos, tests de normalidad, etc). Adicionalmente, creé 3 poblaciones de estos organismos (de la misma “especie”), cada una con características particulares. Por ejemplo, en una población se podría observar dimorfismo sexual en el tamaño del cuerpo, en otra dos de los rasgos morfológicos estarían inversamente relacionados, pero sin dimorfismo, etc.

Me divertí simulando estas poblaciones, y también creo que pueden ser útiles para enseñar lo más básico del análisis de datos morfológicos, así que pensé que podría compartir un poco de como hice a estos bichos.

Las estrellas

Mis organismos pertenecen a algún tipo de estrella de mar (no tengo conocimiento alguno sobre taxonomía de estrellas de mar, así que no intenté hacer “estrellas de mar” en el sentido estricto y taxonómico del término). Estas estrellas tienen tres rasgos que pueden ser medidos fácilmente: diámetro del cuerpo, diámetro de la “boca”, y longitud de “espina”.

star

Morfología básica de una estrella

Para diseñar las estrellas usé el programa R. Mi código puede verse arcaico y estoy seguro que hay maneras más simples de hacer todo esto, pero este método funcionó para mí.

Primero tuve que definir el espacio en el que iba a graficar:

par(mfrow=c(4,2),pty="s",mar = rep(0, 4))
x <- c(-3:33)
y <- c(-3:33)

La primera línea es probablemente irrelevante. En mi caso, quería producir 8 estrellas por página para luego imprimirlas y cortarlas, por lo que escogí esta configuración. Luego, xy definirán más tarde el espacio en el cual dibujaré mis organismos. No hay un motivo especial por el cual estos números sean -3 y 33.

Luego de estos detalles, lo primero que se debe hacer es definir algunos parámetros:

rp <- 13 # mean ratio / males = 13, females = 10
rm <- 3.5 # mean ratio mouth / males = 4, females = 3.5
ln <- 6 # mean spike length
num <- rnorm(48, mean = rp, sd = 1.5)
rc <- rnorm(48, mean = rm, sd = 1)
lnn <- rnorm(48, mean = ln, sd = 1.5)

Como puedes ver, rprm, y ln son valores promedio para cada uno de los 3 rasgos en una población determinada (nótese que utilicé “ratio” como un parámetro, pero este definirá el diámetro más adelante). Mis notas en el código indican que en esta población los machos fueron más grandes que las hembras en ambos, diámetro de cuerpo y boca.

Las siguientes 3 líneas del código nos dan 3 grupos de datos. Específicamente cada una nos generará 48 números (estaba creando poblaciones de 96 individuos, 48 de cada sexo) siguiendo una distribución normal alrededor de una media (la cual ya definimos para cada rasgo) y con una desviación estándar como se muestra (todo esto utilizando la función rnorm). De este modo ya sabía con anticipación que los rasgos seguían una distribución normal. Los números, aunque siguiendo dicha distribución, fueron generados aleatoriamente, dándole más realismo a la población.

c <- 1
while (c<9) {
plot(x,y,type='n',axes=FALSE,ann=FALSE)
r <- num[c]
xx <- c(r-r,0.8*r,r,1.2*r,r+r,1.2*r,r,0.8*r)
yy <- c(r,1.2*r,r+r,1.2*r,r,0.8*r,r-r,0.8*r)
polygon(xx,yy,lwd=2)
points(r,r, cex=rc[c],lwd=2)
lines(c(0.8*r,(0.8*r)-(lnn[c]/sqrt(2))),c(1.2*r,(1.2*r)+(lnn[c]/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+(lnn[c]/sqrt(2))),c(1.2*r,(1.2*r)+(lnn[c]/sqrt(2))),lwd=2)
lines(c(0.8*r,(0.8*r)-(lnn[c]/sqrt(2))),c(0.8*r,(0.8*r)-(lnn[c]/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+(lnn[c]/sqrt(2))),c(0.8*r,(0.8*r)-(lnn[c]/sqrt(2))),lwd=2)
c <- c+1
}

Estas líneas forman un loop a través del cual 48 estrellas serán generadas (recuerda que si machos y hembras serán diferentes entonces ambos grupos tendrán que ser generados por separado debido a que sus parámetros serán distintos). Lo primero que podrías notar en el código es que la condición de la función while solo va para números menores a 9. Esto es porque, como mencioné antes, quería generar 8 estrellas por página para imprimirlas y cortarlas luego. Tú puedes modificar esto para crear todas tus estrellas a la vez, guardando los outputs de la manera que desees.

En el siguiente paso utilizo la función plot para crear un espacio en blanco (aquí los valores de xy de las primeras líneas son usados). Para dibujar mis estrellas usé la función polygon. Si sigues el código notarás que cada vez utilicé un valor diferente de la lista de 48 radios aleatorios para dibujar el contorno de cada estrella. Para dibujar la boca simplemente utilicé la función points, de nuevo usando un valor diferente de la lista de valores aleatorios de radio de boca (rc[c]) y también considerando el valor del diámetro del cuerpo (r) para hacerle saber al código dónde colocar la boca. Finalmente, usé la función lines para dibujar las espinas de la estrella. También utilicé un número de la lista de valores aleatorios de espinas (lnn[c]).

Tuve una situación graciosa cuando estaba haciendo el código para dibujar las espinas. La gente usualmente hace bromas quejándose de cómo nunca usarán las cosas que les enseñaron en la escuela. “Aún espero el día en que el teorema de Pitágoras me sirva de algo!”. Felizmente puedo decir que ese día llegó para mí cuando tuve que hacer el código para las espinas de mis estrellas. Como quería dibujar las espinas de manera que formaran un ángulo de 45 grados respecto a los “brazos” adyacentes de la estrella tuve que hacer una revisión rápida del clásico teorema para poder calcular la posición distal y proximal de las espinas. Así que no se quejen de su geometría escolar.

Este es un ejemplo de 8 estrellas que podrían obtener luego de correr el código una vez:Ssss

En mi caso, creé 3 poblaciones con diferentes características morfológicas. Para hacer las cosas más coloridas le di a cada población un color, y a cada sexo dentro de una población una “intensidad” distinta de dicho color (las hembras eran oscuras y los machos claros). No incluí el color en el código, sino que imprimí las estrellas en papel de color según población y sexo.

stars color

Un ejemplo de los colores que utilicé. Aquí las estrellas se ven iguales, pero es porque la imagen es solo ilustrativa. En realidad las poblaciones e incluso sexos tuvieron características morfológicas distintas entre sí.

Luego de medir los rasgos de las estrellas los estudiantes pueden empezar a comparar las poblaciones y describir los patrones que tú previamente ya determinaste en el código. En la siguiente gráfica comparé dos poblaciones respecto a dos de sus rasgos y puedes ver qué tan distintas son respecto a sus patrones morfológicos. En la población rosa, por ejemplo, los machos tienen en promedio mayores diámetros de cuerpo respecto a las hembras. Ninguna relación se observa entre el diámetro del cuerpo y largo de espina. En contraste, en la población azul las hembras son en promedio más grandes que los machos. Además, hay una relación negativa entre el diámetro del cuerpo y la longitud de las espinas.

comparison

El uso de las estrellas y la aplicación de estos y algunos otros análisis simples deberían ser suficientes para enseñar (y entretener) a tus estudiantes acerca de comparaciones morfológicas sencillas sin arriesgarte a no tener datos confiables. La medición de estas estrellas también puede reflejar hasta cierto punto lo que ocurre en la naturaleza: Aunque puedas ver que los individuos son diferentes entre sí, no es posible conocer los patrones mostrados por cada población particular a menos que midas una buena cantidad de estrellas y observes cómo los rasgos se relacionan entre sí.

Finalmente, hay muchas cosas que se pueden enseñar con bases de datos como esta, incluyendo estadística descriptiva, pruebas estadísticas para comparación de medias, asociaciones entre variables, generación de gráficas, dimorfismo sexual, entre otros.

Además del código que mostré arriba dejaré dos piezas adicionales de códigos, una para cada una de las 2 poblaciones restantes que utilicé, en caso sea útil para alguien, incluso como base para mejorar o crear códigos diferentes y más interesantes. Si te quieres saltar toda la parte de escribir códigos y solo te interesa tener las estrellas me puedes escribir y con gusto te las envío. También, si tienes preguntas sobre el código (lo cual es probable ya que creo que por momentos es desordenado) me puedes escribir e igual con gusto puedo intentar ayudar.

Código extra

*recuerda que si quieres que los machos sean diferentes a las hembras vas a tener que correr el código dos veces, una por sexo y utilizando diferentes valores para los parámetros. Una pequeña descripción de cada población se encuentra al comienzo de cada pieza. También, fíjate que en estas dos poblaciones los parámetros de diámetro de boca y largo de espina son definidos por el diámetro del cuerpo, así que los valores de ambos rasgos no se generaron aleatoriamente siguiendo una distribución normal, como en la primera población.

### POP 2 ###
### there is not sexual dimorphism in body or mouth diameter
### sexual dimorphism in spike length
### traits are positively related to body diameter
par(mfrow=c(4,2),pty="s",mar = rep(0, 4))
x <- c(-3:33)
y <- c(-3:33)

rp <- 13 # mean ratio / males = 13, females = 13
rm # mean ratio mouth / males = num[c]/3, females = num[c]/3
ln # mean needle length / males = num[c]/2, females = num[c]/1.2

num <- rnorm(48, mean = rp, sd = 1.5)
#rc <- rnorm(48, mean = rm, sd = 1)
#lnn <- rnorm(48, mean = ln, sd = 1.5)

c <- 1
while (c<9) {
plot(x,y,type='n',axes=FALSE,ann=FALSE)
r <- num[c]
xx <- c(r-r,0.8*r,r,1.2*r,r+r,1.2*r,r,0.8*r)
yy <- c(r,1.2*r,r+r,1.2*r,r,0.8*r,r-r,0.8*r)
polygon(xx,yy,lwd=2)
points(r,r, cex=num[c]/3,lwd=2)
lines(c(0.8*r,(0.8*r)-((num[c]/1.2)/sqrt(2))),c(1.2*r,(1.2*r)+((num[c]/1.2)/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+((num[c]/1.2)/sqrt(2))),c(1.2*r,(1.2*r)+((num[c]/1.2)/sqrt(2))),lwd=2)
lines(c(0.8*r,(0.8*r)-((num[c]/1.2)/sqrt(2))),c(0.8*r,(0.8*r)-((num[c]/1.2)/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+((num[c]/1.2)/sqrt(2))),c(0.8*r,(0.8*r)-((num[c]/1.2)/sqrt(2))),lwd=2)
c <- c+1
}


### POP 3 ###
### there is sexual dimorphism in body diameter (females larger)
### needle length negatively related to body diameter
### mouth diameter is positively related to body diameter

par(mfrow=c(4,2),pty="s",mar = rep(0, 4))
x <- c(-3:33)
y <- c(-3:33)

rp <- 13 # mean ratio / males = 10, females = 13
rm # mean ratio mouth / males = num[c]/3, females = num[c]/3
ln # mean needle length / males = 60/num[c], females = 80/num[c]

num <- rnorm(48, mean = rp, sd = 1.5)
#rc <- rnorm(48, mean = rm, sd = 1)
#lnn <- rnorm(48, mean = ln, sd = 1.5)

c <- 1
while (c<9) {
plot(x,y,type='n',axes=FALSE,ann=FALSE)
r <- num[c]
xx <- c(r-r,0.8*r,r,1.2*r,r+r,1.2*r,r,0.8*r)
yy <- c(r,1.2*r,r+r,1.2*r,r,0.8*r,r-r,0.8*r)
polygon(xx,yy,lwd=2)
points(r,r, cex=num[c]/3,lwd=2)
lines(c(0.8*r,(0.8*r)-((80/num[c])/sqrt(2))),c(1.2*r,(1.2*r)+((80/num[c])/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+((80/num[c])/sqrt(2))),c(1.2*r,(1.2*r)+((80/num[c])/sqrt(2))),lwd=2)
lines(c(0.8*r,(0.8*r)-((80/num[c])/sqrt(2))),c(0.8*r,(0.8*r)-((80/num[c])/sqrt(2))),lwd=2)
lines(c(1.2*r,(1.2*r)+((80/num[c])/sqrt(2))),c(0.8*r,(0.8*r)-((80/num[c])/sqrt(2))),lwd=2)
c <- c+1
}
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s