#funcao para calculo de desequilibrio de ligacao entre duas SNPs
#argumentos da funcao: X = objeto dos dados no formato "map" ; Y = objeto dos dados no formato "ped"; snp1 e snp2 = nome das SNPS a serem analisadas.
DL <- function(x,y, snp1, snp2)
{
#criar arquivo com os nomes das snps do arquivo map
names.map <- x[,2, drop=FALSE]
#nomear a coluna com os nomes das SNPs
colnames(names.map) <- "SNP"
#criar arquivo somente com os dados dos genotipos do arquivo ped
genotipo.ped <-y[, 7:length(y)]
#nomear as colunas com os genotipos com o nome das respectivas SNPs
colnames(genotipo.ped) <- paste(rep(names.map[,1], each=2), c("a", "b"), sep="")
#cria lista com nome das snps selecionadas pelo usuário
inf<-c(snp1,snp2)
#cria lista com o nome das snps selecionadas pelo usuário
sel<-paste(rep(inf,each=2),c("a","b"), sep="")
#cria arquivo para armazenar dados gerados no loop
snpcl<-c()
#loop para selecionar as colunas que serão lidas no próximo loop
for(j in seq(1,length(sel),by=2)){
#loop para selecionar as linhas que serão lidas no loop
for(i in 1:dim(genotipo.ped)[1]) {
#função para identificar nas os valores faltantes no arquivo (0) e substiruir por NA
snpcl = c(snpcl,ifelse(genotipo.ped[i,sel][j]==0|genotipo.ped[i,sel][j+1]==0,NA,
#função para identificar alelos iguais ao alelo do segundo nivel nas duas colunas, quando essa condição for verdadeira substituir as duas linhas pelo velor 0.
ifelse(genotipo.ped[i,sel][j]==levels(genotipo.ped[,j])[2] & genotipo.ped[i,sel][j+1]==levels(genotipo.ped[,j])[2],0,
#função para identificar alelos que são diferentes ao alelo do segundo nível nas duas colunas, quando essa condição for verdadeira substituir por 2 e quando for falsa substituir por 1.
ifelse(genotipo.ped[i,sel][j]!=levels(genotipo.ped[,j])[2] & genotipo.ped[i,sel][j+1]!=levels(genotipo.ped[,j])[2],2,1))
))
}
}
#transformar os dados de saída do loop em uma matriz
snp.m <- matrix(snpcl, ncol = length(sel)/2,)
#calcular a frequencia de todos os gametas possiveis na população.
N00 <-length(which(snp.m[,1]==0 & snp.m[,2]==0))
N01 <-length(which(snp.m[,1]==0 & snp.m[,2]==1))
N02 <-length(which(snp.m[,1]==0 & snp.m[,2]==2))
N10 <-length(which(snp.m[,1]==1 & snp.m[,2]==0))
N11 <-length(which(snp.m[,1]==1 & snp.m[,2]==1))
N12 <-length(which(snp.m[,1]==1 & snp.m[,2]==2))
N20 <-length(which(snp.m[,1]==2 & snp.m[,2]==0))
N21 <-length(which(snp.m[,1]==2 & snp.m[,2]==1))
N22 <-length(which(snp.m[,1]==2 & snp.m[,2]==2))
#omitir os valores de NA dos calculos finais
NNa <- length(na.omit(snp.m))
#valor do total de genotipos
total.pop <-length(snp.m)
#total de individuos genotipados
N.final <- (total.pop - NNa)/2
#calculo da frequencia dos gametas na população
X11 = (N00+N01/2+N10/2+N11/4)/(N.final)
X12 = (N02+N01/2+N12/2+N11/4)/(N.final)
X21 = (N20+N21/2+N10/2+N11/4)/(N.final)
X22 = (N22+N21/2+N12/2+N11/4)/(N.final)
#calculo da frequência dos alelos na população
p1 = X11+X12
p2 = X21+X22
q1 = X11+X21
q2 = X12+X22
#calculo do desequlibrio de ligação
D = (X11*X22)-(X12*X21)
#calculo do Dmax
if(D >=0){
if (X12-X22)
{
Dmax=-X11
}
else
{
Dmax=-X22
}
}
#calculo do valor de D'
Dl= D/Dmax
#calculo do valor de correlação de desequilibrio de ligação
r2 = D^2/(p1*p2*q1*q2)
#calculo da frequencia esperada dos gametas na população
esp <- data.frame(X11.o = p1*q1, X12.o = p1*q2, X21.o = p2*q1, X22.o = p2*q2)
#calculo da frequencia observada dos gametas na população
obs <- data.frame(X11.e = p1*q1 + D, X12.e = p1*q2 - D, X21.e = p2*q1 - D, X22.e = p2*q2 + D)
#calculo do qui-quadrado
X2 = sum(((obs[1:4]-esp[1:4])/esp[1:4])^2)
resultado <- data.frame(D, Dl, r2, X2)
names(resultado)<-c("D", "D´", "r²", "qui-quadrado")
return(resultado)
}
modelo package:unknown R Documentation
function to calculate linkage disequilibrium (DL)
Description:
The function calculate linkage disequelibrium (D) between two SNPs, the function still returns the values of the
adjusted linkage disequilibrium (D´), the correlation between two SNPs (r²) and the value of chi-square (X²).
The imput data is compatible with Plink format, map and ped files.
Usage:
DL (x, y, snp1, snp2)
Arguments:
x - object of a file .map
y - object of a file .ped
snp1 - name of one SNP to be analysed. Must be included in file.map
snp2 - name of the second SNP to be analysed. Must be included in file.map
Details:
The files must be in .map and .ped format and is no possible run the function with any of arguments=NULL.
The files can contain differents chromossomes.
Value:
For DL the results are a data.frame
Author(s):
Carolina Mancini
References:
Plink documentation. Shaun Purcell. May 2010
See Also:
genetics package for more functions for genetic population
Examples:
teste.map <- data.frame(V1=rep(1, 5),V2=paste("rs", 12345:12349, sep=""), V3=rep(0,5),V4=395679:395683)
teste.ped <-data.frame(V1=rep(1:75, each=2), V2=1101:1250, V3=rep(0,150), V4=rep(0,150), V5=rep(1,2, each=2,75), V6=rep(-
9, 150),
V7=sample(rep(c("A","G",0),50)), V8=sample(rep(c("G","A",0),50)),
V9=sample(rep(c("T","C",0),50)), V10=sample(rep(c("C","T",0),50)),
V11=sample(rep(c("A","C",0),50)),V12=sample(rep(c("c","A",0),50)),
V13=sample(rep(c("G","T",0),50)),V14=sample(rep(c("T","G",0),50)),
V15=sample(rep(c("A","G",0),50)),V16=sample(rep(c("G","A",0),50)))
DL(teste.map, teste.ped, "name snp1", "name snp2")
Proposta 1: Calcular o desequilíbrio de ligação entre dois alelos em uma determinada população.
A função irá calcular os valores de D’, r² , a frequência estimada dos haplótipos, a frequência esperada em caso de equilíbrio de Hardy-Weinberg e o resultado do teste qui-quadrado.
Os dados de entrada serão do tipo data.frame e poderão ser lidos a partir de um arquivo txt.
O cálculo de LD será feito de forma pareada, o usuário poderá selecionar os alelos de interesse ou fazer a análise para todos os alelos do arquivo. Também será possível selecionar os alelos selecionando a região genômica, nesse caso o data.frame deverá conter informações sobre a posição física (bp) dos alelos.
Os dados de saída estão na forma matriz contendo os valores de D’, r² e χ² para cada par de alelos testados.
Os resultados da frequência estimada dos haplótipos e da frequência esperada serão visualizados apenas quando o usuário escolher apenas dois alelos o cálculo do LD. Nesse caso o resultado será um data.frame.
{{:bie5782:01_curso_atual:alunos:trabalho_final:carol.mancini:w05_lecture15.pdf|}}
Proposta 2: Determinação de modelos de regressão logística para fenótipos complexos.
A função irá determinar quais as variáveis estão relacionadas com o fenótipo. Todas as possíveis variáveis preditoras serão testadas, e serão selecionadas as que apresentarem modelo com p-value ≥0.05.
As variáveis selecionadas serão submetidas a um teste para identificar colinearidade entre elas.
Por fim será construído um modelo de regressão logística com base nas variáveis selecionadas.
Os dados de entrada serão em forma de data.frame a partir de um arquivo txt e os dados de saída serão um data.frame contendo o modelo de regressão que melhor explica o fenótipo em questão e um gráfico com os dados e o modelo de regressão.
//Carolina, a proposta 1 é bastante interessante. Você irá fazer o cálculo dos índices propostos na unha? Não esqueça de definir a entrada dos dados no help da sua função.
A proposta 2 está um pouco confusa. Como são os dados de entrada? Qual modelo você irá usar na primeira etapa?//
--- //[[juliana.lv@gmail.com|Juliana Vendrami]] 2015/03/24 15:05//