Titulo: UTILIZACIÓN DEL PAQUETE ESTADÍSTICO STATA® EN EL ÁMBITO DE LA GENÉTICA DE LAS POBLACIONES HUMANAS: NUEVA APLICACIÓN INFORMÁTICA PARA LA ESTIMACIÓN DEL PARENTESCO GENÉTICO Y DISTANCIA GENÉTICA, MEDIANTE ISONIMIA.

Autor:
C. Rodríguez Andrés y J. Delgado Naranjo.*

* Departamento de Medicina Preventiva y Salud Pública, Facultad de Medicina y Odontología, Universidad del País Vasco.
Email : osproanc@lg.ehu.es


Índice general


Introducción

Las bases conceptuales de la genética de poblaciones humanas descansan sobre el concepto de parentesco genético, el cual se define como la probabilidad de compartir un mismo gen idéntico por descendencia entre sujetos pertenecientes a una misma o diferente población humana. La estimación del parentesco genético puede ser llevada a cabo mediante diferentes métodos, siendo el método de la Isonimia, uno de los más utilizados para este fin. La base metodológica de la Isonimia, reside en la propiedad inherente a la población humana por medio de la cual los apellidos pasan de una generación a la siguiente, siguiendo un modelo de herencia y una distribución entre la población a partir de la cual resulta posible estimar el parentesco genético para su aplicación en genética de poblaciones humanas.

La primera constancia que se tiene del uso de los apellidos con fines genéticos es la efectuada por G. H. Darwin en 1875, merced a la cual éste logró estimar la frecuencia de matrimonios consanguíneos entre primos hermanos en población inglesa. Aunque inicialmente el término Isonimia fue concebido como la propiedad inherente a aquellos matrimonios, cuyos cónyuges poseían el mismo apellido, pronto quedó establecido como la metodología consistente en el uso de los apellidos presentes en una determinada población, para el estudio de la estructura genética de la misma [1]. Mediante el empleo de los apellidos es posible estimar numerosos parámetros relacionadas con la genética de la población, entre los cuales figuran los estadísticos F, consanguinidad, parentesco interpoblacional, etc. Ello es posible, dado que los apellidos se transmiten transgeneracionalmente, de padres a hijos, siguiendo un patrón de transmisión que guarda relación directa con la herencia genética.

El concepto de Isonimia, como método de estudio en la Genética de Poblaciones Humanas, nace en el año 1965, en virtud del trabajo presentado por Crow y Mange [1]. Inicialmente el campo de aplicación de la isonimia se limitaba al cálculo de la consanguinidad, aunque ya en 1968, Lasker utilizó listas de apellidos para la estimación del parentesco genético entre poblaciones humanas; pese a lo cual no logró una formulación adecuada a este fin hasta el año 1977 [2]. Formulaciones de métodos análogos para la estimación del parentesco genético entre poblaciones, han venido siendo realizadas introduciéndose puntualizaciones metodológicas, cada vez más precisas para su estimación contribuyendo de forma decisiva al perfeccionamiento de la Isonimia [3]. El desarrollo e instauración de estas técnicas se ha visto arropado por el notable avance registrado en material y procedimientos informáticos, lo cual ha contribuido a la proliferación de trabajos, cuyo substrato metodológico es la Isonimia, pese a lo cual en el País Vasco únicamente destacan los trabajos realizados por Peña [4], Delgado [5] y Rodríguez, Delgado e Izarzugaza [6, 7].
Si cada uno de los individuos incluidos dentro de la población en estudio posee dos apellidos, uno adquirido por vía paterna y el otro de procedencia materna, significa que poseemos el primer apellido de cada uno de sus progenitores, cuyo matrimonio o emparejamiento dio lugar al individuo anteriormente citado. El sistema de dotación de apellidos en población hispana, permite la realización del estudio, como si en realidad se dispusiera del registro de matrimonios a partir de los cuales se originó la población actual. En el caso de que sólo se disponga de un apellido, el método es aplicable aunque no se posea información sobre el apellido del otro progenitor.

2. Elaboración de matrices de parentesco genético.

Una de las aplicaciones más importantes de la isonimia, es la elaboración de matrices de parentesco genético que relacionen diferentes poblaciones entre sí, al tiempo que permiten calcular diferentes estadísticos de consanguinidad (F). El parentesco genético es la probabilidad de que tomando un gen de una población i, éste sea idéntico por descendencia a otro gen localizado en la población j, surge el parámetro sij, que cuantifica dicho parentesco. El método de Morton [3], permite el cálculo de una estimación de dicho parámetro mediante isonimia. Dicho método parte del concepto de isonimia esperada, dicha isonimia esperada puede ser calculada a distintos niveles poblacionales: intrapoblacional, entre pares de poblaciones y a nivel regional. La isonimia esperada para una población (i), queda expresada mediante la siguiente ecuación:


                                                            (I)

donde nki es el número de individuos de la población i, cuyo apellido es k para la totalidad de apellidos presente en la población, cuyo sumatorio viene dado por Ni=Snk.

Análogamente, y de acuerdo con el autor mencionado, puede estimarse la isonimia esperada entre pares de poblaciones (sij ). Para las poblaciones i y j, dicha isonimia esperada quedaría como:


                                                           (II)

Finalmente se puede calcular la isonimia a nivel regional (R), considerando el número total de las poblaciones que componen el área de estudio de modo simultáneo, o lo que es lo mismo la totalidad de subpoblaciones (p) que componen la población total:



                                                            (III)

Una vez introducido el concepto de isonimia esperada a sus distintos niveles: poblacional, pares de poblaciones y regional; nos hallamos en condiciones de exponer los tres coeficientes de parentesco diseñados por Morton: parentesco a priori, parentesco regional y parentesco condicional. La totalidad de dichos coeficientes de parentesco son conceptualmente distintos, calculándose de forma diferente en cada caso, aunque todos ellos permiten elaborar una matriz de parentesco de dimensiones pxp, siendo p el número de poblaciones que componen el estudio o si se prefiere el número de subdivisiones o subpoblaciones en que se fragmenta la población general, conforme a alguno de los criterios antes mencionados.
El parentesco a priori se apoya conceptualmente en la presunta existencia de una población primigenia, la cual pudo haber dado origen a las poblaciones actuales o contemporáneas [3]. La existencia de dicha población hipotética ha de situarse en el pasado y su constatación es puramente especulativa. El parentesco a priori es matemáticamente un cuarto de la isonimia esperada entre pares de poblaciones, descrita anteriormente:


                                                            (IV)

Otro coeficiente de parentesco, es el denominado coeficiente de parentesco regional, el cual se define como la cuarta parte de la isonimia esperada a nivel regional:


                                                            (V)

No obstante el coeficiente de parentesco más usual y empleado con mayor frecuencia en los estudios basados en estructura genética de poblaciones humanas, es el denominado coeficiente de parentesco condicional [3, 5]. Dicho coeficiente se define como un coeficiente de covarianzas de las frecuencias génicas de las poblaciones en torno a una media regional, dicho de otro modo, se trata de un coeficiente construido en base a covarianzas subpoblacionales en torno a la media de la población general en su conjunto [3, 5]. Matemáticamente queda expresado mediante la siguiente ecuación:


                                                            (VI)

Finalmente se ha de constatar la relación existente entre los dos coeficientes de parentesco: condicional y a priori, mediante las siguientes expresiones:



                                                            (VII)
                                                            (VIII)


3. Utilidad del estudio de la Isonimia en Medicina y Epidemiología.

Hasta el momento el estudio de la asociación entre diferentes genes y el desarrollo de cáncer de diferentes localizaciones, se basa en estudios costosísimos de ligamiento genético. Por ejemplo, el cáncer de mama constituye una de las principales causas de muerte entre la población femenina mundial, al tiempo que es el más frecuente entre los diferentes cánceres susceptibles de afectar dicha población. Recientes descubrimientos en el ámbito de la Epidemiología Genética han demostrado la existencia de oncogenes asociados a la aparición de la enfermedad, entre los cuales destacan diferentes alelos pertenecientes a los loci BRCA1 y BRCA2 [6, 7]. Estos genes de susceptibilidad al cáncer de mama aparecen ligados también a cáncer de ovario, colon, páncreas y próstata. No obstante, estos genes únicamente explican una determinada proporción de los casos registrados, según investigaciones recientes, el resto de casos podrían ser debidos a otros genes, cuya investigación se encuentra en curso, o bien deberse a causas exclusivamente medioambientales.

La creación y mantenimiento de bases de datos poblacionales como los Registros de Cáncer, proporcionan la oportunidad de efectuar el estudio de la estructura genética de la población afectada de cáncer de mama y otras localizaciones asociadas o no a genes de susceptibilidad, mediante análisis de los apellidos: isonimia. El menor coste económico, la posibilidad de trabajar con la totalidad de población afectada, así como la inexistencia de estudios genéticos previos, justifican el estudio de la agregación familiar mediante métodos relativamente más baratos (Isonimia), antes de pasar a diseñar otros estudios más caros (segregación genética, ligamiento genético, etc.).

En este contexto, resulta factible el cálculo de las distancias genéticas entre población afectada de cáncer en localización anatómica ligada a los genes de susceptibilidad al cáncer de mama, así como su comparación frente a diferentes poblaciones control. En virtud de lo cual, es factible alcanzar los siguientes objetivos: I) Estudio de la estructura genética de la población afectada de cáncer en localización ligada BRCA1, BRCA2 y otros genes de susceptibilidad al cáncer de mama. II) Determinación de patrones diferenciales frente a la estructura genética de población sana. III) Interpretación en términos epidemiológicos de la presunta relación causal existente entre el cáncer de mama y factores mendelianos, deducidos a partir de la estructura genética poblacional; IV) Valoración de la influencia de determinadas variables medioambientales susceptibles de afectar a la estructura genética de la población afectada. V) Generación del substrato necesario para la orientación de estudios futuros basados en agregación familiar, segregación y ligamiento genético.

La totalidad de factores susceptibles de afectar a la estructura genética de la población afectada de cáncer en localizaciones ligadas a los genes de susceptibilidad al cáncer de mama, tales como distancia geográfica, subdivisión temporal, fenómenos demográficos, acontecimientos históricos, diferencias lingüísticas y antropológicas, pueden hacer fluctuar las frecuencias de los genes posiblemente implicados en la adquisición de la enfermedad. La evaluación de la repercusión de dichos factores sobre la estructura de la población contribuye a ampliar el conocimiento de la etiología del cáncer de mama en la población estudiada para, a la postre, poder interpretar los resultados abordando dicha cuestión desde una perspectiva de Salud Pública con relación a posibles actuaciones en materia de Medicina Preventiva, en términos de consejo genético. La alta incidencia del cáncer de mama y localizaciones anatómicas relacionadas, la elevada mortalidad de dicha patología, así como resultados terapéuticos a veces poco satisfactorios aconsejan la realización con prontitud de este estudio.

4. Objetivos.

Pese a la sencillez del método genético de análisis de Isonimia, se plantean numerosos problemas informáticos a la hora de introducir y manejar los datos por su elevado volumen y la gran cantidad y complejidad de operaciones matemáticas a efectuar. El objetivo fundamental es la construcción de diferentes rutinas, basadas en un programa de análisis estadístico, capaz de tratar un volumen importante de datos y realizar otro tipo de análisis con los resultados obtenidos. En un primer momento las rutinas se desarrollaran para el paquete estadístico STATA® [8] pero pueden ser implementadas en otros paquetes como SAS o SPSS.

Mediante STATA®, se elaboraron una serie de rutinas informáticas encadenadas, las cuales permiten la estimación del parentesco genético en sus dos vertientes: parentesco a priori y parentesco condicional. A su vez permite la elaboración de matrices de parentesco genético y distancias genéticas, las cuales pueden ser utilizadas en numerosos contextos metodológicos, genéticos, antropológicos y médico-
epidemiológicos, en los cuales se pueda disponer de los apellidos de los individuos incluidos en registros poblacionales.

La aplicación informática puede ser ejecutada en los mismos entornos en que funciona STATA®: DOS®, WINDOWS®, MACCINTOSH®, UNIX®, etc. Los resultados pueden ser visualizados en el visor de datos de STATA®. Todas las matrices de distancias genéticas son fácilmente exportables a otros programas informáticos para su tratamiento y representación. En definitiva, la nueva aplicación informática permitirá un análisis, rápido, riguroso y eficaz, revelándose como una herramienta de enorme utilidad en el ámbito de la genética de las poblaciones humanas, contribuyendo a cubrir un hueco importante dentro del análisis estadístico y procesos informáticos en dicha área del conocimiento.

5. Programas Informáticos.

Describimos a continuación una serie de programas que nos permiten la estimación mediante isonimia de las matrices de parentesco y distancia genética entre diferentes subpoblaciones pertenecientes a una misma población objetivo de interés para nuestro estudio. Los programas deben ejecutarse en el orden en que los describimos en este apartado, ya que los resultados del primero son utilizados por los siguientes. Al final de este trabajo, se recogen en un anexo, el listado completo de las instrucciones utilizadas en el lenguaje de STATA 7.0.

     a) Preparación de los datos para la estimación de isonimia.

El proceso informático comienza con la preparación de los datos para la posterior estimación de los coeficientes de Isonimia. El programa supone que se parte de un fichero de datos cargado en la memoria de STATA que consta de cierto número de casos o individuos de la población de interés (filas), en los que se han medido diferentes variables (columnas). El número máximo de sujetos que pueden ser incluidos dentro del análisis, viene limitado únicamente por la memoria RAM de la máquina donde se ejecuta el programa. Cada individuo es identificado mediante una única variable (obse) durante todo el resto del proceso informático. Entre las variables deben figurar una o dos de tipo cadena alfanumérica, que recojan el primer y segundo apellido de cada individuo. No es obligatorio que existan dos apellidos, el programa funciona también con un único apellido, como ocurre en poblaciones de origen anglosajón.

El resultado de este programa es un fichero de datos en el que cada fila se corresponde con un apellido del total de los apellidos considerados en la población analizada. De manera que si cada individuo tiene dos apellidos, el fichero de salida contiene el doble de filas que los datos originales. Se graban también dos ficheros separados, que contienen la lista de apellidos paternos y maternos, si estos últimos existen en el fichero original.

     b. Conversión de apellidos en indicadores numéricos.

El segundo programa convierte los apellidos, originalmente cadenas alfanuméricas, en datos numéricos. A cada apellido se le asigna un código numérico, con lo que durante todo el proceso se preserva la identidad de los sujetos objeto de estudio, al tiempo que se racionaliza el uso de memoria y recursos de la máquina donde se ejecuta el programa. El resto de las variables medidas sobre cada individuo se conservan intactas.

La rutina proporciona diferentes salidas que son guardadas en la memoria o en diferentes ficheros. En primer lugar, se calcula el número total de apellidos en la población de interés (no missing) y el número de los apellidos que son diferentes entre sí. En segundo lugar, se salva un fichero conteniendo la equivalencia numérica de todos los apellidos, que puede ser utilizado posteriormente para reconstruir los datos originales (codeape.do). Por último, el programa guarda las frecuencias absolutas de cada uno de los apellidos de la población de interés en un fichero de datos (apefreq.dat).


     c. Define subpoblaciones y calcula la matriz de denominadores de la Isonimia.

Este programa permite al investigador establecer las subpoblaciones a considerar a partir de combinaciones de valores de las variables seleccionadas por el usuario. Dichas variables deben haber sido medidas sobre los individuos y recogidas en el fichero de datos original sobre el que se inició el análisis. La definición de poblaciones puede incluir variables continuas, pero esto conduciría a establecer un número muy alto de subpoblaciones, por lo que desaconsejamos la utilización de este tipo de variables en la definición de subpoblaciones. En cualquier caso, el programa informa del número de subpoblaciones definidas (p). El número máximo de poblaciones que se pueden definir, viene limitado por la capacidad de STATA® para trabajar con matrices dependiendo de la versión de STATA®: 40 poblaciones en la versión standard y 800 en Intercooled STATA®. Con STATA® SE (special edition) el número de poblaciones sólo tiene el límite de la memoria física RAM instalada en el computador.

Siguiendo la metodología descrita por Morton y Relethford [3] se genera la matriz de denominadores de cada isonimia esperada tanto intra como inter-subpoblacional. La matriz es cuadrada de dimensiones pxp (siendo p el número de subpoblaciones diferentes definidas previamente). Su diagonal contiene los valores Ni*(Ni-1), para i=1, 2,..., p. Es decir, los denominadores de la isonimia esperada dentro de cada subpoblación i (Iii). Los elementos fuera de la diagonal recogen los valores de los denominadores de la isonimia esperada entre cada par de subpoblaciones (Iij), es decir, Ni*Nj, para todo j diferente de i. Dichos denominadores, son los recogidos en las ecuaciones I y II ya mencionadas previamente.

Además de la matriz de denominadores guardada en un macro de memoria (Denom_isonymy), el programa salva un fichero con todas las subpoblaciones definidas (poblas.dta) y añade el código de población a cada uno de los registros de apellidos incluidos en el análisis.

     d. Cálculo Isonimia y Parentesco Regional.

El programa calcula el estimador de la Isonimia a nivel regional, partiendo de una única variable o argumento del programa, es decir los códigos numéricos de los apellidos en el fichero de datos de la población de interés. La salida se almacena en ciertas variables o macros de memoria: el numerador (R_numerator) y denominador (R_denominator) de la Isonimia regional (R) mencionada en la ecuación III. Por último, el cálculo del parentesco regional (R_kindship) es simplemente un cuarto de la isonimia regional ya calculada.

     e. Matrices de Isonimia esperada, parentesco y distancia genética.

El programa sólo necesita dos argumentos que son el nombre de las dos variables que contienen los códigos de subpoblación y apellido. Es necesario poner en primer lugar, la variable que contenga los códigos de las subpoblaciones definidas previamente. El bucle principal del programa se encarga de calcular la matriz de dimensiones pxp de los numeradores de la isonimia intra e inter-subpoblacional como se recogen en las ecuaciones I y II. Para construir la matriz de isonimia (Isonymy) sólo es necesario dividir cada elemento de la matriz de numeradores, entre el elemento correspondiente de la matriz de denominadores calculados en una rutina previa y que se mantienen en la memoria de STATA ® mientras no se cierre el programa.

Una vez calculada la matriz de isonimia, se realiza el cálculo de dos matrices de distancias genéticas entre cada par de subpoblaciones. Ambas matrices son de dimensiones pxp. La primera de dichas matrices (Gen_dist1) sólo es la distancia cuadrática entre subpoblaciones bajo ciertas circunstancias. La segunda matriz (Gen_dist2) siempre es cuadrática y su cálculo se realiza mediante la siguiente expresión:


donde dij es la distancia genética entre las subpoblaciones i y j.

La matriz de parentesco a priori (Pri_parent) representado en la ecuación IV se calcula dividiendo cada elemento de la matriz de isonimia entre el escalar 4. El parentesco condicional se construye según la ecuación VI mediante operaciones sencillas sobre los elementos de la matriz de isonimia. Por último, se construye el vector de varianzas génicas FST a partir de la diagonal de la matriz de isonimia (isonimia intra-subpoblacional) y la frecuencia relativa o proporción de apellidos en cada subpoblación.

La salida de esta última rutina es una serie de archivos en los cuales se incluyen separada y ordenadamente las matrices de: Isonimia, matriz de parentesco a priori, matriz de parentesco condicional, matrices de distancias genéticas, vector diagonal de matrices de parentesco y valor de FST (varianza de las frecuencias génicas).

6. Validación del programa.

La validación del programa se realizó a dos niveles: informático y epidemiológico. En ambos se utilizaron los casos de cáncer de mama y otras localizaciones del Registro de Cáncer del País Vasco, que incluía los dos apellidos de todos los individuos diagnosticados de cáncer en la población residente en el País Vasco desde 1986 hasta 1993. El número de casos que utilizamos en la validación superaba ampliamente los 36.000 y pudimos analizarlos y compararlos con los resultados obtenidos mediante los programas del profesor Rodríguez Larralde en la Universidad de Caracas (Venezuela) y los obtenidos a partir de otro programa construido por diferentes profesores de la universidad de Coimbra (Portugal). Los resultados eran idénticos hasta donde pudimos comparar, debido a que los resultados de STATA permiten una mayor precisión (4 decimales más).

Los resultados epidemiológicos de comparación de las distancias genéticas entre poblaciones con cáncer de diferentes localizaciones morfológicas, se recogieron en dos comunicaciones presentadas a sendos Congresos de la Sociedad Española de Epidemiología en los años 2001 y 2002 y publicadas en la revista Gaceta Sanitaria [6, 7]. En la Figura 1 se puede apreciar los resultados del análisis de la matriz de distancias genéticas entre las subpoblaciones de cáncer con diferente localización anatómica. Se puede apreciar dos clusters o grupos de poblaciones más cercanas entre si. El primer cluster corresponde a las que tienen localizado el cáncer localizado en mama, útero, ovario, cervix y los que padecen linfoma. El segundo cluster, está formado por colón, ovario y recto. Lo que nos permitió concluir:
1. Este resultado es compatible con la existencia ya conocida de oncogenes como el BRCA1 o BRCA2 y otros oncogenes hasta ahora desconocidos.
2. La frecuencia de dichos oncogenes es lo suficientemente elevada como para incidir en la estructura genética de la población analizada.

Figura 1. Análisis mediante MDS (Multidimensional Scaling) de distancias genéticas en la población de mujeres con cáncer en Alava.


Arriba

 


Agradecimiento

1. Al Fondo de Investigaciones Sanitarias (FIS 00/0419) y la Universidad del País Vasco (UPV-EHU 004.327-EA044/99) por la financiación parcial de este trabajo, mediante sendos proyectos de investigación.
2. A Isabel Izarzugaza Lizarraga y el Registro de Cáncer del País Vasco por los datos utilizados en la validación del programa.
3. Al profesor Rodríguez Larralde de la Universidad de Caracas (Venezuela) y al Dr. Abade de la Universidad de Coimbra (Portugal), por los programas informáticos realizados en ambos centros que nos sirvieron en la validación del nuestro.

 


Arriba


Bibliografia

[1] Crow J, Mange AP. Measurement of inbreeding from the frequency of marriages between persons of the same surname. Eug. Quart. 1965; 12: 199-203.

[2] Lasker GW. A coefficient of relationship by isonymy: A method for estimating the genetic relationship between populations. Hum. Biol. 1977; 52:311-324.

[3] Relethford JH. Estimation of kinship and genetic distance from Surnames. Hum. Biol. 1988; 60: 475-492.

[4] Peña JA. Estructura demográfica y genética de la población del Valle de Orozco (Vizcaya) Siglos XVI-XX. Tesis doctoral. Departamento de Biología Animal y Genética, Universidad del País Vasco (España). 1988.

[5] Delgado Naranjo J. Estructura genética de la población de Lanciego, Mediante Isonimia (1800-1979). Tesis de licenciatura. Departamento de Biología Animal y Genética, Universidad del País Vasco (España). 1994.

[6] Rodríguez Andrés C, Delgado Naranjo J. Análisis de la estructura genética mediante Isonimia de la población afectada de cáncer ligado a BRCA1, BRCA2 y otros genes de susceptibilidad al cáncer de mama. Gac Sanit 2001; 15 (Supl 2): 95-96.

[7] Rodríguez Andrés C, Delgado Naranjo J, Izarzugaza Lizarraga I. Análisis de la estructura genética mediante Isonimia de la población de mujeres diagnosticadas cáncer ligado a BRCA1, BRCA2 y otros genes de susceptibilidad al cáncer de mama en el País Vasco. Gac Sanit 2002;16(Supl 1):118-119.

[8] STATA 7.0 User's Manual (2001). STATA Corporation. 4905 Lakeway Drive. College Station TX77845 (USA).


Arriba


Anexos

Anexo: Programas realizados en STATA® 7.0.

a. Preparación de los datos para la estimación de isonimia.

*/ P19_1 Programa dosape
*/ Preparación del fichero de trabajo de Isonimia
*/ para los casos de tener uno o dos apellidos por individuo.
*/ LOS ARGUMENTOS DEL PROGRAMA SON COMO MÁXIMO DOS VARIABLES DE TIPO STRING str:
*/ LA PRIMERA ES EL APELLIDO PATERNO (primer apellido)
*/ LA SEGUNDA ES EL APELLIDO MATERNO (segundo apellido)
*/ Crea un fichero denominado como los nombres de las variables que contengan el primer
*/ y segundo apellidos
*/ Dicho fichero contiene todos apellidos uno detras de otro en la variable _ape (str40)
*/ Además, crea dos variables: _numape orden del apellido en la persona y _obse
*/ identificación única de la persona
*/ Las variables se denominan _numape "Surname order" y _obse "Individual Number"
*/ Además crea dos ficheros que se llaman cada uno como la variable que contiene el
*/ primer apellido o el segundo apellido.

program define dosape
version 7.0
syntax varlist (max=2 min=1 string)
tokenize `varlist'
local ape1 `1'
local ape2 `2'
quietly sort `varlist'

*/ Crea la variable _obse.(ordenación segun primer apellido y segundo apellido)
quietly {
gen _obse=_n
label var _obse "Individual Number"
sort _obse
}
*/ Prepara el fichero del primer apellido (apellido del padre).
*/ Crea las Variables
*/ numape.(indica si es primer apellido o segundo apellido)
*/ ape.(cadena de 40 caracteres máximo que contiene cada uno de los */ apellidos)
quietly {
if "`ape2'"!="" {preserve}
gen str40 _ape=`ape1'
label var _ape "Surname"
gen _numape=1
label var _numape "Surname order"
drop `ape2' `ape1'

}
*/ Si existe un segundo apellido especificado en varlist
*/ Prepara el fichero del segundo apellido (apellido de la madre).
*/ Crea las Variables
*/ numape.(indica si es primer apellido o segundo apellido)
*/ ape.(cadena de 40 caracteres máximo que contiene cada uno de los apellidos)

if "`ape2'"!="" {
quietly {
save "`ape1'.dta", replace
restore
sort `ape2'
gen str40 _ape=`ape2'
label var _ape "Surname"
gen _numape=2
label var _numape "Surname order"
drop `ape1' `ape2'
}
*/ Unión de los dos ficheros de apellidos (ape1 y ape2). Todos los apellidos seguidos.
*/ Borrado de apellidos vacios.
quietly {
append using "`ape1'.dta"
sort _ape
drop if _ape==""
}
}
quietly erase "`ape1'.dta"
end
Revista Cubana de Informática Médica          Artículo de Revisión             No 2            Año 2004

b. Conversión de apellidos en indicadores numéricos.

*/ P19_2 Codificación Numérica de los apellidos.
*/ El argumento del programa es sólo una variable de tipo str
*/ El programa la procesa y convierte cada cadena en un código
*/ numérico.
*/ Las etiquetas correspondientes a cada código las guarda en un fichero de tipo do para
*/ poder utilizarlas luego.
*/ La salida es sobre el mismo fichero grabado anteriormente
*/ que contiene todos los apellidos en la variable numerica codeape
*/ "Surnames code".
*/ Elimina apellidos con código de missing

program define apeanum, eclass
version 7.0
syntax varlist (min=1 max=1 string)
tokenize `varlist'
local ape `1'
quietly {
encode `ape', gen (_codeape)
label var _codeape "Surnames code"
drop `ape'
drop if _codeape==.
}
di in yellow "1. The total number of surnames included in analysis is " _N
estimates scalar Num_Surnames=_N
quietly {
preserve
contract _codeape, f(n)
}
di in yellow "2. The number of unequal surnames is " _N
estimates scalar Unequal_Surnames=_N
save apefreq, replace
quietly {
restore
la save _codeape using "codeape.do", replace
la drop _codeape
}
end

c. Define subpoblaciones y calcula la matriz de denominadores de la Isonimia.

*/ P19_3
*/ Establece el número de poblaciones diferentes y les asigna un código (npobla).
*/ Resume el número de apellidos totales considerados en el análisis.
*/ Resume el número de apellidos diferentes en el análisis
*/ Recoge el número de apellidos en cada población, para calcular los denominadores de isonimia.
*/ En using podemos especificar el fichero donde queremos guardar los datos con los códigos de población, apellidos etc...
*/ La matriz Denomina contiene los denominadores para el cálculo de todos los coeficientes de isonimia

program define npobla, eclass
version 7.0
syntax varlist(min=1) [using/]
tempfile poblas
quietly {
sort `varlist'
preserve
contract `varlist', f(Ni)
sort `varlist'
gen npobla=_n
la var Ni "Total Number of Surnames in each Population"
la var npobla "Population Code"
}

di in yellow "3. The number of Populations included in this analysis is " _N
estimates scalar Num_populations=_N
quietly {
local matsiz=_N
if _N>39 {
if _N<=800 {set matsize `matsiz'}
else {di in red "Matrix is too big. Not enough matsize 800" eror 908 exit}
}
mkmat Ni, matrix(N)
mat Denomina=N*N'
forv i=1(1)`matsiz' {
mat Denomina[`i',`i']=Denomina[`i',`i']-N[`i',1]
}
estimates matrix P_Ni N
estimates matrix Denom_Isonymy Denomina
save poblas, replace
sort npobla
}
di in yellow "4. Population description, code (npobla) and size (It will be saved in file -poblacode.dta-)."
list `varlist' npobla Ni
quietly {
save poblacode, replace
restore
merge `varlist' using poblas, update
drop _merge
}
if "`using'"!="" {save "`using'", replace
di in yellow "Data will be saved in file -`using'- "}
end


d. Cálculo Isonimia y Parentesco Regional.

*/ P19_4_2
*/ Cálculo del valor R o coeficiente de Isonimia esperada regional.
*/ Sintaxis: R_Isonymy varnameofsurnames
*/ La variable es de tipo numérico, es la variable que contiene el código
*/ numérico de apellido.
*/ Estima la probabilidad de presentar cada apellido diferente en la región.
*/ En using puede especificarse el nómbre del fichero donde se guardaran los
*/ datos
*/ para calcular R y las probabilidades de los apellidos.
*/ La salida está en los siguentes macros globales:
*/ e(R_numerator), e(R_denominator),
*/ numero de apellidos e(NI) y R e(R_Regional_Random_Isonymy).
*/ y el coeficiente de parentesco regional e(Regional_kinship)

program define R_Isonymy, eclass
version 7.0
syntax varlist (min=1 max=1 numeric) [using/]
quietly {
sort `varlist'
preserve
contract `varlist', f(nk)
la var nk "Number of ocurrences for each Surname (k) in region"
sort `varlist'
gen nk_1=nk-1
la var nk_1 "Number of ocurrences for each Surname (k) minus 1"
gen nk_by_nk_1=nk*nk_1
la var nk_by_nk_1 "Elements of R's numerator"
gen sum_nk_by_nk_1=sum(nk_by_nk_1)
la var sum_nk_by_nk_1 "Sum of elements of R's numerator from each Surname (k)"
gen frec_acum=sum(nk)
la var frec_acum "Cumulate frecuency of surnames"
gen probability=nk/frec_acum[_N]


la var probability "Probability of k (codeape) surname in Region"
}
estimates scalar R_numerator=sum_nk_by_nk_1[_N]
estimates scalar R_denominator=frec_acum[_N]*(frec_acum[_N]-1)
estimates scalar R_Random_Isonymy=sum_nk_by_nk_1[_N]/(frec_acum[_N]*(frec_acum[_N]-1))
estimates scalar Regional_kinship=e(R_Random_Isonymy)/4
la data "For estimate R and probability of each Surname in the Population"

di in yellow "5. Numerator of (R) Regional Random Isonymy Coeficient: " e(R_numerator)
di in yellow "6. Denominator of (R) Regional Random Isonymy Coefici.: " e(R_denominator)
di in yellow "7. Value of (R) Regional Random Isonymy Coeficient : " e(R_Random_Isonymy)
di in yellow "8. Value of Regional kinship (R/4) : " e(Regional_kinship)
if "`using'"~="" {save "`using'", replace
di in yellow " Elements of numerator of R and probability of each surname will be saved in file -`using'-"
}
quietly restore
end

e. Matrices de Isonimia esperada, parentesco y distancia genética.


*/ P19_6
*/ Calcula el número de apellidos iguales en cada población en el fichero de */ datos cargado en memoria.
*/ La sintaxis del comando es: IsoNum varlist
*/ Sólo se pueden especificar dos variables de tipo numérico en varlist: La
*/ primera es la que establece las poblaciones.
*/ La segunda es la que establece el código de apellido

program define IsoNum, eclass
version 7.0
syntax varlist(min=2 max=2 numeric)
local NP=e(Num_populations)
local NS=e(Num_Surnames)
tempfile principal secundario
quietly {
if _N>10 & _N <=800 {set matsize `NP'}
mat Ni=e(P_Ni)
mat Denomina=e(Denom_Isonymy)
tokenize `varlist'
local popul `1'
local apell `2'
mat Numerators=J(`NP',`NP',0)
mat Isonymy=J(`NP',`NP',0)
mat Gen_dist1=J(`NP',`NP',0)
mat Gen_dist2=J(`NP',`NP',0)
sort `varlist'
contract `varlist', f(nik)
sort `varlist'
la var nik "Frecuency of each Surname in each Population"
preserve
}
quietly {
forvalues i=1(1)`NP'{
restore
preserve
keep if `popul'==`i'
sort `apell'
save principal, replace
forvalues j=1(1)`NP'{
restore
preserve
keep if `popul'==`j'


if `i'==`j' {replace nik=nik-1}
rename nik nik_1
sort `apell'
save secundario, replace
merge `apell' using principal
gen nkibynkj=nik*nik_1
gen sumnkibynkj=sum(nkibynkj)
scalar numerador=sumnkibynkj[_N]
mat Numerators[`i',`j']=numerador
mat Isonymy[`i',`j']=Numerators[`i',`j']/Denomina[`i',`j']
}
}
forvalues i=1(1)`NP'{
forvalues j=1(1)`NP'{
mat Gen_dist1[`i',`j']=Isonymy[`i',`i']+Isonymy[`j',`j']-(2*Isonymy[`i',`j'])
mat Gen_dist2[`i',`j']=((Isonymy[`i',`i']-Isonymy[`i',`j'])^2)+((Isonymy[`j',`j']-Isonymy[`i',`j'])^2)
}
}
mat w=Ni/`NS'
mat Pri_parent=Isonymy/4
mat dia=vecdiag(Pri_parent)
mat F=dia*w
mat dia=dia'
mat Iso_i=vecdiag(Isonymy)
mat Iso_i=Iso_i'
restore
drop _all
set obs `e(Num_populations)'
svmat double Numerators
la data "Numerators of Isonymy Matrix"
save Numer_Isonymy_Matrix, replace
drop _all
set obs `e(Num_populations)'
svmat double Denomina
la data "Denominators of Isonymy Matrix"
save Denomina_Isonymy_Matrix, replace
drop _all
set obs `e(Num_populations)'
svmat double Isonymy
la data "Isonymy Matrix"
save Isonymy_Matrix, replace
drop _all
set obs `e(Num_populations)'
svmat double Iso_i,names(Iso_ii)
svmat double dia, names(Kinship_ii)
mat Z_ZZ=e(P_Ni)
svmat double Z_ZZ, names(Ni)
la data "Isonymy, Prior kinship diagonal vectors and Size of Populations"
save Isonymy_vector, replace
drop _all
set obs `e(Num_populations)'
svmat double Gen_dist1
la data "Genetic Distances Matrix 1 [d^2=Isonymy(i,i)+Isonymy(j,j)-2*Isonymy(i,j)]"
save Gen_dist1, replace
drop _all
set obs `e(Num_populations)'
svmat double Pri_parent
la data "A priori kinship matrix"
save Apri_parent, replace
drop _all
svmat double Gen_dist2
la data "Euclidean Genetic Distances Matrix 2 [d^2=((Isonymy(i,i)-Isonymy(i,j))^2)+((Isonymy(j,j)-Isonymy(i,j))^2)]"
save Gen_dist2, replace
}
estimates matrix Num_Isonymy Numerators
ates matrix Denom_Isonymy Denomina
estimates matrix Isonymy Isonymy
estimates matrix Isonymy_diag Iso_i
estimates matrix Gen_distances1 Gen_dist1
estimates matrix Gen_distances2 Gen_dist2
estimates matrix Apri_parent Pri_parent
estimates matrix Apri_parent_diag dia
estimates scalar Fst=F[1,1]
end

Arriba

 

WWW:CECAM.SLD.CU