背景:我是贝叶斯统计的新手,正在尝试使用rstan
. 所有变量都是连续的,没有层次结构。
我的一个预测因子是左删失的,因为它低于化学分析的检测限。在多元回归中处理这个问题的最佳方法是什么?到目前为止,我可以看到一些可能性:
- 替换规则,例如“将低于检测限的所有值替换为常数,例如检测限/2”。这显然不严谨。
- 多重插补,但是(i)我不知道如何处理高于检测限的值可能由插补过程产生的事实,我很可能知道这是错误的,并且(ii)我'不确定多重插补与贝叶斯方法的效果如何,因为我想不出一种将后验分布从拟合汇总到不同插补数据集的好方法
- 根据先验知识和数据从有意义的分布中模拟值数据,并将低于检测限的值随机分配给相关点。这会遇到与#2 类似的问题,因为我必须模拟多组值,分别对它们进行建模,然后弄清楚如何整合后验。
我错过了更好的选择吗?是否有有用的贝叶斯技巧可以帮助解决这个问题?我也对非贝叶斯选项持开放态度。
下面的直方图显示了值的分布。该图采用对数刻度,因为这对于该变量来说是最自然的。为了清晰起见,我将低于检测限(约 25% 的数据)的值视为检测限的 1/10,并添加了一条红线将它们与其余点分开。注意红线不是精确的检测限;红线右侧的最小量化值处于假定极限。事实上,只有很少的值恰好处于极限,这表明测量之间的检测极限可能存在一些变化,但我不介意为了这个问题的目的而忽略这一点。
更新:
这是我的rstan
代码,以防万一。Beta 1 到 4 代表主效应,5 和 6 是交互项(介于 1 和 3 和 2 和 4 之间)。因此,删失预测变量也存在于交互项中,这是我之前忽略的一个复杂因素。
data {
int<lower=0> n; // number of data items
int<lower=0> k; // number of predictors
vector[n] Y; // outcome vector
matrix[n,k] X; // predictor matrix
int n2; //the size of the new_X matrix
matrix[n2,k] new_X; //the matrix for the predicted values
}
parameters {
real alpha; // intercept
vector[k] beta; // coefficients for predictors
real<lower=0> sigma; // error scale (cauchy truncated at zero)
}
model {
beta[1] ~ normal(-0.75, 1); //prior for beta
beta[2] ~ normal(0, 3); //prior for beta
beta[3] ~ normal(0, 3); //prior for beta
beta[4] ~ normal(0, 3); //prior for beta
beta[5] ~ normal(0, 3); //prior for beta
beta[6] ~ normal(0, 3); //prior for beta
sigma ~ cauchy (0, 2.5); //prior for sigma
Y ~ normal(alpha + X * beta, sigma); // likelihood
}
generated quantities {
vector[n2] y_pred;
y_pred = new_X * beta; //the y values predicted by the model
}