In [ ]:
import healpy as hp
In [ ]:
import pymc as mc
import pandas as pd
In [ ]:
import patsy
In [ ]:
nside = 8
npix = hp.nside2npix(nside)
In [ ]:
vectors = hp.pix2vec(nside, np.arange(npix))
In [ ]:
true_monopole = 1.
true_dipole = np.array([.5, .5, 0])
In [ ]:
m = true_monopole + np.dot(true_dipole, vectors)
m += np.random.normal(0, .1, len(m))
In [ ]:
hp.mollview(m)
In [ ]:
hp.fit_dipole(m)
In [ ]:
labels = ["dx", "dy", "dz"]
data = pd.DataFrame({labels[i]:vectors[i] for i in range(3)})
data.index.name = "pix"
data["m"] = m
In [ ]:
outcome, predictors = patsy.dmatrices("m ~ dx + dy + dz + 1", data)
betas = np.linalg.lstsq(predictors, outcome)[0].ravel()
for name, beta in zip(predictors.design_info.column_names, betas):
print("%s: %s" % (name, beta))
In [ ]:
import statsmodels.api as sm
In [ ]:
sm.OLS?
In [ ]:
sm.WLS?
In [ ]:
smresult = sm.WLS(outcome, predictors, weights=10).fit()
print smresult.summary()
In [ ]:
import statsmodels.api as sm
In [ ]:
import statsmodels.formula.api as smf
In [ ]:
data.head()
In [ ]:
results = smf.ols("m ~ dx + dy + dz + 1", data=data).fit()
print results.summary()
In [ ]:
with mc.Model() as model:
mc.glm.glm("m ~ dx + dy + dz + 1", data)
step = mc.NUTS() # Instantiate MCMC sampling algorithm
trace = mc.sample(2000, step) # draw
In [ ]:
from pymc.plots import MultiTrace, kdeplot_op
vars = trace.varnames
if isinstance(trace, MultiTrace):
trace = trace.combined()
n = len(vars)
f, ax = subplots(n, 2, squeeze=False, figsize=(15,15))
for i, v in enumerate(vars):
d = np.squeeze(trace[v])
if trace[v].dtype.kind == 'i':
ax[i, 0].hist(d, bins=sqrt(d.size))
else:
kdeplot_op(ax[i, 0], d)
ax[i, 0].set_title(str(v))
ax[i, 1].plot(d, alpha=.35)
ax[i, 0].set_ylabel("frequency")
ax[i, 1].set_ylabel("sample value")
plt.tight_layout()
In [ ]: