家族のジェノタイプデータを適当に作る

  • 予定パッケージ名
    • HigashiNopponLikelihood
  • 関数名
    • RandomGenotypeFamily
  • タイトル
RandomGenotypeFamily
  • 説明
家系図を与え、指定マーカーについて、アレルとそのアレル頻度情報から、適当にその家系図を満足するジェノタイプデータを作る
  • 使用例
G<-RandomGenotypeFamily(p,NL,Alleles,Probs)
G2<-RandomGenotypeFamily(p,NL,Alleles,Probs,missing=TRUE)
  • ソース
RandomGenotypeFamily<-function(d,n,Alleles,Probs,missing=FALSE){
	ns<-length(d[,1])
	g<-array(0,c(ns,2,n))
	noparents<-which(d[,2]==0,d[,3]==0)
	for(i in noparents){
		for(j in 1:n){
			g[i,,j]<-sample(Alleles[[j]],2,replace=TRUE,Probs[[j]])
		}
	}
	given<-rep(0,ns)
	given[noparents]<-1
	loop<-TRUE
	if(sum(given)==ns)loop<-FALSE
	while(loop){
		yet<-which(given==0)
		for(i in yet){
			prt1<-d[i,2]
			prt2<-d[i,3]
			if(given[prt1]+given[prt2]==2){
				for(j in 1:n){
					g[i,1,j]<-sample(g[prt1,,j],1)
					g[i,2,j]<-sample(g[prt2,,j],1)
				}
				given[i]<-1
			}
		}
		if(sum(given)==ns)loop<-FALSE
	}
	if(missing){
		Type<-p[,5]
		
		G2<-array(0,c(length(p[,1]),2,NL))
		
		G2[which(Type==1),,]<-G[which(Type==1),,]
		g<-G2
	}
	g
}



  • Rdファイル
\name{RandomGenotypeFamily}
\alias{RandomGenotypeFamily}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
RandomGenotypeFamily
}
\description{
家系図を与え、指定マーカーについて、アレルとそのアレル頻度情報から、適当にその家系図を満足するジェノタイプデータを作る。シミュレーションのため。
}
\usage{
G<-RandomGenotypeFamily(p,NL,Alleles,Probs)
G2<-RandomGenotypeFamily(p,NL,Alleles,Probs,missing=TRUE)
}
\arguments{
\item{p}{家系情報の行列}
\item{Np}{人数}
\item{NL}{マーカー数}
\item{Alleles}{アレル名のベクトルのリスト}
\item{Probs}{アレル頻度のベクトルのリスト}
\item{missing}{TRUEまたはFALSE。TRUEの場合には、DNAサンプル提供者のみジェノタイプがある}
}
%- maybe also 'usage' for other objects documented here.
\details{
%%  ~~ If necessary, more details than the description above ~~
}
\value{
ディプロタイプを表す、3次元アレイ(人数x2xマーカー数)
}
\references{
%% ~put references to the literature/web site here ~
}
\author{
%%  ~~who you are~~
}
\note{
%%  ~~further notes~~
}

%% ~Make other sections like Warning with \section{Warning }{....} ~

\seealso{
}

\examples{
p<-matrix(
c(1:8,
  0,0,1,0,3,3,3,3,
  0,0,2,0,4,4,4,4,
  1,0,1,0,1,1,0,0,
  1,1,2,1,1,1,2,1),
  ncol=5)
NL<-15
AandP<-MakeAlleleProb(NL=NL)
Alleles<-AandP$Alleles
Probs<-AandP$Probs
G<-RandomGenotypeFamily(p,NL,Alleles,Probs)
G2<-RandomGenotypeFamily(p,NL,Alleles,Probs,missing=TRUE)
}

家族尤度

  • 予定パッケージ名
    • HigashiNopponLikelihood
  • 関数名
    • RandomGenotype
  • タイトル
RandomGenotype
  • 説明
指定マーカーについて、アレルとそのアレル頻度情報から、HWEに基づき、指定人数分ぷジェノタイプを作成する
  • 使用例
Gpool<-RandomGenotype(Np,NL,Alleles,Probs)
  • ソース
RandomGenotype<-function(N,n,Alleles,Probs){
	ns<-N
	g<-array(0,c(ns,2,n))
	noparents<-1:ns
	for(i in noparents){
		for(j in 1:n){
			g[i,,j]<-sample(Alleles[[j]],2,replace=TRUE,Probs[[j]])
		}
	}
	g
}
  • Rdファイル
\name{RandomGenotype}
\alias{RandomGenotype}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
RandomGenotype
}
\description{
指定マーカーについて、アレルとそのアレル頻度情報から、HWEに基づき、指定人数分ぷジェノタイプを作成する。シミュレーションのため。
}
\usage{
Gpool<-RandomGenotype(Np,NL,Alleles,Probs)
}
\arguments{
\item{Np}{人数}
\item{NL}{マーカー数}
\item{Alleles}{アレル名のベクトルのリスト}
\item{Probs}{アレル頻度のベクトルのリスト}
}
%- maybe also 'usage' for other objects documented here.
\details{
%%  ~~ If necessary, more details than the description above ~~
}
\value{
ディプロタイプを表す、3次元アレイ(人数x2xマーカー数)
}
\references{
%% ~put references to the literature/web site here ~
}
\author{
%%  ~~who you are~~
}
\note{
%%  ~~further notes~~
}

%% ~Make other sections like Warning with \section{Warning }{....} ~

\seealso{
}

\examples{
NL<-15
AandP<-MakeAlleleProb(NL=NL)
Alleles<-AandP$Alleles
Probs<-AandP$Probs
Np<-3
Gpool<-RandomGenotype(Np,NL,Alleles,Probs)
}

家族尤度

  • 予定パッケージ名
    • HigashiNopponLikelihood
  • 関数名
    • MakeAlleleProb
  • タイトル
MakeAlleleProb
  • 説明
指定マーカー数のアレルリストとそのアレル頻度リストを適当に作る
プログラムの検証用のシミュレーションデータ作成のため
  • 使用例
MakeAlleleProb(NL)
  • ソース
MakeAlleleProb<-function(NL=15){
	NL<-15

	Alleles<-NULL
	Probs<-NULL
	library(MCMCpack)
	for(i in 1:NL){
		na<-sample(3:8,1)
		st<-sample(10:20,1)
		tmp<-NULL
		for(j in 1:na){
			a<-paste("",st+j,sep="")
			tmp<-c(tmp,a)
		}
		Alleles[[i]]<-tmp
		Probs[[i]]<-c(rdirichlet(1,rep(1,na)))
		#print(sum(Probs[[i]]))
	}
	list(Alleles=Alleles,Probs=Probs)
}
  • Rdファイル
\name{MakeAlleleProb}
\alias{MakeAlleleProb}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
MakeAlleleProb
}
\description{
指定マーカー数のアレルリストとそのアレル頻度リストを適当に作る
プログラムの検証用のシミュレーションデータ作成のため
}
\usage{
MakeAlleleProb(NL)
}
\arguments{
自然数
}
%- maybe also 'usage' for other objects documented here.
\details{
%%  ~~ If necessary, more details than the description above ~~
}
\value{
2要素リスト。
第1要素はマーカー数の長さのアレルの名前のリスト。個々のリストは文字列のベクトル。
第2要素はマーカー数の長さのアレルの頻度リスト。個々のリストは数値のベクトルで、その値は0以上かつ、和が1。
}
\references{
%% ~put references to the literature/web site here ~
}
\author{
%%  ~~who you are~~
}
\note{
%%  ~~further notes~~
}

%% ~Make other sections like Warning with \section{Warning }{....} ~

\seealso{
}

\examples{
NL<-15
AandP<-MakeAlleleProb(NL=NL)
Alleles<-AandP$Alleles
Probs<-AandP$Probs
}

家族尤度

  • 予定パッケージ名
    • HigashiNopponLikelihood
  • 関数名
    • MakePedigreeFromFamilyInfo
  • タイトル
MakePedigreeFromFamilyInfo
  • 説明
5列の家族情報行列からkinshipパッケージのpedigreeオブジェクトを作る
  • 使用例
MakePedigreeFromFamilyInfo(p)
  • ソース
MakePedigreeFromFamilyInfo<-function(p){
	ns<-length(p[,1])
	affected<-status<-rep(1,ns)
	affected[which(p[,5]==3)]<-0
	status[which(p[,5]==1)]<-0
	ptemp<-pedigree(id=p[,1],dadid=p[,3],momid=p[,2],sex=p[,4],affected=affected,status=status)
	if(sum(ptemp$affected)==0)ptemp$affected<-affected
	ptemp
}
  • Rdファイル
\name{MakePedigreeFromFamilyInfo}
\alias{MakePedigreeFromFamilyInfo}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
MakePedigreeFromFamilyInfo
}
\description{

}
\usage{
akePedigreeFromFamilyInfo(p)
}
\arguments{
pは5列の行列。第1列はID(数値で1,2,...)。第2列は母親ID。母親不明は0。第3列は父親ID。父親不明は0。第4列は性別。0は男,1は女。第5列は解析用タイプ。1はDNAサンプル提供者。2は探されている家系構成員。3は家系構成員ではあるが、DNAサンプルの提供がなく、かつ、探されていない家系構成員。
}
%- maybe also 'usage' for other objects documented here.
\details{
%%  ~~ If necessary, more details than the description above ~~
}
\value{
pedigreeオブジェクト
}
\references{
%% ~put references to the literature/web site here ~
}
\author{
%%  ~~who you are~~
}
\note{
%%  ~~further notes~~
}

%% ~Make other sections like Warning with \section{Warning }{....} ~

\seealso{
}

\examples{
# needs kinship package
p<-matrix(
c(1:8,
  0,0,1,0,3,3,3,3,
  0,0,2,0,4,4,4,4,
  1,0,1,0,1,1,0,0,
  1,1,2,1,1,1,2,1),
  ncol=5)

ptemp<-MakePedigreeFromFamilyInfo(p)
plot(ptemp)
}

2次元用を多次元錐に拡張

# df次元球の表面積
SphereSurface<-function(df,r=1){
	2*r^df*pi^(df/2)/gamma(df/2)
}
# df次元球の軸と偏角tであるdf-1次元球の表面積
SphereSurfaceAngle<-function(df,t,r=1){
	d<-r*abs(sin(t))
	ret<-0
	if(df==1){
		ret<-rep(2,length(t))
	}else{
		ret<-SphereSurface(df-1,d)
	}
	ret
}
SphereSurfaceAngle(3,pi/2)
SpherePowerND<-
function (df,Kv, Ks, CheckDists, Tiis, nperm = 1000) 
{
    dfin<-df
    df<-2
    
    Ks[which(Ks == 0)] <- 1e-04
    Kss <- matrix(rep(Kv, length(Ks)), nrow = length(Ks), byrow = TRUE) * 
        Ks
    Ntest <- length(Tiis[, 1])
    tmprss<-seq(from=0,to=1,length.out=nperm)*2*pi
    rss <- cbind(cos(tmprss),sin(tmprss))
    ws<-SphereSurfaceAngle(dfin-1,tmprss)
    ws<-ws/sum(ws)

    PowerOut <- matrix(0, length(Ks), length(CheckDists))
    for (ik in 1:length(Ks)) {
        Pii <- Kss[ik, ]
        AccumProbs <- matrix(0, nperm, length(CheckDists))
        for (i in 1:nperm) {
            rs <- matrix(rss[i, ], nrow = 1)
            tmptheta <- acos(cosxy(t(Pii), rs))
            C <- nrm(Pii) * cos(tmptheta)
            D <- nrm(Pii) * sin(tmptheta)
            As <- t(Tiis %*% t(rs))
            Bs <- t(Tiis %*% Pii)
            current <- which(Bs == max(Bs))[1]
            SerialTopT <- c(current)
            currentR <- 0
            SerialR <- c(currentR)
            SerialStat <- c(Bs[current])
            CheckList <- 1:Ntest
            CheckList <- CheckList[which(CheckList != current)]
            while (length(CheckList) > 0) {
                tmpks <- -(Bs[current] - Bs[CheckList])/(As[current] - 
                  As[CheckList])
                tmpList <- which(tmpks > currentR)
                if (length(tmpList) > 0) {
                  current <- CheckList[which(tmpks == min(tmpks[tmpList]))][1]
                  currentR <- min(tmpks[tmpList])
                  SerialTopT <- c(SerialTopT, current)
                  SerialR <- c(SerialR, currentR)
                  SerialStat <- c(SerialStat, As[current] * currentR + 
                    Bs[current])
                }
                CheckList <- CheckList[tmpList]
                CheckList <- CheckList[which(CheckList != current)]
            }
            intMyX <- intMyX3 <- matrix(0, length(CheckDists), 
                length(SerialTopT))
            AnswerPs <- rep(0, length(CheckDists))
            for (j in 1:length(CheckDists)) {
                tmpSerialStat <- SerialStat - CheckDists[j]
                if (tmpSerialStat[1] >= 0) {
                  AnswerPs[j] <- 1
                }
                if (length(tmpSerialStat) > 1) {
                  for (jj in 1:(length(tmpSerialStat) - 1)) {
                    if (tmpSerialStat[jj] == 0) {
                      intMyX[j, jj] <- 1
                      intMyX3[j, jj] <- sign(As[SerialTopT[jj]])
                    }
                    else {
                      if (tmpSerialStat[jj] * tmpSerialStat[jj + 
                        1] < 0) {
                        intMyX[j, jj] <- 1
                        intMyX3[j, jj] <- sign(As[SerialTopT[jj]])
                      }
                    }
                  }
                }
                if (tmpSerialStat[length(tmpSerialStat)] == 0) {
                  intMyX[j, length(tmpSerialStat)] <- 1
                  intMyX3[j, length(tmpSerialStat)] <- sign(As[SerialTopT[length(tmpSerialStat)]])
                }
                else {
                  if (tmpSerialStat[length(tmpSerialStat)] * 
                    As[SerialTopT[length(tmpSerialStat)]] < 0) {
                    intMyX[j, length(tmpSerialStat)] <- 1
                    intMyX3[j, length(tmpSerialStat)] <- sign(As[SerialTopT[length(tmpSerialStat)]])
                  }
                }
            }
            zeros <- which(apply(abs(intMyX), 1, sum) == 0)
            Crossings <- t(outer(CheckDists, Bs[SerialTopT], 
                FUN = "-"))/As[SerialTopT]
            ChiProbs <- pchisq(Crossings^2, dfin, lower.tail = FALSE)
            AnswerPs <- AnswerPs + apply(t(intMyX3) * ChiProbs, 
                2, sum)
            AnswerPs[zeros] <- AnswerPs[zeros] <- (sign(As[SerialTopT[length(SerialTopT)]]) + 
                1)/2
            AnswerPs[which(AnswerPs < 0)] <- 1 + AnswerPs[which(AnswerPs < 
                0)]
            AnswerPs[which(AnswerPs > 1)] <- AnswerPs[which(AnswerPs > 
                1)] - 1
            AccumProbs[i, ] <- AnswerPs*ws[i]
        }
        #PowOut <- apply(AccumProbs, 2, sum)/nperm
        PowOut <- apply(AccumProbs, 2, sum)
        PowerOut[ik, ] <- PowOut
    }
    list(df = dfin, Kv = Kv, Ks = Ks, CheckDists = CheckDists, 
        Tiis = Tiis, nperm = nperm, p.out = PowerOut)
}


rs<-seq(from=0,to=1,length.out=101)
us<-rs*pi/2
Ks<-5
CheckDists<-5
nperm<-1000
dfs<-c(2,3,4,5,10)
power2markerdfs<-matrix(0,length(dfs),length(us))

for(x in 1:length(dfs)){
	df<-dfs[x]
	ppout<-rep(0,length(us))
	Tiis<-matrix(0,2,2)
	Tiis[1,1]<-1
	Kv<-c(1,0)
	for(i in 1:length(us)){
		Tiis[2,1]<-cos(us[i])
		Tiis[2,2]<-sin(us[i])
		
		tmp<-rbind(Tiis,-Tiis)
		spout<-SpherePowerND(df,Kv,Ks,CheckDists,Tiis,nperm)
		ppout[i]<-c(spout$p.out)
	}

	power2markerdfs[x,]<-ppout

}

matplot(t(power2markerdfs2),type="l")

power2markerdfs2<-matrix(0,length(dfs),length(us))

for(x in 1:length(dfs)){
	df<-dfs[x]
	ppout<-rep(0,length(us))
	Tiis<-matrix(0,3,2)
	Tiis[1,1]<-1
	Kv<-c(1,0)
	for(i in 1:length(us)){
		Tiis[2,1]<-cos(us[i])
		Tiis[2,2]<-sin(us[i])
		Tiis[3,1]<-cos(us[i])
		Tiis[3,2]<--sin(us[i])
		
		tmp<-rbind(Tiis,-Tiis)
		spout<-SpherePowerND(df,Kv,Ks,CheckDists,Tiis,nperm)
		ppout[i]<-c(spout$p.out)
	}

	power2markerdfs2[x,]<-ppout

}

matplot(t(power2markerdfs2),type="l")

マーカーの束ごとにパワーを計算

  • 予定パッケージ名
  • 関数名
    • SpherePower2D
  • タイトル
SpherePower2D
  • 説明
フェノタイプ情報のベクトルと、ジェノタイプ情報の行列があるとす
  • 使用例
SpherePower2D(Kv,Ks,CheckDists,Tiis,nperm)
  • ソース
SpherePower2D<-
function (Kv, Ks, CheckDists, Tiis, nperm = 1000) 
{
    df<-2
    Ks[which(Ks == 0)] <- 1e-04
    Kss <- matrix(rep(Kv, length(Ks)), nrow = length(Ks), byrow = TRUE) * 
        Ks
    Ntest <- length(Tiis[, 1])
    tmprss<-seq(from=0,to=1,length.out=nperm)*2*pi
    rss <- cbind(cos(tmprss),sin(tmprss))
    PowerOut <- matrix(0, length(Ks), length(CheckDists))
    for (ik in 1:length(Ks)) {
        Pii <- Kss[ik, ]
        AccumProbs <- matrix(0, nperm, length(CheckDists))
        for (i in 1:nperm) {
            rs <- matrix(rss[i, ], nrow = 1)
            tmptheta <- acos(cosxy(t(Pii), rs))
            C <- nrm(Pii) * cos(tmptheta)
            D <- nrm(Pii) * sin(tmptheta)
            As <- t(Tiis %*% t(rs))
            Bs <- t(Tiis %*% Pii)
            current <- which(Bs == max(Bs))[1]
            SerialTopT <- c(current)
            currentR <- 0
            SerialR <- c(currentR)
            SerialStat <- c(Bs[current])
            CheckList <- 1:Ntest
            CheckList <- CheckList[which(CheckList != current)]
            while (length(CheckList) > 0) {
                tmpks <- -(Bs[current] - Bs[CheckList])/(As[current] - 
                  As[CheckList])
                tmpList <- which(tmpks > currentR)
                if (length(tmpList) > 0) {
                  current <- CheckList[which(tmpks == min(tmpks[tmpList]))][1]
                  currentR <- min(tmpks[tmpList])
                  SerialTopT <- c(SerialTopT, current)
                  SerialR <- c(SerialR, currentR)
                  SerialStat <- c(SerialStat, As[current] * currentR + 
                    Bs[current])
                }
                CheckList <- CheckList[tmpList]
                CheckList <- CheckList[which(CheckList != current)]
            }
            intMyX <- intMyX3 <- matrix(0, length(CheckDists), 
                length(SerialTopT))
            AnswerPs <- rep(0, length(CheckDists))
            for (j in 1:length(CheckDists)) {
                tmpSerialStat <- SerialStat - CheckDists[j]
                if (tmpSerialStat[1] >= 0) {
                  AnswerPs[j] <- 1
                }
                if (length(tmpSerialStat) > 1) {
                  for (jj in 1:(length(tmpSerialStat) - 1)) {
                    if (tmpSerialStat[jj] == 0) {
                      intMyX[j, jj] <- 1
                      intMyX3[j, jj] <- sign(As[SerialTopT[jj]])
                    }
                    else {
                      if (tmpSerialStat[jj] * tmpSerialStat[jj + 
                        1] < 0) {
                        intMyX[j, jj] <- 1
                        intMyX3[j, jj] <- sign(As[SerialTopT[jj]])
                      }
                    }
                  }
                }
                if (tmpSerialStat[length(tmpSerialStat)] == 0) {
                  intMyX[j, length(tmpSerialStat)] <- 1
                  intMyX3[j, length(tmpSerialStat)] <- sign(As[SerialTopT[length(tmpSerialStat)]])
                }
                else {
                  if (tmpSerialStat[length(tmpSerialStat)] * 
                    As[SerialTopT[length(tmpSerialStat)]] < 0) {
                    intMyX[j, length(tmpSerialStat)] <- 1
                    intMyX3[j, length(tmpSerialStat)] <- sign(As[SerialTopT[length(tmpSerialStat)]])
                  }
                }
            }
            zeros <- which(apply(abs(intMyX), 1, sum) == 0)
            Crossings <- t(outer(CheckDists, Bs[SerialTopT], 
                FUN = "-"))/As[SerialTopT]
            ChiProbs <- pchisq(Crossings^2, df, lower.tail = FALSE)
            AnswerPs <- AnswerPs + apply(t(intMyX3) * ChiProbs, 
                2, sum)
            AnswerPs[zeros] <- AnswerPs[zeros] <- (sign(As[SerialTopT[length(SerialTopT)]]) + 
                1)/2
            AnswerPs[which(AnswerPs < 0)] <- 1 + AnswerPs[which(AnswerPs < 
                0)]
            AnswerPs[which(AnswerPs > 1)] <- AnswerPs[which(AnswerPs > 
                1)] - 1
            AccumProbs[i, ] <- AnswerPs
        }
        PowOut <- apply(AccumProbs, 2, sum)/nperm
        PowerOut[ik, ] <- PowOut
    }
    list(df = df, Kv = Kv, Ks = Ks, CheckDists = CheckDists, 
        Tiis = Tiis, nperm = nperm, p.out = PowerOut)
}
  • Rdファイル
\name{SpherePower2D}
\alias{SpherePower2D}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
SpherePower2D
}
\description{

}
\usage{
SpherePower2D(Kv,Ks,CheckDists,Tiis,nperm)
}
\arguments{

}
%- maybe also 'usage' for other objects documented here.
\details{
%%  ~~ If necessary, more details than the description above ~~
}
\value{

}
\references{
%% ~put references to the literature/web site here ~
}
\author{
%%  ~~who you are~~
}
\note{
%%  ~~further notes~~
}

%% ~Make other sections like Warning with \section{Warning }{....} ~

\seealso{
}

\examples{
}

マーカーの束ごとにパワーを計算

  • 予定パッケージ名
  • 関数名
    • SpherePowerGene
  • タイトル
SpherePowerGene
  • 説明
フェノタイプ情報のベクトルと、ジェノタイプ情報の行列があるとする。
フェノタイプベクトルから分割表を作り、
ジェノタイプ行列から、テストベクトルを作る。
遺伝子は、1個以上のマーカーを持ち、
その遺伝子に関する検定は、その遺伝子に属するマーカーに関する複数の検定の最大検定統計量であるものとする。
検定閾値を与え、真の関連をマーカーの方向にあるとみなして、パワーを遺伝子単位で推定する
  • 使用例

  • ソース
SpherePowerGene<-function(p,g,ptype=c(0,1),genes,Ks,CheckDists,nperm){
	O<-MakeOTable(p,ptype)
	Sp<-RegularSpherize(O)
	Ngenes<-length(genes[,1])
	Ntobechecked<-sum(genes[,2])-sum(genes[,1])+Ngenes
	df<-length(p)-1

	powouts<-matrix(0,Ntobechecked,length(CheckDists))
	counter<-1
	for(i in 1:Ngenes){
		W<-MakeWTableS(as.matrix(g[,genes[i,1]:genes[i,2]]))
		Tiis<-matrix(0,length(W[,1]),df)
		for(j in 1:length(W[,1])){
			Tiis[j,]<-TestDf1(O,W[j,],Sp)$Tiist
		}
		Tiis<-rbind(Tiis,-Tiis)
		for(j in 1:(length(Tiis[,1])/2)){
			Kv<-Tiis[j,]
			powouts[counter,]<-SpherePower(df,Kv,Ks,CheckDists,Tiis)$p.out
			counter<-counter+1
		}
	}
	#matplot(t(powouts),type="l")
	list(powers=powouts,p=p,g=g,ptype=ptype,genes=genes,Ks=Ks,CheckDists=CheckDists,nperm=nperm)
}
  • Rdファイル
\name{SpherePowerGene}
\alias{SpherePowerGene}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
SpherePowerGene
}
\description{
フェノタイプ情報のベクトルと、ジェノタイプ情報の行列があるとする。
フェノタイプベクトルから分割表を作り、
ジェノタイプ行列から、テストベクトルを作る。
遺伝子は、1個以上のマーカーを持ち、
その遺伝子に関する検定は、その遺伝子に属するマーカーに関する複数の検定の最大検定統計量であるものとする。
検定閾値を与え、真の関連をマーカーの方向にあるとみなして、パワーを遺伝子単位で推定する
}
\usage{
SpherePowerGene(p=p,g=g3,genes=LocGenes,Ks=Ks,CheckDists=CheckDists,nperm=nperm)
}
\arguments{
\item{p}{サンプル数の長さのベクトル、フェノタイプ}
\item{g}{サンプル数の行数、マーカー数の列数の行列、ジェノタイプ}
\item{genes}{2列の行列。各行は、遺伝子などの長さのある要素に対応し、第1列の値から第2列の値までのマーカーが、その要素に属するものとする}
\item{Ks}{対立仮説の原点からの距離}
\item{CheckDists}{帰無仮説検定の検定閾値(原点からの距離)}
\item{nperm}{推定に用いる乱方向の数}
}
%- maybe also 'usage' for other objects documented here.
\details{
%%  ~~ If necessary, more details than the description above ~~
}
\value{
引数を格納するとともに、遺伝子上のマーカーのパワーが行列状で返る
}
\references{
%% ~put references to the literature/web site here ~
}
\author{
%%  ~~who you are~~
}
\note{
%%  ~~further notes~~
}

%% ~Make other sections like Warning with \section{Warning }{....} ~

\seealso{
}

\examples{
Ns<-1000
Nm<-1000
k<-c(0,1)
p<-sample(k,Ns,replace=TRUE)
num1<-sample(1:(Ns-5),Nm,replace=TRUE)
num1<-sort(num1)

num2<-rep(0,Nm)
for(i in 1:Nm){
	num2[i]<-sample((num1[i]+1):Ns,1)
}
g<-matrix(0,Ns,Nm)
for(i in 1:Nm){
	g[,i]<-c(rep(0,num1[i]),rep(1,num2[i]-num1[i]),rep(2,Ns-num2[i]))
}

Nm2<-500
g2<-matrix(sample(c(0,1,2),Nm2*Ns,replace=TRUE),nrow=Ns)

g3<-cbind(g,g2)
Nm3<-Nm+Nm2
g3<-g3[,sample(1:Nm3)]

image(g3)

Ngenes<-10

LocGenes<-matrix(sort(sample(1:Nm3,Ngenes*2)),ncol=2,byrow=TRUE)

matplot(LocGenes)
Ks<-3
CheckDists<-0:6
nperm<-1000
powerGenes<-SpherePowerGene(p=p,g=g3,genes=LocGenes,Ks=Ks,CheckDists=CheckDists,nperm=nperm)
matplot(t(powerGenes$powers),type="l")
}