|
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. 
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.
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).

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
|