Python pyMC3中多个测量值的融合
我有两个不同测量类型的数据帧(A,B),测量相同的未知变量。我试图通过将测量值线性回归到我精确知道的另一个变量(C),然后将两者中的不确定度结合起来,以减少测量中的不确定度,从而对隐藏变量进行更精确的测量。Python pyMC3中多个测量值的融合,python,measurement,pymc3,Python,Measurement,Pymc3,我有两个不同测量类型的数据帧(A,B),测量相同的未知变量。我试图通过将测量值线性回归到我精确知道的另一个变量(C),然后将两者中的不确定度结合起来,以减少测量中的不确定度,从而对隐藏变量进行更精确的测量。 So(x1*A0+x2*A1~C)和(y1*B0+y2*B1~C) 这看起来像pymc3中的一个层次模型,所以我已经尝试过了 with pm.Model() as model: ACalFactor = pm.Lognormal('ACalFactor', mu = 0, sd =
So(x1*A0+x2*A1~C)和(y1*B0+y2*B1~C) 这看起来像pymc3中的一个层次模型,所以我已经尝试过了
with pm.Model() as model:
ACalFactor = pm.Lognormal('ACalFactor', mu = 0, sd = 1,\
shape = len(A.columns))
BCalFactor = pm.Cauchy('BCalFactor', alpha = 0, beta = 100,\
shape = len(B.columns))
AtoBStdDev = pm.HalfCauchy('BStdDev', 10)
BTotalStdDev = pm.HalfCauchy('BStdDev', 10)
AtoBEst = pm.Normal('AtoB', mu = A.multiply(ACalFactor), sd = AtoBStdDev,\
shape = len(B.Columns))
BtoTotalEst = pm.Normal('BtoTotal', mu = tt.dot(B, BCalFactor),\
sd = BTotalStdDev, observed = C)
但这不起作用,所以我试了一下
with pm.Model() as model:
ACalFactor = pm.Lognormal('ACalFactor', mu = 0, sd = 1,\
shape = len(A.columns))
BCalFactor = pm.Cauchy('BCalFactor', alpha = 0, beta = 100,\
shape = len(B.columns))
AtoCStdDev = pm.HalfCauchy('BStdDev', 10)
BtoCStdDev = pm.HalfCauchy('BStdDev', 10)
AtoTotalEst = pm.Normal('AtoTotal', mu = tt.dot(A, ACalFactor), sd = AtoCStdDev,\
observed = C)
BtoTotalEst = pm.Normal('BtoTotal', mu = tt.dot(B, BCalFactor),\
sd = BTotalStdDev, observed = C)
首先,有一种方法可以使第一种方法发挥作用。我认为它遵循了
P(C | A,B)=P(A | C,B)*P(C | B)/P(A | B)
如果没有的话,有没有一种方法可以让我认为接下来的第二种方法发挥作用
P(0 | A0,B0)=P(0 | A0)*P(0 | B0)
谢谢你的帮助。这是我的第一篇帖子,如果我没有很好地解释问题或者把其他事情搞砸了,我很抱歉。如果我这样做了,请告诉我,我将确保不再犯错误
with pm.Model() as model:
ACalFactor = pm.Lognormal('ACalFactor', mu = 0, sd = 1,\
shape = len(A.columns))
BCalFactor = pm.Cauchy('BCalFactor', alpha = 0, beta = 100,\
shape = len(B.columns))
AtoCStdDev = pm.HalfCauchy('BStdDev', 10)
BtoCStdDev = pm.HalfCauchy('BStdDev', 10)
AtoTotalEst = pm.Normal('AtoTotal', mu = tt.dot(A, ACalFactor), sd = AtoCStdDev,\
observed = C)
BtoTotalEst = pm.Normal('BtoTotal', mu = tt.dot(B, BCalFactor),\
sd = BTotalStdDev, observed = C)