# Introduction to BLUPF90 software suite
Docente: Prof. Dra. Daniela Lourenço
Date: 16-17/11/2022
Discente: Larissa Graciano Braga
**BLUPF90 é uma coleção de programas**
Programas para calcular a variância para depois fazer o BLUP (Equação de modelos mistos)
Fortran: melhor linguagem para cálculo -> ainda é utilizado e está sendo "atualizado"
### Main developers
Misztal - criou
Shogo Tsuruta - veio depois do misztal e foi responsável por muitos programas da família
Andres Legarra
Ignacio Aguilar: UY
Yutaka Masuda: atualmente melhor prog
Matias Bermann
## Programas
blupf90 - resolve eq de modelos mistos
remlf90 - resolve covariâncias
airemlf90 - average (libera standar erros, mais usado que EM)
gibbsXf90 - componentes var usando bayesiana
thrgibbsXf90 - para caract não linear, para modelos de threshold
Genomic:
preGS e qc: controle de qualidade, qcf90 é mais eficiente
postGSf - estima valor SNP e faz GWAS
predf90 - pega o efeito de SNP e calcula valor gen genomico
seekparent - checa parentesco, procura pais genotipados para filhos com divergência o parentesco
predictf90 - calcula fenótipo ajustado pelos efeitos fixos
> Input
Todos precisam de arquivo de parâmetros, exceto qcf90
Renumerar os efeitos de 1 até n
- Atualizações (2022?):
blupf90+: junção do blupf90, remlf90, airemlf90
gibbsf90+: junção dos gibbsXf90 e thrgibbsXf90
# Dia 1
## RENUMF90
Renumbers data and pedigree
Creates a par file for blupf90 family
Traces back pedigree for individuals in the data
Para cada animal com fenótipo ou genótipo e rastreia 3 gerações para trás
number of generations (default): 3 back
Performs comprehensive pedigree checks - checa se id de dam e sire é igual
Xref file
Xref id - nova id para os animais genotipados e outra column com
Não renumera arquivo de SNP
Computes inbreeding by default (v>= 1.157)
- Suports
Multiple traits, cria pai fantasma, calc covariâncias
- Input
Arquivo txt separado por espaço, não pode ter comentário (#)
Se tiver info desconhecida sobre dam e sire deve colocar 0 (00 é lido como id de algum animal)
Arquivo parâmetro: características
palavras-chave: DATAFILE (em baixo coloca o nome do arquivo de dados), TRAITS (qual coluna esta a caracteristica), FIELDS_PASSED TO OUTPUT (numero de colunas que vao ser printadas no output), WEIGHT(S) (pesos para var residual - quase n usa isso), .,
EFFECT: uma palavra effect para cada efeito do seu modelo, coloca o numero da coluna que esta o efeito. Ai vc coloca junto: cross (alpha ou number) ou cov
NESTED (aninhar covariavel):coloca a coluna do efeito e também coloca: alpha ou number
- Output
inbreding,
arquivo de dados .dat
arquivo de pedigree renaddxx.ped (renumbered pedigree statistic - xx é o numero do efeito)
arquivo de parâmetros
> exemplo modelo fixo:
DATAFILE
data1.txt
TRAITS
5
FIELDS_PSASSED TO OUTPUT
2 3
WEIGHT(S)
RESIDUAL VARIANCE
1.0
EFFECT
2 cross alpha
EFFECT
3 cross number
EFFECT
4 cov
RANDOM: diagonal (qnd n é correlacionado) ou animal (efeito aleatorio correlacionado entre animais)
OPTIONAL: pe (E permanente) ou mat (maternal) ou mpe (efeito permanente materno - only if mat is used)
keywords afeter RANDOM
FILE: nome do arquivo de pedigree
FILE_POS: ani sire dam alternate_dam yob
SNP_FILE: nome do arquivo de SNP (formato do arquivo de SNP: ID 0111221212122)
PED_DEPTH: default 3 (0 para usar todo mundo, mas nao recomenda usar pelo custo computacional)
GEN_INT: ela n usa, prediz idade dos pais com base do intervalo geração
REC_SEX: fenótipo limitados pelo sexo
UPG_TYPE: yob, in_pedigrees, groups_unisex, group_sex
para pais fantasma (metafounders) - se n tiver pais, vai regredir o VGE para a base da população (inicio do MGA)
Para estimar metafounders: min 1000 fenotipos para cada metafounder - nao usar se banco de dados pequeno
Designar pais com base no ano
INBREEDIN: pedigree, file
Six methods: opção 1 default, opção 6 é a mais rápida (para um numero MUITO grande de dados)
RANDOM_REGRESSION: data
RR_POSITION
(CO)VARIANCES: valor das cov (matriz nxn)
direto | cov direto, materno
cov direto, materno | materno
(CO)VARIANCES
...
COMBINE: combina coluna, deve ser a primeira palavra-chave
7 2 3 4 - coluna nova 7, combinando as col 2 3 e 4
OPTION sol_se (antigo)
OPTION use_yams (recomenda, mais rápido!!!)
Exemplo modelo mistos:
> EFFECT
2 cross alpha
RANDOM
(CO)VARIANCES
0.5
EFFECT # quarto efeito: animal
1 cross alpha
RANDOM
animal
FILE
ped1.txt
FILE_POS
1 2 3 0 0 0
(CO)VARIANCES
0.5
renadd1.ped
colums 4: código com numero grande pra ser usado depois - n preocupe com essa coluna
Problemas: erros de digitação, cov quadrática (crie uma coluna nova com o valor quadratico)
Quando usar renumf90: sempre
Como comparar modelos:
Começa com renumf90 pelo modelos mais complexos
E depois vc retira os efeitos e faz os modelos mais simples
Se quiser retirar animais: retira a linha depois do renumf90
- Quick trick
`renumf90 --help`
`renumf90 --show_template`
## BLUPF90+
combina bulp90, aireml e reml
Default: MME
Se quiser calcular variancia: use `OPTION method VCE`
Gera erro-padrão
Para rodar EM REML - expectation maximization
`OPTION method VCE`
`OPTION EM-REML -1000` (*coloque um numero alto negativo - só para ele soltar valor EM, se colocar positivo ele solta AI*)
Soluções por vários métodos:
PCG: (tenta achar matriz similar a inversa - diagonal da left-hand side)
Para modelo de multicaract use OPTION blksize X (X é o numero de caract do modelo)
SOR:
Inversa pela decomposição de Cholesky: YAMS (reocmendável) ou FSPAK
OPTION use_yams
- arquivo parametro gerado pelo RENUMf90
RANDOM_GROUP
num de efeitos
RANDOM_TYPE
add_an_upginb
Outras opções para dados perdidos (dados, n é pedigree): OPTION missing -999
Calcula reliabilities: `OPTION store_accuracy X` (**X** é o numero do efeito animal)
Nova opção: salva solução com id original no arquivo solutions.original
`OPTION origID`
Problema: NaN tem arquivo pedigree ou data errado
- 2 algoritmos REML: AI e EM
EM REML (iterativo):
1. Coloca valor inicial de variancia,
2. Computa sol
3. Atualiza componentes de variancia (C^uu)
4. Volta para 1
AI-REML (também iterativo)
Estima erro padrão das estimativas e herdabilidades
Alto custo computacional, mais rápido que EM
Compensa começar em com EM e depois passar para A`I OPTION method VCF`; `OPTION EM-REML 10`)
> Problema:
-N converge
Chuta valores muito maiores ou muito menores
-N converge com AI, mas converge com EM
Rode EM com valor menor
blupf90+ --help
## se_covar_function
https://nce.ads.uga.edu/wiki/doku.php?id=readme.aireml
`OPTION se_covar_function label G_eff1_eff2_trt1_trt2 e R_trt1_trt2`
- EXEMPLO (a id do animal esta na col 4)
```
TRAITS #coluna característica
3 4 5
...
EFFECT
2 cross alpha #EFEITO DE GC # numero da coluna
EFFECT
4 cross alpha #efeito fixo IPP # tudo eh pela coluna,
EFFECT
5 cross alpha #efeito fixo PAC
EFFECT
1 cross alpha #animal, o quarto efeito
RANDOM
animal
...
OPTION se_covar_function H2ipp G_4_4_1_1/(G_4_4_1_1+R_1_1) #herdabilidade posição do animal na 4 (ver efeito do modelo), 1 caracteristica (olhar o TRAITS, se duas: 2_2)
#OPTION se_covar_function RG_ipp_carS G_4_4_1_2/(G_4_4_1_1*G_4_4_2_2)**0.5 # 4 eh o animal (ver efeito modelo), 1_2 correl entre caract 1 e 2 (1 comando para cada tipo de correl X e Y, X e W, Y e W), var dar caract 1 (G_4_4_1_1) vzs var da caract 2 (G_4_4_2_2) (olhar o TRAITS - eu defini que a caract 1 estah na col2, a caract 2 estah na col4 e a caract 3 estah na col5
#OPTION se_covar_function RG_ipp_carG G_4_4_1_3/(G_4_4_1_1*G_4_4_3_3)**0.5
```
>Examples
OPTION se_covar_function P G_2_2_1_1+G_2_3_1_1+G_3_3_1_1+G_4_4_1_1+R_1_1
OPTION se_covar_function H2d G_2_2_1_1/(G_2_2_1_1+G_2_3_1_1+G_3_3_1_1+G_4_4_1_1+R_1_1)
OPTION se_covar_function H2t (G_2_2_1_1+1.5*G_2_3_1_1+0.5*G_3_3_1_1)/(G_2_2_1_1+G_2_3_1_1+G_3_3_1_1+G_4_4_1_1+R_1_1)
OPTION se_covar_function rg12 G_2_2_1_2/(G_2_2_1_1*G_2_2_2_2)**0.5
-The first function calculates the SD for the total variance for a maternal model with permanent maternal effect, where 2 and 3 are the effect number for the direct and maternal additive genetic effects respectively, and 4 is the effect number for the maternal permanent random effect.
-The second function calculates the heritability for the direct component.
-The third function the total heritability.
-The fourth function calculates the SD of the genetic correlation between traits 1 and 2 for the direct genetic effect (effect number 2)
## gibbsf90+
gibbsXf90
thrgibbsXf90
Numerar categoria de 1 a 5
OPTION cat 0 2 5
`gibbsf90+ parfile.par --samples i --burnin j --interval k`
Burnin: só calcula estatisticas após j amostras, porque a estimativa varia muito (n dá pra confiar)
Interval: a cada 10 amostras, grava 1
gibbsf90: estima covariancias, primeiro vc coloca burnin 0, daí olha o gráfico e decide até quando vai burnin
postgibbsf90: coloca valor burnin
Roda novo gibbsf90+ com novos componentes variância para estimar VG
Modelo Linear ou de treshold? Daniela prefere linear
Daniela: Pode estimar variancias pelo gibbs e rodar o BLUP, n tem problema
Opção para evitar perda por queda de energia: OPTION save_halfway_samples n
Quick trick:
`gibbsf90+ --help`
gibbsf90+ para genomic data:
Rode renumf90 com OPTION animal_order genotypes
Rode gibbsf90+ com OPTION
Problemas comuns:
posição errada, formato
Mispelling, (co)variance matrices not symmetric
output printed on the screen is not saved to any file: you should use direction or pipes to store output
renumf90
rnumf90 renum.paz | tee .log
Background - rodar em bckground
Matriz Z:
Z = M - 2p
p é a MAF; Z é a matriz de genótipo id 012120102102
G = ZZ'/ 2Ep(1-p)
ZZ'= pega a Z e multiplica pela transposta para a gente ter o relacionamento genômico entre animais ("
soma dos SNP")
Relacionamento genomico: cov entre animais
Genomica dá relacionamento observado entre inidividuos
Se LD for alto, vou conseguir uma boa informação com os SNP. Como se usa muitos SNP, temos bons aproximadores do parentesco verdadeiro
A - identico por descendencia
G - identico por estado
Precisamos inverter G
Mas n consegue quando o número de animais > numero de SNP (porque tem dependências lineares)
Como resolver: blending (para aumentar a diagonal) combino a matriz G com uma proporção da matrix A ou com uma identidade
G*= 0.95G + 0.05A
G* = 0.95 + 0.05I
alpha beta
Blending é equivalente ao resíduo poligênico
#### NEM TODOS OS ANIMAIS SÃO GENOTIPADOS
Se fosse, era só pra usar o GBLUP. Mas não é assim!
Podemos dividir a A (matriz de parentesco dos animais)
a11 (n genotipados) a12 (genotipados e nao genotipados)
a21 (igual a a12) a22 (genotipados)
Vc pode substituir/combinar a22 com G -> H
Single step GBLUP (ssGBLUP) usa a H
- Correlação entre G e A
Deve estar entre 0.7-0.9 (mais ou menos do que isso deve ser erro - no pedigree ou nos seus dados)
Importante para saber se incluir genômica vale a pena ou não. Ou para detectar erros
Na H inversa subtrai a a22 pra evitar duplicidade de informação
Tunning: colocar G e a22 na mesma base.
O blupf90: corrige G para ter a mesma média de elementos e diagonal para a22
## SNP QC
preGSf90 faz controle de qualidade genômica (blupf90+ faz tbm, mas n salva arquivo) e cria e inverte A e G
Computa stats
H-1 = A-1 + 0 0
0 G-1a22
Preds salva arquivo "GimAssi" que contem G-1a22
`OPTION SNP_FILE marker.geno` (no renumf90 SNP_FILE e em baixo marker.geno)
`OPTION map_file file.map`
Formato: com header
O predsf90 faz QC e inverte as matrizes G e A automaticamente (demanda tempo e processamento). Se vc quiser só fazer QC use algumas options
OPTION whichfreq x
1 0.5 (p/ metafounders)
- Tuning
OPTION tunedG 2
- Population structure
OPTION plot_pca
OPTION extra_info_pca
(para raças diferentes)
Constrói a G usando VanRaden (2008), a22 usando Colleau (2002) e A-1 pelo método henderson e quatis(?)
Atividade
`ulimit -s unlimited` # para liberar memória
```
curl http://nce.ads.uga.edu/wiki/lib/exe/fetch.php?media=lab1_ufv.zip -o lab1.zip
renumf90 --show-template
```
#montar cartão de parâmetros usando os arquivos do lab1 (nao colocar espaços, excepcionalmente apos FIELDS.. e WEIGHT(S))
```
DATAFILE
data3.txt
TRAITS
4
FIELDS_PASSED TO OUTPUT
1
WEIGHT(S)
RESIDUAL_VARIANCE
0.6
EFFECT
3 cross alpha # efeito de sexo
EFFECT
1 cross alpha # efeito de animal
RANDOM # estou informando que a col 1 é o efeito aleatório
animal
FILE
ped3.txt
FILE_POS
1 2 3 0 0
SNP_FILE
snp3.2k
PED_DEPTH
3
(CO)VARIANCES
0.4 # dado no exercicio, na vrdd e so a variância pq é só uma caract
```
Linha de comando: `renumf90 my.par | tee renumf90.log &`
- Exercicio 3
What is the content of snp3.2k_XrefID?
Nova id e id original dos animais que foram genotipados
- Exercício 4
Uso o renf.par para rodar o preGSf90
```
# BLUPF90 parameter file created by RENUMF90
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
2
OBSERVATION(S)
1
WEIGHT(S)
EFFECTS: POSITIONS_IN_DATAFILE NUMBER_OF_LEVELS TYPE_OF_EFFECT[EFFECT NESTED]
2 2 cross
3 12010 cross
RANDOM_RESIDUAL VALUES
0.60000
RANDOM_GROUP
2
RANDOM_TYPE
add_an_upginb
FILE
renadd02.ped
(CO)VARIANCES
0.40000
OPTION SNP_file snp3.2k
OPTION map_file mrkmap.txt
OPTION saveCleanSNPs
OPTION msg 100
```
Linha de comando: `preGSf90 renf90.par | tee preGSf90.log &`
Which quality checks for both SNP and animals were
done by default?
Call rate, MAF, Monomorphic SNP, mendelian conflicts
> Quality Control - SNPs with Call Rate < callrate ( 0.90) will removed: 0
Quality Control - SNPs with MAF < minfreq ( 0.05) will removed: 82
Quality Control - Monomorphic SNPs will be removed: 0
Quality Control - Removed Animals with Call rate < callrate ( 0.90): 0
Quality Control - Check Parent-Progeny Mendelian conflicts
Are there any duplicated genotypes?
2 animais: 2024 (old ID = 2966) e 2020 (old ID =8818)
> Possible genotype duplicates samples
i-j number of sample , i-j renumber Id, G(i,j), G(i,i), G(j,j), r(i,j)
2024 2020 2966 8818 1.0653 1.0653 1.0653 1.0000
What is the correlation between G and A22?
> Correlation all elements G & A 0.780
Check averages of G and A22
G: 0.992 e A22: 1.02
> Statistic of Genomic Matrix
N Mean Min Max Var
Diagonal 2024 0.992 0.816 1.358 0.004
Off-diagonal 4094552 -0.000 -0.234 1.065 0.007
- Exercicio 5
```
# BLUPF90 parameter file created by RENUMF90
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
2
OBSERVATION(S)
1
WEIGHT(S)
EFFECTS: POSITIONS_IN_DATAFILE NUMBER_OF_LEVELS TYPE_OF_EFFECT[EFFECT NESTED]
2 2 cross
3 12010 cross
RANDOM_RESIDUAL VALUES
0.60901
RANDOM_GROUP
2
RANDOM_TYPE
add_an_upginb
FILE
renadd02.ped
(CO)VARIANCES
0.36197
#OPTION map_file mrkmap.txt
#OPTION SNP_file snp3.2k
#OPTION saveCleanSNPs
#OPTION no_quality_control
OPTION createGInverse 0
OPTION createA22Inverse 0
OPTION createGimA22i 0
OPTION use_yams
OPTION method VCE
OPTION se_covar_function H2_1 G_2_2_1_1/(G_2_2_1_1+R_1_1)
OPTION sol se
#OPTION EM-REML -200 # para rodar EM-REML retirar hashtag, o valor deve ser negativo mesmo
OPTION origID
OPTION msg 100
#OPTION store_accuracy 2
```
Estimativa de tempo que rodou `time blupf90+ renum.par | tee blupf90_BLUP_AIREML.log`
Tempo para BLUP AIREML
```
* FINISHED (BLUPF90): 11-17-2022 13h 18m 41s 612
real 0m2.253s
user 0m11.264s
sys 0m1.071s
```
Verificar as variâncias e rodar novamente com os valores corrigidos
```
Final Estimates
Genetic variance(s) for effect 2
0.36197
Residual variance(s)
0.60901
```
Após, corrigir os campos de `RANDOM_RESIDUAL VALUES` com 0.60901 e `(CO)VARIANCES` com 0.36197
Rodar para EM-REML
Como? retirando hashtag da option em-reml, verificar o número de rodadas, se você colocou 20 e o programas iterou 22 vezes, você vai precisar aumentar o valor de iterações - no exemplo da aula, primeiro colocaram 20 ai o blup rodou 26 vezes, dai foram ajustando o numero de iterações para EM-REML até ficar suficiente
Como vejo o round?
```
-2logL = 26900.7548501640 : AIC = 26904.7548501640
In round 1 convergence= 9.069627257756786E-013
round 1
new r
0.60901
new G
0.36197
```
Eu quero ver - situação ideal: `At round: 1 Converge in fewer rounds than EM-REML rounds: 200`
Rodando o EM-REML: `time blupf90+ renf90.par | tee blupf90_BLUP_EM-REML.log`
```
* FINISHED (BLUPF90): 11-17-2022 14h 00m 36s 518
real 0m2.308s
```
- Exercicio 6
Retirar a hashtag da OPTION store_accuracy 2
Fazer isso para ssGBLUP (retirar hashtag relacionadas a SNP), e BLUP (options relacionadas a snp com #)
ssGBLUP
```
# BLUPF90 parameter file created by RENUMF90
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
2
OBSERVATION(S)
1
WEIGHT(S)
EFFECTS: POSITIONS_IN_DATAFILE NUMBER_OF_LEVELS TYPE_OF_EFFECT[EFFECT NESTED]
2 2 cross
3 12010 cross
RANDOM_RESIDUAL VALUES
0.60000
RANDOM_GROUP
2
RANDOM_TYPE
add_an_upginb
FILE
renadd02.ped
(CO)VARIANCES
0.40000
OPTION SNP_file snp3.2k_clean
OPTION no_quality_control
#OPTION saveCleanSNPs
OPTION use_yams
#OPTION method VCE
OPTION se_covar_function H2_1 G_2_2_1_1/(G_2_2_1_1+R_1_1)
#OPTION EM-REML -200
OPTION origID
OPTION msg 100
OPTION sol se
OPTION store_accuracy 2
```
Acurácias no arquivo `acc_bf90`
Como ler o solutions:
```
trait effect level(new id) original solution s.e
1 1 1 media_para_efeito1 se_mediano_para_efeito1
1 2 2 media_para_efeito1 se_mediano_para_efeito1
1 1 1 animail 1 se para o animal 1
... n n animal n se para o animal n
```
# Dia 2
## Validação
Para comparar modelos! e ver quão benéfica a seleção genômica é
Método estatíco: validação por Prediction (validation) accuracy
Aqui temos um valor para toda a população
Sinonimos: vários
Theoretical accuracy - 1 acurácia de cada animal
Sinonimo: reliability
### Theoretical accuracy
Fala quanto os dados vão mudar após incluir mais info. É uma por indivíduo e é baseada no modelo
Baseada no PEV: variância do erro de predição (na formula do pev tem standard erro)
Aumenta quando a gnt aumenta a quantdade de info de um animal
Acurácia: 0.05. Possible change: 2.49
Possible change: intervalo de confiança 95% = `EBV +- 1.96 * standard error`
Reliability != BIF accuracy != accuracy -> muda raiz quadrada e 1- na fórmula delas
BIF é a que penaliza mais
Leite: a maioria dos touros tem muitas filhas, aí para que muitos animais não tenham alta acurácia, eles não usam a raiz quadrada na fórmula
### Prediction accuracy
Correlação entre TBV e EBV.
Um valor único para a população
A gnt calcula acurácia com e sem genômica pra ver se vale a pena
Accurary = cor(benchmark, u^)
Benchmarl: ponto de referência que pode ser progeny yield deviation (leite), deregressed EBV (leite, boars), progeny yield deviation (boars), adajusted phenotypes (beef, pig, aves ...)
Como: grupo training e grupo validation
Benchmark: uso toda info de pedigree, P e G
Para calc GEBV e EBV:reduced data, training data (inicio-intervalo de geração) e validation data (intervalo de geração-ultimo dado)
ex: inicio-2013 e 2013-2017
Macho tem que ter, pelo menos, 10 filhas nos dados completos e, no mín, 100 touros
dEBVcomplete = b0 + b1 * EBVreduzido
dEBVcomplete = b0 + b1 * GEBVreduzido
b0= bias, viés de nível; b1: viés de dispersão; R2
nós esperamos que: R2(GBEV) > R2(EBV); b0(GBEV) e b0(EBV) qual é mais próximo de 0; b1(GBEV) e b1(EBV) qual é mais próximo de 1
Se b1<1, meu (G)EBV está inflacionado. Se b1>1, meu (G)EBV está deflacionado
Dispersão: olhar dispersão dos (G)EBV dos animais jovens pq se estiverem muito dispersos ou pouco dispersos a sua "régua" de seleção pode incluir ou excluir animais, respectivamente, de forma errada
Adjusted phenotypes benchmark
Predictive ability of (g)EBV = cor (Yadj, (G)EBVreduced)
- Linear Regression metrics
paper: Legarra e Reverter
New method: está sendo mais usado
Reduced and complete data
Mesma divisão dos dados que os métodos anteriores (validation animals have phenotypes in the complete data but not in the reduced data)
Benchmark: complete (G)EBV
Compares EBV with EBV e GEBV com GEBV
Como? vai lá no renf90 e corta os dados de 4 anos atrás e procura os touros que podem participar dessa validação
A acurácia que eles estão usando é a mais simples
Se Cor(GEBVcompleto, GEBVreduzido) = 0.80 e Cor(EBVcompleto, EBVreduzido) = 0.58 -> o GEBV é um bom preditor
- Exercício 7
GEBV:
cd ssGBLUP
Linha de comando: `renumf90 my_ssGBLUP.par | tee renumf90_ssGBLUP.log &`
```
DATAFILE
../data3.txt
TRAITS
4
FIELDS_PASSED TO OUTPUT
1 2
WEIGHT(S)
RESIDUAL_VARIANCE
0.6
EFFECT
3 cross alpha
EFFECT
1 cross alpha
RANDOM
animal
FILE
../ped3.txt
FILE_POS
1 2 3 0 0
SNP_FILE
../snp3.2k
PED_DEPTH
3
(CO)VARIANCES
0.4
```
`awk '$4!=5' ../renf90.dat > renf90.dat.reduced` # coloquei 5 pq tem uma coluna a mais no meu (a de id original)
Cartão reduzido
```
# BLUPF90 parameter file created by RENUMF90
DATAFILE
renf90.dat.reduced
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
2
OBSERVATION(S)
1
WEIGHT(S)
EFFECTS: POSITIONS_IN_DATAFILE NUMBER_OF_LEVELS TYPE_OF_EFFECT[EFFECT NESTED]
2 2 cross # efeito de sexo
3 12010 cross # efeito de animal
RANDOM_RESIDUAL VALUES
0.61222 # valor calculado nos exercicios anteriores
RANDOM_GROUP
2 # o efeito aleatorio é o segundo efeito
RANDOM_TYPE
add_an_upginb
FILE
renadd02.ped
(CO)VARIANCES
0.35532 # valor calculado nos exercicios anteriores
OPTION SNP_file ../snp3.2k
OPTION use_yams
#OPTION method VCE
OPTION se_covar_function H2_1 G_2_2_1_1/(G_2_2_1_1+R_1_1)
#OPTION EM-REML -200
OPTION origID
OPTION msg 100
OPTION sol se
OPTION store_accuracy 2 # vai guardar o efeito 2
```
`blupf90+ renf90.par | tee blupf90_ssGBLUP_partial.log`
Mudando o nome do arquivo para manter separado (n sobrescrever)
`mv solutions_ssGLUP_reduced.orig solutions_ssGLUP_partial.orig`
- EBV
Cartão de paramentros para BLUPF90 para EBV, sem genômica
```
# BLUPF90 parameter file created by RENUMF90
DATAFILE
renf90.dat.reduced
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
2
OBSERVATION(S)
1
WEIGHT(S)
EFFECTS: POSITIONS_IN_DATAFILE NUMBER_OF_LEVELS TYPE_OF_EFFECT[EFFECT NESTED]
2 2 cross
3 12010 cross
RANDOM_RESIDUAL VALUES
0.68990
RANDOM_GROUP
2
RANDOM_TYPE
add_an_upginb
FILE
renadd02.ped
(CO)VARIANCES
0.36200
#OPTION SNP_file ../snp3.2k
#OPTION no_quality_control
OPTION use_yams
#OPTION method VCE
OPTION se_covar_function H2_1 G_2_2_1_1/(G_2_2_1_1+R_1_1)
#OPTION EM-REML -200
OPTION origID
OPTION msg 100
OPTION sol se
OPTION store_accuracy 2
```
`blupf90+ renf90.par | tee blupf90_BLUP_partial.log`
Mudando o nome para saber
`mv solutions.orig solutions_BLUP_partial.orig`
NÃO FIZ: Calculando a correlação entre os EBV e GEBV dos animais da 5 geração com os seus respectivos TBV
```
> getwd()
> partial=read.table("partial/solutions.orig", header=T)
> whole=read.table("complete/solutions.orig", header=T)
# Correlação entre partial e completo
> cor.test(partial$solution, whole$solution, method="pearson")
Pearson's product-moment correlation
data: partial$solution and whole$solution
t = 315.35, df = 12010, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.9426269 0.9464820
sample estimates:
cor
0.944587
# Correlação entre TBV e completo apenas para a quinta geração
```
- Exercício 8
Fazer como na vida real, a gnt nao sabe o TBV
renumf90 roda 1x # só uma vez para comparar modelos, se vc rodar o renum em várias pastas vai dar ruim pq o renum renumera de forma diferente
blupf90 roda 4x
Comparar no LR:
BLUP: EBVpartial, EBVwhole
ssGBLUP: GEBVpartial, GEBVwhole
~~Curiosidade: Cartão de parâmetros do mateus BLUP~~
```
# BLUPF90 parameter file created by RENUMF90
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
2
OBSERVATION(S)
1
WEIGHT(S)
EFFECTS: POSITIONS_IN_DATAFILE NUMBER_OF_LEVELS TYPE_OF_EFFECT[EFFECT NESTED]
2 2 cross
3 12010 cross
RANDOM_RESIDUAL VALUES
0.60000
RANDOM_GROUP
2
RANDOM_TYPE
add_an_upginb
FILE
renadd02.ped
(CO)VARIANCES
0.40000
OPTION SNP_file snp3.2k
OPTION map_file mrkmap.txt
#OPTION saveCleanSNPs
OPTION use_yams
OPTION method VCE
OPTION se_covar_function H2_1 G_2_2_1_1/(G_2_2_1_1+R_1_1)
OPTION EM-REML -200
OPTION origID
OPTION msg 100
```
## GWAS
O que é a matriz W?
#### SNP-BLUP
Z* a = u
> Matrix Z: animal por SNP
a: efeito de SNP (calculado pelo postGSf90)
u = vetor de DGV
Se Z = 2000 animais * 50k SNPs e a = 50000 * 1
u = 2000 * 1, ou seja, o valor genômico para cada animal
GBLUP e SNP-BLUP são equivalentes pq a variância dos modelos é igual
Slide: SNP effects in ssGBLUP
alfa=blending (0.95 * 0.05, da aula do dia 1)
b = coef de tunning
Regressão para obter valor de SNP
Posso fazer indirect prediction e GWAS com isso aqui de cima
GWAS
Onde colocar a barra de treshold (acima da barra é significante)? Correção de Bonferroni é 0.05/nº SNP
Pq -logPvalue? O valor de log é pq os valores ficam muito pequenos (0.0000002). Também pode colocar a variância explicada pelo SNP
##### Indirect prediction (IP)
DEP-interina
Se for comparar IP e GEBV - precisa colocar na escala de pedigree, para ter a mesma base genética dos animais da avaliação
Rodar blupf90 e salvar os arquivos limpos - OPTION saveGInverse + OPTION
Rodar postGSf90 : option use inverse... e com o mapa de SNP
Output:
snp_sol col 7, peso dos SNP
predf90: arquivo de SNP dos novos animais para fazer a predição, é o mesmo que o arquivo limpo
roda só linha de comando `predf90 --snpfile newgen.txt --use_mu_hat` # mu para ficar na mesma base do GEBV
##### GWAS
Remove estrutura para parentesco, uma regressão para cada SNP
Métodos current (p/ humano) n funciona por causa das nossas limitações
dEBV: projeta P das filhas no touro
ssGWAS!
d = se acima de 1 quer dizer que distancia da normal
Se SNP é verdadeiro, a gnt ve uma trilha de SNP por causa de LD
P-value in ssGWAS
1-2: blupf90 (solta arquivo binário XX_ija que tem os coeficientes para animais genotipados)
3-6: postGS
blupf90
OPTION SNP_FILE clean, MAP_FILE clean, saveGInverse, saveA22Inverse, snp_p_value
postGSf90
option windows_variance X # 1Mb de janela= 50k 20 SNP
Output: arquivo que começa com P são os que tem p-valor, arquivo que começa cm s, snp_sol
GWAS não é causal, serve para aprender um pouco mais sobre a arquitetura genômica
###### Lab 2
- Exercício 1
`renumf90 renum.par | tee renumf90.log`
renf90.par
```
# BLUPF90 parameter file created by RENUMF90
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
2
OBSERVATION(S)
1
WEIGHT(S)
EFFECTS: POSITIONS_IN_DATAFILE NUMBER_OF_LEVELS TYPE_OF_EFFECT[EFFECT NESTED]
2 2 cross
3 12010 cross
RANDOM_RESIDUAL VALUES
0.60000
RANDOM_GROUP
2
RANDOM_TYPE
add_an_upginb
FILE
renadd02.ped
(CO)VARIANCES
0.40000
OPTION SNP_file snp3.2k
OPTION map_file mrkmap.txt
OPTION no_quality_control
OPTION saveGInverse # salva a matriz G inversa
OPTION saveA22Inverse # salva a matriz A22
OPTION snp_p_value # para criar arquivo xx_ija que calcula do p-value - o postGS nao calcula pvalue
OPTION origID
```
Rodar BLUP90 com as opções que preciso
`blupf90+ renf90.par | tee blupf90_to_GWAS.log`
Rodar o postGSf90, o cartão de parâmetros:
```
# BLUPF90 parameter file created by RENUMF90
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
2
OBSERVATION(S)
1
WEIGHT(S)
EFFECTS: POSITIONS_IN_DATAFILE NUMBER_OF_LEVELS TYPE_OF_EFFECT[EFFECT NESTED]
2 2 cross
3 12010 cross
RANDOM_RESIDUAL VALUES
0.60000
RANDOM_GROUP
2
RANDOM_TYPE
add_an_upginb
FILE
renadd02.ped
(CO)VARIANCES
0.40000
OPTION SNP_file snp3.2k
OPTION map_file mrkmap.txt
OPTION no_quality_control
OPTION readGInverse
OPTION readA22Inverse
OPTION snp_p_value
OPTION windows_variance 1 # para verificar o pvalor de todos os SNP (n usa windows)
```
`Rodando: postGSf90 postGSf90.par | tee postGSf90.log`
Gerar o gráfico: `Rscript *.R` no R
Mas eu editei o arquivo, abri o script no R para colocar a treshold line:
```
a=0.05/nrow(yyy) #formula para calculo do treshold
a=-log10(a) # colocar na escala do grafico
```
E antes de salvar o gráfico (antes dev.off) coloquei abline
Arquivos para olhar
snp_pred #predição do valor genômico de cada SNP
windows_segments # me dá as genomic windows
windows_variance
Agora eu vou fazer a predição para os animais novos (que não tem fenótipos)
Rodar: `predf90`
Ele pergunta a name of genotype file? eu vou colocar `new_animals`
Output: SNP_predictions # me dá o GEBV nos animais jovens (sem P)