동일한 절편을 공유하는 여러 줄을 맞추려고합니다.PyMC 다중 선형 회귀
import numpy as np
import pymc
# Observations
a_actual = np.array([[2., 5., 7.]]).T
b_actual = 3.
t = np.arange(100)
obs = np.random.normal(a_actual * t + b_actual)
# PyMC Model
def model_linear():
b = pymc.Uniform('b', value=1., lower=0, upper=200)
a = []
s = []
r = []
for i in range(len(a_actual)):
s.append(pymc.Uniform('sigma_{}'.format(i), value=1., lower=0, upper=100))
a.append(pymc.Uniform('a_{}'.format(i), value=1., lower=0, upper=200))
r.append(pymc.Normal('r_{}'.format(i), mu=a[i] * t + b, tau=1/s[i]**2, value=obs[i], observed=True))
return [pymc.Container(a), b, pymc.Container(s), pymc.Container(r)]
model = pymc.Model(model_linear())
map = pymc.MAP(model)
map.fit()
map.revert_to_max()
계산 된 MAP 추정치는 실제 값과는 거리가 .니 다. 이 값은 sigmas
및 a
의 상한 및 하한에 매우 민감하므로 a
의 실제 값 (예 : a = [.2, .5, .7]
은 좋은 추정치를 제공합니다) 또는 회귀를 수행 할 회선 수에 매우 민감합니다.
내 선형 회귀를 수행하는 올바른 방법입니까?
ps : sigmas에 대한 지수 사전 배포를 사용하려고했지만 결과가 좋지 않았습니다.
3 가지 별도의 선형 회귀 분석을 실행할 수 있습니까? – nstjhp
각각의 관측치가 같은 요격 ('b')을 공유해야하기 때문에 나는 할 수 없다. 내 실제 모델은 그것보다 복잡합니다. 이것은 내 문제의 단순화 된 버전입니다. – synapski