예제 #1
0
파일: test_gp.py 프로젝트: omerwe/limix
    def setUp(self):
        SP.random.seed(1)
        self.n_dimensions = 2
        self.n_samples = 100
        self.setXy()
        #self.X = SP.rand(self.n_samples,self.n_dimensions)
        covar = limix.CCovSqexpARD(self.n_dimensions)
        ll = limix.CLikNormalIso()
        covar_params = SP.array([1, 1, 1])
        lik_params = SP.array([0.5])
        hyperparams0 = limix.CGPHyperParams()
        hyperparams0['covar'] = covar_params
        hyperparams0['lik'] = lik_params
        self.constrainU = limix.CGPHyperParams()
        self.constrainL = limix.CGPHyperParams()
        self.constrainU['covar'] = +10 * SP.ones_like(covar_params)
        self.constrainL['covar'] = 0 * SP.ones_like(covar_params)
        self.constrainU['lik'] = +5 * SP.ones_like(lik_params)
        self.constrainL['lik'] = 0 * SP.ones_like(lik_params)

        self.gp = limix.CGPbase(covar, ll)
        self.gp.setX(self.X)
        self.gp.setParams(hyperparams0)
        #self.genY()
        self.gp.setY(self.y)
예제 #2
0
    def setUp(self):
        SP.random.seed(1)

        #1. simulate
        self.settings = {'K': 5, 'N': 100, 'D': 80}
        self.simulation = self.simulate()

        N = self.settings['N']
        K = self.settings['K']
        D = self.settings['D']

        #2. setup GP
        covar = limix.CCovLinearISO(K)
        ll = limix.CLikNormalIso()
        #create hyperparm
        covar_params = SP.array([1.0])
        lik_params = SP.array([1.0])
        hyperparams = limix.CGPHyperParams()
        hyperparams['covar'] = covar_params
        hyperparams['lik'] = lik_params
        hyperparams['X'] = self.simulation['X0']
        #cretae GP
        self.gp = limix.CGPbase(covar, ll)
        #set data
        self.gp.setY(self.simulation['Y'])
        self.gp.setX(self.simulation['X0'])
        self.gp.setParams(hyperparams)
        pass
예제 #3
0
파일: gp_clvm.py 프로젝트: xuxaxy/scLVM
	def _initParams_fast(self):
		""" 
		initialize the gp parameters
			1) project Y on the known factor X0 -> Y0
				average variance of Y0 is used to initialize the variance explained by X0
			2) considers the residual Y1 = Y-Y0 (this equivals to regress out X0)
			3) perform PCA on cov(Y1) and considers the first k PC for initializing X
			4) the variance of all other PCs is used to initialize the noise
			5) the variance explained by interaction is set to a small random number 
		"""
		Xd = LA.pinv(self.X0)
		Y0 = self.X0.dot(Xd.dot(self.Y))
		Y1 = self.Y-Y0
		YY = SP.cov(Y1)
		S,U = LA.eigh(YY)
		X = U[:,-self.k:]*SP.sqrt(S[-self.k:])
		a = SP.array([SP.sqrt(Y0.var(0).mean())])
		b = 1e-3*SP.randn(1)
		c = SP.array([SP.sqrt((YY-SP.dot(X,X.T)).diagonal().mean())])
		# gp hyper params
		params = limix.CGPHyperParams()
		if self.interaction:
			params['covar'] = SP.concatenate([a,X.reshape(self.N*self.k,order='F'),SP.ones(1),b])
		else:
			params['covar'] = SP.concatenate([a,X.reshape(self.N*self.k,order='F')])
		params['lik'] = c
		return params
예제 #4
0
파일: gp_clvm.py 프로젝트: jamesaliba/scLVM
    def _initParams_regressOut(self, Ycc, X, varXX):
        """ 
		initialize the gp parameters
			1) the variance of Kcc as Ycc.var(0).mean()
			2) X with the provided 
			3) variance of interaction (if label is True) will be set to ~0
			4) residual to residual
		"""
        X *= SP.sqrt(varXX / (X**2).mean())
        Y1 = self.Y - Ycc
        a = SP.array([SP.sqrt(Ycc.var(0).mean())])
        b = 1e-3 * SP.ones(1)
        c = Y1.var(0).mean() - varXX
        c = SP.maximum(1e-1, c)
        c = SP.array([SP.sqrt(c)])
        # gp hyper params
        params = limix.CGPHyperParams()
        if self.interaction:
            params['covar'] = SP.concatenate(
                [a, X.reshape(self.N * self.k, order='F'),
                 SP.ones(1), b])
        else:
            params['covar'] = SP.concatenate(
                [a, X.reshape(self.N * self.k, order='F')])
        params['lik'] = c
        return params
예제 #5
0
파일: gp_clvm.py 프로젝트: xuxaxy/scLVM
	def _initParams_random(self):
		""" 
		initialize the gp parameters randomly
		"""
		# gp hyper params
		params = limix.CGPHyperParams()
		if self.interaction:	params['covar'] = SP.concatenate([SP.randn(self.N*self.k+1),SP.ones(1),SP.randn(1)])
		else:					params['covar'] = SP.randn(self.N*self.k+1)
		params['lik'] = SP.randn(1)
		return params
예제 #6
0
파일: gp_clvm.py 프로젝트: xuxaxy/scLVM
	def _initParams_null(self,varX0X0,nois):
		""" 
		initialize from null model
		"""
		X  = 1e-3*SP.randn(self.N,self.k)
		a = SP.array([SP.sqrt(varX0X0)])
		b = 1e-3*SP.ones(1)
		c = SP.array([SP.sqrt(nois)])
		# gp hyper params
		params = limix.CGPHyperParams()
		if self.interaction:
			params['covar'] = SP.concatenate([a,X.reshape(self.N*self.k,order='F'),SP.ones(1),b])
		else:
			params['covar'] = SP.concatenate([a,X.reshape(self.N*self.k,order='F')])
		params['lik'] = c
		return params
예제 #7
0
    def setUp(self):
        SP.random.seed(1)

        #1. simulate
        self.settings = {'K': 5, 'N': 100, 'D': 80}
        self.simulation = self.simulate()

        N = self.settings['N']
        K = self.settings['K']
        D = self.settings['D']

        #2. setup GP
        K0 = SP.dot(self.simulation['S'], self.simulation['S'].T)
        K0[:] = 0

        covar1 = limix.CFixedCF(K0)
        covar2 = limix.CCovLinearISO(K)
        covar = limix.CSumCF()
        covar.addCovariance(covar1)
        covar.addCovariance(covar2)

        ll = limix.CLikNormalIso()
        #create hyperparm
        covar_params = SP.array([0.0, 1.0])
        lik_params = SP.array([0.1])
        hyperparams = limix.CGPHyperParams()
        hyperparams['covar'] = covar_params
        hyperparams['lik'] = lik_params
        hyperparams['X'] = self.simulation['X0']
        #cretae GP
        self.gp = limix.CGPbase(covar, ll)
        #set data
        self.gp.setY(self.simulation['Y'])
        self.gp.setX(self.simulation['X0'])
        self.gp.setParams(hyperparams)
        pass
예제 #8
0
파일: multitrait.py 프로젝트: omerwe/limix
#2. fitting using limix
GP = {}
#fix covariance, taking population structure
GP['covar_G'] = limix.CFixedCF(Kpopf)
#freeform covariance: requiring number of traits/group (T)
GP['covar_E'] = limix.CCovFreeform(T)

#overall covarianc: product
GP['covar'] = limix.CProductCF()
GP['covar'].addCovariance(GP['covar_G'])
GP['covar'].addCovariance(GP['covar_E'])
#liklihood: gaussian
GP['ll'] = limix.CLikNormalIso()
GP['data'] = limix.CData()
GP['hyperparams'] = limix.CGPHyperParams()

#Create GP instance
GP['gp'] = limix.CGPbase(GP['data'], GP['covar'], GP['ll'])
#set data
GP['gp'].setY(Y)
#input: effectively we require the group for each sample (CCovFreeform requires this)
Xtrain = SP.zeros([Y.shape[0], 1])
Xtrain[N::1] = 1
GP['gp'].setX(Xtrain)

gpopt = limix.CGPopt(GP['gp'])
#constraints: make sure that noise level does not go completel crazy
constrainU = limix.CGPHyperParams()
constrainL = limix.CGPHyperParams()
constrainU['lik'] = +5 * SP.ones([1])
예제 #9
0
파일: panama.py 프로젝트: omerwe/limix
    def train(self,rank=20,Kpop=True,LinearARD=False):
        """train panama module"""

        if 0:
            covar  = limix.CCovLinearISO(rank)
            ll  = limix.CLikNormalIso()
            X0 = sp.random.randn(self.N,rank)
            X0 = PCA(self.Y,rank)[0]
            X0 /= sp.sqrt(rank)
            covar_params = sp.array([1.0])
            lik_params = sp.array([1.0])

            hyperparams = limix.CGPHyperParams()
            hyperparams['covar'] = covar_params
            hyperparams['lik'] = lik_params
            hyperparams['X']   = X0
        
            constrainU = limix.CGPHyperParams()
            constrainL = limix.CGPHyperParams()
            constrainU['covar'] = +5*sp.ones_like(covar_params);
            constrainL['covar'] = 0*sp.ones_like(covar_params);
            constrainU['lik'] = +5*sp.ones_like(lik_params);
            constrainL['lik'] = 0*sp.ones_like(lik_params);

        if 1:
            covar  = limix.CSumCF()
            if LinearARD:
                covar_1 =  limix.CCovLinearARD(rank)
                covar_params = []
                for d in range(rank):
                    covar_params.append(1/sp.sqrt(d+2))
            else:
                covar_1 =  limix.CCovLinearISO(rank)
                covar_params = [1.0]
            covar.addCovariance(covar_1)

            if self.use_Kpop:
                covar_2 =  limix.CFixedCF(self.Kpop)
                covar.addCovariance(covar_2)
                covar_params.append(1.0)

            ll  = limix.CLikNormalIso()
            X0 = PCA(self.Y,rank)[0]
            X0 /= sp.sqrt(rank)
            covar_params = sp.array(covar_params)
            lik_params = sp.array([1.0])

            hyperparams = limix.CGPHyperParams()
            hyperparams['covar'] = covar_params
            hyperparams['lik'] = lik_params
            hyperparams['X']   = X0
        
            constrainU = limix.CGPHyperParams()
            constrainL = limix.CGPHyperParams()
            constrainU['covar'] = +5*sp.ones_like(covar_params);
            constrainL['covar'] = -5*sp.ones_like(covar_params);
            constrainU['lik'] = +5*sp.ones_like(lik_params);

            
        gp=limix.CGPbase(covar,ll)
        gp.setY(self.Y)
        gp.setX(X0)
        lml0 = gp.LML(hyperparams)
        dlml0 = gp.LMLgrad(hyperparams)        
        gpopt = limix.CGPopt(gp)
        gpopt.setOptBoundLower(constrainL);
        gpopt.setOptBoundUpper(constrainU);

        t1 = time.time()
        gpopt.opt()
        t2 = time.time()

        #Kpanama
        self.Xpanama = covar_1.getX()
        if LinearARD:
            self.Xpanama /= self.Xpanama.std(0)
        self.Kpanama = covar_1.K()
        self.Kpanama/= self.Kpanama.diagonal().mean()

        # Ktot
        self.Ktot = covar_1.K()
        if self.use_Kpop:
            self.Ktot += covar_2.K()
        self.Ktot/= self.Ktot.diagonal().mean()

        #store variances
        V = {}
        if LinearARD:
            V['LinearARD'] = covar_1.getParams()**2*covar_1.getX().var(0)
        else:
            V['Kpanama'] = sp.array([covar_1.K().diagonal().mean()])
        if self.use_Kpop:
            V['Kpop'] = sp.array([covar_2.K().diagonal().mean()])
        V['noise'] = gp.getParams()['lik']**2
        self.varianceComps = V
예제 #10
0
        Y = SP.dot(S[:, ir:ir + 1], W)
        Y += 0.1 * SP.random.randn(N, D)

    if 1:
        covar_c = limix.CFixedCF(SP.eye(D))
        covar_r = limix.CFixedCF(SP.eye(N))
        Xr = SP.zeros([N, 0])
        Xc = SP.zeros([D, 0])

        gp = limix.CGPkronecker(covar_r, covar_c)
        gp.setX_r(Xr)
        gp.setX_c(Xc)
        gp.setY(Y)

        params = limix.CGPHyperParams()
        params["covar_r"] = SP.zeros([covar_r.getNumberParams()])
        params["covar_c"] = SP.zeros([covar_c.getNumberParams()])
        params["lik"] = SP.log([0.1, 0.1])

        gp.setParams(params)
        opt = limix.CGPopt(gp)

        opt.opt()
        #opt.gradCheck()

    if 0:
        opt_params = limix.CGPHyperParams()
        opt_params["lik"] = params["lik"]
        gp.setParams(opt_params)
        pdb.set_trace()
예제 #11
0
파일: gp_test.py 프로젝트: omerwe/limix
#GPMIX:
cov = SP.ones([y.shape[0], 2])
cov[:, 1] = SP.randn(cov.shape[0])
covar = limix.CCovSqexpARD(n_dimensions)
ll = limix.CLikNormalIso()

if 1:
    data = limix.CLinearMean(y, cov)
    data_params = SP.ones([cov.shape[1]])
else:
    data = limix.CData()
    data_params = None

#create hyperparm
hyperparams = limix.CGPHyperParams()
hyperparams['covar'] = covar_params
hyperparams['lik'] = lik_params
if data_params is not None:
    hyperparams['dataTerm'] = data_params

#cretae GP
gp = limix.CGPbase(covar, ll, data)
#set data
gp.setY(y)
gp.setX(X)
gp.setParams(hyperparams)
lml = gp.LML()
dlml = gp.LMLgrad()

#build constraints
예제 #12
0
    Y = Y[0:10]
    X = X[0:10]

    N = Y.shape[0]
    Kg = SP.dot(X, X.T)
    Kg = Kg / Kg.diagonal().mean()

    K0 = SP.eye(Y.shape[0])
    X0 = SP.randn(Y.shape[0], 3)
    covar1 = limix.CCovLinearISO(3)
    covar1.setParams(SP.array([1.0]))
    covar1.setX(X0)
    covar2 = limix.CFixedCF(K0)
    covar2.setParams(SP.array([1.0]))

    covar = limix.CSumCF()
    covar.addCovariance(covar2)
    covar.addCovariance(covar1)

    ll = limix.CLikNormalIso()
    gp = limix.CGPbase(covar, ll)

    hyperparams = limix.CGPHyperParams()
    hyperparams['covar'] = SP.array([1.0, 1.0])
    hyperparams['lik'] = SP.array([0.1])
    hyperparams['X'] = X0

    gp.setY(Y)
    gp.setX(X0)
    gp.setParams(hyperparams)
예제 #13
0
F2 = SP.randn(N, 1)
W2 = SP.zeros((1, 1))
A2 = SP.ones((1, P))
mean2 = limix.CKroneckerMean()
mean2.setA(A2)
mean2.setFixedEffects(F2)
mean2.setParams(W2)
mean = limix.CSumLinear()
mean.appendTerm(mean1)
mean.appendTerm(mean2)
mean.aGetParams()
# GPkronSum
gpKS = limix.CGPkronSum(Y, covarr1, covarc1, covarr2, covarc2,
                        limix.CLikNormalNULL(), mean)
# initalization
params = limix.CGPHyperParams()
params['covarc1'] = SP.randn(covarc1.getNumberParams())
params['covarc2'] = SP.randn(covarc2.getNumberParams())
params['covarr1'] = SP.ones(1)
params['covarr2'] = SP.ones(1)
params['dataTerm'] = SP.randn(P + 1, 1)
gpKS.setParams(params)
# Paramask
paramMask = limix.CGPHyperParams()
paramMask['covarc1'] = covarc1.getParamMask()
paramMask['covarc2'] = covarc2.getParamMask()
paramMask['covarr1'] = covarr1.getParamMask()
paramMask['covarr2'] = covarr2.getParamMask()
# optimisation
gpKSopt = limix.CGPopt(gpKS)
start_time = time.time()
예제 #14
0
pdb.set_trace()

#initialize LIMX objet
#1. determine covariance function:
# Squared expontential, Gaussian kernel
covar = limix.CCovSqexpARD(n_dimensions)
#2. likelihood: Gaussian noise
ll = limix.CLikNormalIso()

#startin parmaeters are set random
covar_params = SP.array([1, 0.2])
lik_params = SP.array([0.01])

#create hyperparameter object
hyperparams0 = limix.CGPHyperParams()
#set fields "covar" and "lik"
hyperparams0['covar'] = covar_params
hyperparams0['lik'] = lik_params

#cretae GP object
gp = limix.CGPbase(covar, ll)
#inputs
gp.setX(X)
#startgin parameters
gp.setParams(hyperparams0)
#generate and set outputs
y = SP.random.multivariate_normal(SP.zeros(X.shape[0]),
                                  (gp.getCovar()).K() + (gp.getLik()).K())
gp.setY(y)