Gráficos de PRS
Página com arquivo do script em RMarkdown
Modelo Gráfico da distribuição do Escore Poligênico de Risco (PRS)
Com os dados exportados do PRSice, no arquivo “Nome_do_arquivo.best” conseguimos os valores do Escore Poligênico de Risco (PRS) para cada uma das amostras/ indivíduos no melhor p-threshold (Colunas: FamilyID, IndividualID, In_Regression, ScorePRS).
Para criação dos gráficos procurei alguns sites úteis com exemplos de density plots (pacote: ggplot2) e como personalizá-los:
Density Plot no ggplot2:
Cookbook-r
STHDA
Customizações (Cores e Detalhes):
RColorBrewer
Customizing Graphs
Arquivos necessários (toy data):
- test.best: exportado pelo PRSice (output.best) e contém os escores de risco para cada indivíduo no melhor p-threshold
- test.summary: exportado pelo PRSice (output.summary) e contém qual p-threshold foi utilizado, o número de SNPs, valor de p e R^2 do modelo, …
- test_pheno: arquivo de fenótipos que foi utilizado no PRSice no comando –pheno
# Pacotes utilizados
library (ggplot2) #graficos
library (plyr) #join_all, ddply
library (dplyr) #mutate
Importando e Manipulando Bancos de Dados
Primeiro é necessário importar o arquivo exportado do PRSice “Nome_do_arquivo.best” e um outro arquivo que possui as informações de fenótipo e IDs dos indivíduos (mesmo arquivo que foi utilizado no PRSice para –pheno).
Para fenótipos qualitativos (ex.: caso/controle) é melhor utilizar gráficos de densidade, em casos de fenótipos quantitativos (ex.: altura) seria melhor utilizar um gráficos de dispersão (scatterplot).
Depois é necessário realizar algumas alterações nesses arquivos, para que possamos por fim juntá-los num único data.frame que será utilizado na plotagem dos gráficos no ggplot2.
# Ler o arquivo .best
<- read.table ("./test.best", header=T)
prs # Quando for analisar mais de um fenótipo é importante mudarmos o nome das colunas do escore para diferenciá-los
colnames(prs) <- c("FID", "IID", "ln_Regression", "a_PRS")
# Importando arquivo do fenótipo
<- read.table ("./test_pheno", header = T)
phenotype colnames(phenotype) <- c("FID2", "IID", "pheno") # é bom mudar o nome da coluna FID pq da problema depois ter 2 colunas com mesmo nome
# Em casos de dados qualitativos é melhor alterar a nomenclatura do fenótipo (0 e 1 para controle/ caso)
<- mutate(phenotype, pheno=factor(pheno, labels=c('Controle', 'Caso')))
phenotype
# Juntando o arquivo do escore e o arquivo do fenótipo (necessário que possuam uma coluna em comum "IID")
<- join_all(list(prs, phenotype),by = "IID", type="inner") # inner = faz com que pegue IIDs que ambos arquivos possuem em comum final
Gráficos (ggplot2)
E por fim, utilizando o ggplot2 iremos criar os gráficos de densidade. Além disso, utilizei uma outra função extra que nos da a média do escore do PRS de cada grupo (Controle e Caso).
# Cálculo da média dos escores que será traçada na curva de distribuição
<- ddply(final, "pheno", summarise, grp.mean=mean(a_PRS))
mean mean
## pheno grp.mean
## 1 Controle 1.5
## 2 Caso 2.0
# Contagem dos casos e controle
table(final$pheno)
##
## Controle Caso
## 25 25
# Também gosto de ter o .summary que mostra o threshold utilizado, mas é opcional
<- read.table ("./test.summary", header =T)
summary summary
## Phenotype Set Threshold PRS.R2 Full.R2 Null.R2 Prevalence Coefficient
## 1 test Base 1 0.047464 0.10403 0.0593846 - 2112.46
## Standard.Error P Num_SNP
## 1 818.232 0.00983032 1801
ggplot(final, aes(x=a_PRS, group=pheno, fill=pheno))+ # a_PRS = escores; pheno = grupos
geom_density(alpha=0.5)+ # alpha = densidade da cor
geom_vline(data=mean, aes(xintercept=grp.mean, colour=pheno), linetype="dashed", size=0.8)+ # linha da média
scale_fill_brewer(palette="Set1") + # Cor dos gráficos
scale_color_brewer(palette="Set1") + # Cor das linhas da média
theme_classic()+ # um dos temas para gráficos
theme(plot.title = element_text(color="black", size=14, face="bold.italic"), legend.position = "right")+ # Fonte do título e posição da legenda
ggtitle ("Curva de Distribuição de PRS")+ # Título
labs(x="Polygenic Risk Score", y="Density")+ # Nome do eixo x e y
xlim(0.5,3) # Limites do eixo x