R仿真中线性回归和线性混合模型中的偏差估计

时间:2019-05-11 17:05:44

标签: r linear-regression simulation mixed-models beta

我想运行模拟以估计线性模型和线性混合模型中的偏差。偏倚是Eβ-beta,其中beta是我的X和Y之间的关联。

我从正态分布生成X变量,从多元正态分布生成Y。

我了解如何从模拟中计算出Eβ,这是所有模拟中的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?

1 个答案:

答案 0 :(得分:2)

有两种模拟偏差的方法。我将使用线性模型作为一个简单的例子。 线性混合模型可能会使用类似的方法,但是我不确定它是否适用于广义线性混合模型(我不确定)。

使用简单的线性模型时,估算偏差的一种简单方法是“选择”哪个模型来估算偏差。举例来说,Y = 3 + 4 * X + e。我选择了beta <- c(3,4),因此我只需要模拟我的数据即可。对于线性模型,模型假设为

  
      
  1. 观察是独立的
  2.   
  3. 观察结果呈正态分布
  4.   
  5. 平均值可以用线性预测子来描述
  6.   

使用这3个假设,模拟固定设计非常简单。

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 

表示偏差小。要测试这种偏见是否显着,我们可以执行瓦尔德检验或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的每个模拟重新运行模型。基本上,这将增加必须重新运行模型拟合过程的次数,以便获得对偏差的良好估计。