def tst_glm(): from scitbx.glmtbx import glm from scitbx.array_family import flex from numpy.random import poisson, seed from math import exp seed(0) n_obs = 100 for c in range(1, 100): # Test for a constant value X = flex.double([1 for i in range(n_obs)]) X.reshape(flex.grid(n_obs, 1)) Y = flex.double(list(poisson(c, n_obs))) B = flex.double([0]) P = flex.double([1 for i in range(n_obs)]) result = glm(X, Y, B, P, family="poisson", max_iter=100) assert (abs(c - exp(result.parameters()[0])) < 0.1 * c) print('OK')
def tst_glm(): from scitbx.glmtbx import glm from scitbx.array_family import flex from numpy.random import poisson, seed from math import exp seed(0) n_obs = 100 for c in range(1, 100): # Test for a constant value X = flex.double([1 for i in range(n_obs)]) X.reshape(flex.grid(n_obs, 1)) Y = flex.double(list(poisson(c, n_obs))) B = flex.double([0]) P = flex.double([1 for i in range(n_obs)]) result = glm(X, Y, B, P, family="poisson", max_iter=100) assert(abs(c - exp(result.parameters()[0])) < 0.1*c) print 'OK'
nobs = 100 X1 = [1] * nobs X2 = [i for i in range(nobs)] # X1 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] # X2 = [0, 0, 1, 2, 4, 5, 4, 3, 2, 0, 0] X = flex.double(item for a, b in zip(X1, X2) for item in [a, b]) X.reshape(flex.grid(nobs, 2)) # Y = flex.double([poisson(a*X1[i]+c*X2[i],1)[0] for i in range(nobs)]) Y = flex.double( [poisson(c * X1[i] + a * X2[i], 1)[0] for i in range(nobs)]) B = flex.double([0, 0]) P = flex.double([1] * nobs) B1 = glm33(X, Y, B, P) print(list(B1)) result = glm(X, Y, B, P, max_iter=1000) print(list(result.parameters())) exit(0) # for k in range(10): # X = flex.double([item for i in range(100) for item in [1,i-50]]) # X.reshape(flex.grid(100, 2)) # Y = flex.double([poisson(a*i+c,1)[0] for i in range(100)]) # B = flex.double([0, 0]) # P = flex.double([1] * len(Y)) # B = glm33(X,Y,B,P) # print exp(B[0]), exp(B[1]) Y2 = [] Y3 = []
c = 10 nobs = 100 X1 = [1] * nobs X2 = [i for i in range(nobs)] # X1 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] # X2 = [0, 0, 1, 2, 4, 5, 4, 3, 2, 0, 0] X = flex.double(item for a, b in zip(X1, X2) for item in [a, b]) X.reshape(flex.grid(nobs, 2)) # Y = flex.double([poisson(a*X1[i]+c*X2[i],1)[0] for i in range(nobs)]) Y = flex.double([poisson(c*X1[i]+a*X2[i],1)[0] for i in range(nobs)]) B = flex.double([0, 0]) P = flex.double([1] * nobs) B1 = glm33(X,Y,B,P) print list(B1) result = glm(X,Y,B,P, max_iter=1000) print list(result.parameters()) exit(0) # for k in range(10): # X = flex.double([item for i in range(100) for item in [1,i-50]]) # X.reshape(flex.grid(100, 2)) # Y = flex.double([poisson(a*i+c,1)[0] for i in range(100)]) # B = flex.double([0, 0]) # P = flex.double([1] * len(Y)) # B = glm33(X,Y,B,P) # print exp(B[0]), exp(B[1]) Y2 = [] Y3 = []
flex.double(initial), max_iter=1000) assert result.converged() tt += time() - st beta = list(result.parameters()) print beta Y2 = [exp(beta[0]*x[0] + beta[1]*x[1]) for x in X] P = [1.0 for x in X] result = glm( flex.double(X), flex.double(Y1), flex.double(initial), flex.double(P), max_iter=1000) assert result.converged() beta = list(result.parameters()) print beta Y3 = [exp(beta[0]*x[0] + beta[1]*x[1]) for x in X] m1 = max(Y1) m2 = max(Y2) m3 = max(Y3) m = ceil(max([m1,m2,m3]))
max_iter=1000) assert result.converged() tt += time() - st beta = list(result.parameters()) print(beta) Y2 = [exp(beta[0] * x[0] + beta[1] * x[1]) for x in X] P = [1.0 for x in X] result = glm( flex.double(X), flex.double(Y1), flex.double(initial), flex.double(P), max_iter=1000, ) assert result.converged() beta = list(result.parameters()) print(beta) Y3 = [exp(beta[0] * x[0] + beta[1] * x[1]) for x in X] m1 = max(Y1) m2 = max(Y2) m3 = max(Y3) m = ceil(max([m1, m2, m3]))