2014-03-05 7 views
0

데이터에서 간단한 선형 함수와 감마 분포 잡음 항의 매개 변수를 추정하고 싶습니다. (참고 : 이는 후속 질문 인 https://stats.stackexchange.com/questions/88676/regression-with-unidirectional-noise이지만 간소화되고 구현에 특화된 것임). enter image description here"단방향"잡음을 이용한 회귀

내가 다음과 같이 pymc 사용하여 이러한 매개 변수 추정 시도 : 다음과 같이 보이는

import numpy as np 
np.random.seed(0) 

size = 200 
true_intercept = 1 
true_slope = 2 

# Generate observed data 
x_ = np.linspace(0, 1, size) 
true_regression_line = true_intercept + true_slope * x_ # y = a + b*x 
noise_ = np.random.gamma(shape=1.0, scale=1.0, size=size) 
y_ = true_regression_line + noise_ 

그러나

from pymc import Normal, Gamma, Uniform, Model, MAP 
# Define priors 
intercept = Normal('intercept', 0, tau=0.1) 
slope = Normal('slope', 0, tau=0.1) 
alpha = Uniform('alpha', 0, 2) 
beta = Uniform('beta', 0, 2) 
noise = Gamma('noise', alpha=alpha, beta=beta, size=size) 

# Give likelihood > 0 to models where the regression line becomes larger than 
# any of the datapoint 
y = Normal('y', mu=intercept + slope * x_ + noise, tau=100, 
      observed=True, value=y_) 

# Perform MAP fit of model 
model = Model([alpha, beta, intercept, slope, noise]) 
map_ = MAP(model) 
map_.fit() 

이 나에게주는 다음과 같이 내 관측 데이터를 생성 한 말 실제 값에서 멀리 떨어져있는 예상치 :

  • Interc EPT : 참 : 1.000, 기준 : 3.281
  • 기울기 : 참 : 2.000, 기준 : 내가 잘못 뭔가를하고 -3.400

암을?

+0

나는 주로 MAP.fit()에서 사용되는 최적화 프로그램의 문제점이라는 것을 알아 냈습니다. – frisbee

답변

0

감마 노이즈뿐만 아니라 일반 우도를 지정하는 것처럼 보이므로 모델에 추가 가우스 노이즈가 추가되어 보증되지 않습니다. 우도를 잔차의 분포이므로 정규 분포가 아닌 감마로 표현하십시오.

+0

이 문제는 일부 값의 기울기와 절편에 대해 우도가 0이 될 것이고 최대 우도 추정을위한 규칙 조건 중 일부가 위반된다는 것입니다 (https://stats.stackexchange.com/questions 응답 참조)./88676/regression-with-unidirectional-noise – frisbee

+0

위에서 쓴 피팅의 잔차는 Gaussian이 아니지만 PyMC 모델에서 지정한 것입니다. ML 추정을하지 않기 때문에 규칙 성 조건에 대해 걱정할 필요가 없습니다. 걱정할 필요가있는 것은 뒷부분을 적절하게 만드는 것입니다. 프리어를 사용하여 모델을 적절하게 제한 할 수 있습니다. –