Пример #1
0
def randprbmat(n):
	A = sackmat_m.make_zero_matrix(n, n)
	for i in range(0, n):
		for j in range(0, n):
			A[i][j] = random.random()
	row_normalize_matrix(A)
	return A
Пример #2
0
def compute_ols(X, y):

    [n, p] = X.dims()

    # Notation is as in the Wikipedia article
    Xt = X.transpose()
    XtX = Xt * X
    XtXi = XtX.inv()
    XtXi_Xt = XtXi * Xt
    P = X * XtXi_Xt
    I_n = sackmat_m.make_identity_matrix(n)
    M = I_n - P
    ones = [1.0] * n
    L = I_n - sackmat_m.outer(ones, ones).smul(1.0 / n)

    # Qxx = E[xi xi']
    Qxx = sackmat_m.make_zero_matrix(p, p)
    for k in xrange(0, n):
        for i in xrange(0, p):
            for j in xrange(0, p):
                Qxx[i][j] += X[k][i] * X[k][j]
    for i in xrange(0, p):
        for j in xrange(0, p):
            Qxx[i][j] /= n

    Qxxi = Qxx.inv()

    # This is the essence of OLS:
    coeffs = sackmat_m.matrix_times_vector(XtXi_Xt, y)
    s2 = sackmat_m.vector_times_matrix_times_vector(y, M, y) / (n - p)
    se_of_regression = math.sqrt(s2)
    sigmahat2 = s2 * (n - p) / n
    sigmahats = [0] * p
    for j in xrange(0, p):
        sigmahats[j] = math.sqrt(1.0 / n * sigmahat2 * Qxxi[j][j])

    # The tstat_j is betahat_j / sigma_j
    tstats = sackmat_m.vecdiv(coeffs, sigmahats)

    # Same as y - X betahat
    epsilonhats = sackmat_m.matrix_times_vector(M, y)

    pvalue = [999.0] * p
    model_sum_of_sq = 999.0
    residual_sum_of_sq = sackmat_m.vecdot(epsilonhats, epsilonhats)
    total_sum_of_sq = 999.0

    # One might assert that P, M are symmetric and idempotent; also PX=X and
    # MX=0.

    R2 = sackmat_m.vector_times_matrix_times_vector(y, L*P, y) / \
     sackmat_m.vector_times_matrix_times_vector(y, L, y)
    adjR2 = 1 - (n - 1) / (n - p - 1) * (1 - R2)

    return ols_info_t(n, p, coeffs, sigmahats, tstats, pvalue, R2, adjR2,
                      se_of_regression, model_sum_of_sq, residual_sum_of_sq,
                      total_sum_of_sq)
Пример #3
0
def compute_ols(X, y):

	[n, p] = X.dims()

	# Notation is as in the Wikipedia article
	Xt      = X.transpose()
	XtX     = Xt * X
	XtXi    = XtX.inv()
	XtXi_Xt = XtXi * Xt
	P       = X * XtXi_Xt
	I_n     = sackmat_m.make_identity_matrix(n)
	M       = I_n - P
	ones    = [1.0] * n
	L       = I_n  - sackmat_m.outer(ones, ones).smul(1.0/n)

	# Qxx = E[xi xi']
	Qxx     = sackmat_m.make_zero_matrix(p, p)
	for k in xrange(0, n):
		for i in xrange(0, p):
			for j in xrange(0, p):
				Qxx[i][j] += X[k][i] * X[k][j]
	for i in xrange(0, p):
		for j in xrange(0, p):
			Qxx[i][j] /= n

	Qxxi = Qxx.inv()

	# This is the essence of OLS:
	coeffs = sackmat_m.matrix_times_vector(XtXi_Xt, y)
	s2 = sackmat_m.vector_times_matrix_times_vector(y, M, y) / (n-p)
	se_of_regression = math.sqrt(s2)
	sigmahat2 = s2 * (n-p) / n
	sigmahats = [0] * p
	for j in xrange(0, p):
		sigmahats[j] = math.sqrt(1.0/n * sigmahat2 * Qxxi[j][j])

	# The tstat_j is betahat_j / sigma_j
	tstats = sackmat_m.vecdiv(coeffs, sigmahats)

	# Same as y - X betahat
	epsilonhats = sackmat_m.matrix_times_vector(M, y)

	pvalue             = [999.0] * p
	model_sum_of_sq    = 999.0
	residual_sum_of_sq = sackmat_m.vecdot(epsilonhats, epsilonhats)
	total_sum_of_sq    = 999.0

	# One might assert that P, M are symmetric and idempotent; also PX=X and
	# MX=0.

	R2 = sackmat_m.vector_times_matrix_times_vector(y, L*P, y) / \
		sackmat_m.vector_times_matrix_times_vector(y, L, y)
	adjR2 = 1 - (n-1)/(n-p-1) * (1-R2)

	return ols_info_t(n, p, coeffs, sigmahats, tstats, pvalue, R2, adjR2,
		se_of_regression, model_sum_of_sq, residual_sum_of_sq, total_sum_of_sq)
Пример #4
0
def find_sample_covariance_matrix(xs):
    nx = len(xs)
    dim = len(xs[0])
    mean = find_vector_mean(xs)
    Q = sackmat_m.make_zero_matrix(dim, dim)

    for i in range(0, dim):
        for j in range(0, dim):
            sum = 0.0

            for k in range(0, nx):
                sum += (xs[k][i] - mean[i]) * (xs[k][j] - mean[j])

            Q[i][j] = sum / (nx - 1.0)
    return Q
Пример #5
0
def find_sample_covariance_matrix(xs):
	nx   = len(xs)
	dim  = len(xs[0])
	mean = find_vector_mean(xs)
	Q  = sackmat_m.make_zero_matrix(dim, dim)

	for i in range(0, dim):
		for j in range(0, dim):
			sum = 0.0

			for k in range(0, nx):
				sum += (xs[k][i] - mean[i]) * (xs[k][j] - mean[j])

			Q[i][j] = sum / (nx-1.0)
	return Q
Пример #6
0
def make_histogram2(xy_pairs, lo_x, hi_x, num_x_bins, lo_y, hi_y, num_y_bins):
	bins = sackmat_m.make_zero_matrix(num_x_bins, num_y_bins)

	# Ensure they are floats.
	lo_x *= 1.0; hi_x *= 1.0; lo_y *= 1.0; hi_y *= 1.0

	# These are loop-invariant; hoist them out.
	mul_x = num_x_bins / (hi_x - lo_x)
	mul_y = num_y_bins / (hi_y - lo_y)

	for [x, y] in xy_pairs:
		if ((x >= lo_x) and (x < hi_x) and (y >= lo_y) and (y < hi_y)):
			x_idx = int((x-lo_x) * mul_x)
			y_idx = int((y-lo_y) * mul_y)
			bins[x_idx][y_idx] += 1
	return bins
Пример #7
0
def make_histogram2(xy_pairs, lo_x, hi_x, num_x_bins, lo_y, hi_y, num_y_bins):
    bins = sackmat_m.make_zero_matrix(num_x_bins, num_y_bins)

    # Ensure they are floats.
    lo_x *= 1.0
    hi_x *= 1.0
    lo_y *= 1.0
    hi_y *= 1.0

    # These are loop-invariant; hoist them out.
    mul_x = num_x_bins / (hi_x - lo_x)
    mul_y = num_y_bins / (hi_y - lo_y)

    for [x, y] in xy_pairs:
        if ((x >= lo_x) and (x < hi_x) and (y >= lo_y) and (y < hi_y)):
            x_idx = int((x - lo_x) * mul_x)
            y_idx = int((y - lo_y) * mul_y)
            bins[x_idx][y_idx] += 1
    return bins
Пример #8
0
	else: usage()

if (s < 0) or (s >= T):
	print >> sys.stderr, 's = %11.7f is outside (0, T = %11.7f).' & (s, T)
	sys.exit(1)
if (t < 0) or (t >= T):
	print >> sys.stderr, 't = %11.7f is outside (0, T = %11.7f).' & (t, T)
	sys.exit(1)

dt = T / nt

ts  = brownian.get_t_series(nt, dt)

if   which_process == 'bm':
	Bts = sackmat_m.make_zero_matrix(nX, nt)
	for i in xrange(0, nX):
		brownian.get_SRW_series(Bts[i], dt)
	values = Bts
elif which_process == 'bbbm':
	Bts = sackmat_m.make_zero_matrix(nX, nt)
	Xts = sackmat_m.make_zero_matrix(nX, nt)
	for i in xrange(0, nX):
		brownian.get_SRW_series(Bts[i], dt)
		brownian.get_BB_series_from_BM(Xts[i], Bts[i], X0, XT, dt)
	values = Xts

if   which_process == 'bm':    values = Bts
elif which_process == 'bbbm':  values = Xts

# ----------------------------------------------------------------
Пример #9
0
    elif re.match(r'^T=', arg): T = float(arg[2:])
    elif re.match(r'^nX=', arg): nX = int(arg[3:])
    elif re.match(r'^nt=', arg): nt = int(arg[3:])

    elif re.match(r'^X0=', arg): X0 = float(arg[3:])
    elif re.match(r'^m=', arg): m = float(arg[2:])
    elif re.match(r'^s=', arg): s = float(arg[2:])

    else: usage()

dt = T / nt

mean_series = [0.0] * nt
stddev_series = [0.0] * nt
Xts = sackmat_m.make_zero_matrix(nX, nt)

ts = brownian.get_t_series(nt, dt)
mrou.get_mrou_mean_series(mean_series, X0, m, ts)
mrou.get_mrou_stddev_series(stddev_series, s, ts)
for i in xrange(0, nX):
    mrou.get_mrou_series_from_SDE(Xts[i], X0, m, s, dt)

# Plot
for i in xrange(0, nt):
    print '%11.7f' % (ts[i]),
    print '%11.7f' % (mean_series[i] - 2.0 * stddev_series[i]),
    print '%11.7f' % (mean_series[i] - stddev_series[i]),
    print '%11.7f' % (mean_series[i]),
    print '%11.7f' % (mean_series[i] + stddev_series[i]),
    print '%11.7f' % (mean_series[i] + 2.0 * stddev_series[i]),
Пример #10
0
elif argc == 2:
    columns = tabutil_m.float_columns_from_file(sys.argv[1])
    y = columns[0]
    xs = columns[1:]
elif argc == 3:
    [y] = tabutil_m.float_columns_from_file(sys.argv[1])
    xs = tabutil_m.float_columns_from_file(sys.argv[2])
else:
    print >> sys.stderr, "Usage: %s {y and xs file name}" % (sys.argv[0])
    print >> sys.stderr, "Or: %s {xs file name} {y file name}" % (sys.argv[0])
    sys.exit(1)

# 2. compute XtX
k = len(xs)
n = len(y)
XtX = sackmat_m.make_zero_matrix(k, k)
for i in range(0, k):
    xi = xs[i]
    for j in range(i, k):
        xj = xs[j]
        xi_dot_xj = sackmat_m.vecdot(xi, xj)
        XtX[i][j] = xi_dot_xj
        if i != j:
            XtX[j][i] = xi_dot_xj

# 3. commpute XxT.inv
XtXi = XtX.inv()
# xxx handle singular ...

# 4. commpute XtX.inv Xt y
Xt = sackmat_m.sackmat(xs)
Пример #11
0
elif argc == 2:
	columns = tabutil_m.float_columns_from_file(sys.argv[1])
	y = columns[0]
	xs = columns[1:]
elif argc == 3:
	[y] = tabutil_m.float_columns_from_file(sys.argv[1])
	xs = tabutil_m.float_columns_from_file(sys.argv[2])
else:
	print >> sys.stderr, "Usage: %s {y and xs file name}" % (sys.argv[0])
	print >> sys.stderr, "Or: %s {xs file name} {y file name}" % (sys.argv[0])
	sys.exit(1)

# 2. compute XtX
k = len(xs)
n = len(y)
XtX = sackmat_m.make_zero_matrix(k, k)
for i in range(0, k):
	xi = xs[i]
	for j in range(i, k):
		xj = xs[j]
		xi_dot_xj = sackmat_m.vecdot(xi, xj)
		XtX[i][j] = xi_dot_xj
		if i != j:
			XtX[j][i] = xi_dot_xj

# 3. commpute XxT.inv
XtXi = XtX.inv()
# xxx handle singular ...

# 4. commpute XtX.inv Xt y
Xt = sackmat_m.sackmat(xs)
Пример #12
0
def circpmat2(n, p):
	A = sackmat_m.make_zero_matrix(n, n)
	for i in range(0, n):
		A[i][(i-1)%n] = p
		A[i][(i+1)%n] = 1-p
	return A
Пример #13
0
    if arg == '-h' or arg == '--help': usage()
    elif re.match(r'^T=', arg): T = float(arg[2:])
    elif re.match(r'^nR=', arg): nR = int(arg[3:])
    elif re.match(r'^nt=', arg): nt = int(arg[3:])
    elif re.match(r'^X0=', arg): X0 = float(arg[3:])
    elif re.match(r'^Y0=', arg): Y0 = float(arg[3:])
    elif re.match(r'^XT=', arg): XT = float(arg[3:])
    elif re.match(r'^YT=', arg): YT = float(arg[3:])

    else: usage()

dt = T / nt

ts = brownian.get_t_series(nt, dt)

BtXs = sackmat_m.make_zero_matrix(nR, nt)
BtYs = sackmat_m.make_zero_matrix(nR, nt)
Xts = sackmat_m.make_zero_matrix(nR, nt)
Yts = sackmat_m.make_zero_matrix(nR, nt)
for i in xrange(0, nR):
    brownian.get_BM_series(BtXs[i], dt)
    brownian.get_BM_series(BtYs[i], dt)
    brownian.get_BB_series_from_BM(Xts[i], BtXs[i], X0, XT, dt)
    brownian.get_BB_series_from_BM(Yts[i], BtYs[i], Y0, YT, dt)

# ----------------------------------------------------------------
# Print time-series data.

for i in xrange(0, nt):
    for j in xrange(0, nR):
        print ' %11.7f %11.7f' % (Xts[j][i], Yts[j][i]),
Пример #14
0
	if arg == '-h' or arg == '--help': usage()
	elif re.match(r'^T=',  arg): T  = float(arg[2:])
	elif re.match(r'^nR=', arg): nR = int  (arg[3:])
	elif re.match(r'^nt=', arg): nt = int  (arg[3:])
	elif re.match(r'^X0=', arg): X0 = float(arg[3:])
	elif re.match(r'^Y0=', arg): Y0 = float(arg[3:])
	elif re.match(r'^XT=', arg): XT = float(arg[3:])
	elif re.match(r'^YT=', arg): YT = float(arg[3:])

	else: usage()

dt = T / nt

ts  = brownian.get_t_series(nt, dt)

BtXs = sackmat_m.make_zero_matrix(nR, nt)
BtYs = sackmat_m.make_zero_matrix(nR, nt)
Xts  = sackmat_m.make_zero_matrix(nR, nt)
Yts  = sackmat_m.make_zero_matrix(nR, nt)
for i in xrange(0, nR):
	brownian.get_BM_series(BtXs[i], dt)
	brownian.get_BM_series(BtYs[i], dt)
	brownian.get_BB_series_from_BM(Xts[i], BtXs[i], X0, XT, dt)
	brownian.get_BB_series_from_BM(Yts[i], BtYs[i], Y0, YT, dt)

# ----------------------------------------------------------------
# Print time-series data.

for i in xrange(0, nt):
	for j in xrange(0, nR):
		print ' %11.7f %11.7f' % (Xts[j][i], Yts[j][i]),