我想通过仿真来估计线性模型和线性混合模型中的偏差。偏倚是E(β)-beta,其中β是我的X和Y之间的关联。
我从正态分布生成X变量,从多元正态分布生成Y。
我明白如何从模拟中计算E( beta ),这是所有模拟的beta估计之和除以模拟的总数,但我不知道如何估计真实的beta。
meanY <- meanY + X*betaV这就是我如何生成的meanY (betaV是效果大小),然后用于生成多变量Y结果,如下所示。
Y[jj,] <- rnorm(nRep, mean=meanY[jj], sd=sqrt(varY))我明白如何从模拟中计算E( beta ),这是所有模拟的beta估计之和除以模拟的总数,但我不知道如何估计真正的beta。
根据我有限的理解,真正的beta不是从数据中获得的,而是从我设置固定beta值的设置中获得的。
根据我如何生成我的数据,我如何估计真正的贝塔?
发布于 2019-05-11 18:05:38
有几种模拟偏置的方法。我将以一个简单的例子为例,使用线性模型。线性混合模型可能会使用类似的方法,但我不确定它是否适用于广义线性混合模型(我只是不确定)。
当使用一个简单的线性模型时,一种简单的估计偏差的方法是“选择”从哪个模型中估计一个偏差。比方说,Y = 3 + 4 * X + e。我选择了beta <- c(3,4),因此我只需要模拟我的数据。对于线性模型,模型假设如下
使用这三个假设,模拟一个固定的设计是简单的。
set.seed(1)
xseq <- seq(-10,10)
xlen <- length(xseq)
nrep <- 100
#Simulate X given a flat prior (uniformly distributed. A normal distribution would likely work fine as well)
X <- sample(xseq, size = xlen * nrep, replace = TRUE)
beta <- c(3, 4)
esd = 1
emu <- 0
e <- rnorm(xlen * nrep, emu, esd)
Y <- cbind(1, X) %*% beta + e
fit <- lm(Y ~ X)
bias <- coef(fit) -beta
>bias
(Intercept) X
0.0121017239 0.0001369908 这表明有很小的偏见。为了测试这种偏差是否显著,我们可以执行wald测试或t检验(或者重复这个过程1000次,并检查结果的分布)。
#Simulate linear model many times
model_frame <- cbind(1,X)
emany <- matrix(rnorm(xlen * nrep * 1000, emu, esd),ncol = 1000)
#add simulated noise. Sweep adds X %*% beta across all columns of emany
Ymany <- sweep(emany, 1, model_frame %*% beta, "+")
#fit many models simulationiously (lm is awesome!)
manyFits <- lm(Y~X)
#Plot density of fitted parameters
par(mfrow=c(1,2))
plot(density(coef(manyFits)[1,]), main = "Density of intercept")
plot(density(coef(manyFits)[2,]), main = "Density of beta")
#Calculate bias, here i use sweep to substract beta across all rows of my coefficients
biasOfMany <- rowMeans(sweep(coef(manyFits), 1, beta, "-"))
>biasOfMany
(Intercept) X
5.896473e-06 -1.710337e-04 在这里,我们看到偏倚被减少了很多,并且改变了betaX的符号,给出了相信偏差是不重要的理由。
改变设计将允许我们使用相同的方法来观察交互、离群点和其他东西的偏倚。
对于线性混合模型,可以执行相同的方法,但是在这里您必须设计随机变量,这需要做更多的工作,据我所知,lmer的实现并不适合Y所有列的模型。
然而,b (随机效应)是可以模拟的,任何噪声参数都可以模拟。但是,请注意,由于b是一个包含单个模拟结果的向量(通常是多元正态分布),因此必须重新运行每个模拟b的模型。基本上,这将增加一个人将不得不重新运行模型拟合程序的次数,以获得一个好的偏差估计。
https://stackoverflow.com/questions/56092529
复制相似问题