混合效应 - 如何对观察的随机缩放进行建模?

机器算法验证 r lme4-nlme 非线性 混合模式
2022-04-12 13:03:03

我正在使用 lmer 分析三向混合线性模型:

Y ~ Factor1 * Factor2 * Factor3 + (1|sensor)

然而,不同的传感器具有不同的增益,在不同条件下统一缩放每个传感器的响应。因此,乘法随机效应似乎比我目前使用的加法更合适。像这样的东西可以在 R 中实现吗?

Y ~ [Factor1 * Factor2 * Factor3] (1|sensor)

(点代表乘法)

我的依赖度量可能是负数,因此使用 log(Y) 似乎不是一个好的解决方案。

编辑:

我想尝试使用标量符号对这个问题进行简化、概括的表述。我们将从一个简单的(固定效应)线性模型开始: 在这个模型中,给定系数可以是用普通最小二乘法很容易估计。现在,我们将假设不同的观测值子集由不同的传感器采样,并且每个传感器都有一些随机的附加贡献 ,从而使事情复杂化。这种贡献正态分布,期望值为 0,并且传感器之间的方差未知。

yi=Xi1β1+Xi2β2+Xi3β3+ϵ
Xyβu
yi=Xi1β1+Xi2β2+Xi3β3+usensor(i)+ϵ
该模型可以估计为混合效应模型:Y~X1+X2+X3+(1|sensor)但是,我想考虑乘法随机效应的情况:
yi=Xi1β1usensor(i)+Xi2β2usensor(i)+Xi3β3usensor(i)+..+ϵ

请注意,对于每个传感器,都有一个标量增益。我希望通过 R 估计这个模型。据我了解,标准随机斜率方法不会这样做,因为Y~X1+X2+x3+(X1+X2+X3|sensor)会估计模型 ,估计每个传感器的三个不同的随机增益,而不是一个。也无济于事。

yi=Xi1β1usensor(i)1+Xi2β2usensor(i)2+Xi3β3usensor(i)3+..+ϵ
Y~0+(X1+X2+X3|sensor)

有任何想法吗?

1个回答

存在可识别性问题。假设并且工作。然后,也可以工作。βuβ/22u

基本解决方案是为您的传感器构建标准曲线并在您的实验中运行它们。然后,您的原始测量值将转换为相同比例的测量值。

如果做不到这一点,您将需要让一个传感器成为“参考传感器”。其他传感器将具有可变性作为相对于参考传感器的比例因子。

然后,您的模型是非线性的。如果不以某种方式对其进行线性化,您可能不应该尝试使用线性模型方法对其进行拟合。相反,您应该使用某种非线性模型方法。

这是使用非线性最小二乘法的示例。在此示例中,我使用的是连续变量,尽管相同的方法通过使用效果编码对因子很有用。使用连续变量更容易演示。

# Gin up some data.

set.seed(838383)

Sensor <- data.frame(
    X1 = rnorm(150),
    X2 = rnorm(150),
    X3 = rnorm(150),
    U1 = c(rep(1, 50), rep(0, 50), rep(0, 50)),
    U2 = c(rep(0, 50), rep(1, 50), rep(0, 50)),
    U3 = c(rep(0, 50), rep(0, 50), rep(1, 50))
)

# Set some sensor gains and beta values.  Note
# that the first sensor is the reference sensor.

g <- c(1, 2, 4)
b <- c(-1, 1, 3)

# Simulate a simple version.  Careful of factors
# with numeric values.

Y <- with(
    Sensor,
    (b[1]*X1 + b[2]*X2 + b[3]*X3) * (g[1]*U1 + g[2]*U2 + g[3]*U3)
)

e <- rnorm(150)

Sensor$Y <- Y + e

这复制了您在上面显示的模型,在非线性变换之后具有附加误差。请注意,这也假设截距为零。

在此示例中,第一个传感器是参考传感器。第二个和第三个传感器产生的测量值分别与第一个传感器产生的测量值相差 2 和 4 倍的比例因子。

# Fit a model using nonlinear least squares.

library(nlme)

f <- function(b1, b2, b3, X1, X2, X3, g2, g3, U1, U2, U3) {

    (b1*X1 + b2*X2 + b3*X3) * (1*U1 + g2*U2 + g3*U3)

}

fit <- nls(
    formula = Y ~ f(b1, b2, b3, X1, X2, X3, g2, g3, U1, U2, U3),
    start= c(b1=1, b2=2.4, b3=7, g2=2, g3=3),
    data = Sensor
)

summary(fit)

#Formula: Y ~ f(b1, b2, b3, X1, X2, X3, g2, g3, U1, U2, U3)
#
#Parameters:
#   Estimate Std. Error t value Pr(>|t|)
#b1 -1.02810    0.06005  -17.12   <2e-16 ***
#b2  1.01436    0.06237   16.26   <2e-16 ***
#b3  3.12400    0.15062   20.74   <2e-16 ***
#g2  1.85447    0.09965   18.61   <2e-16 ***
#g3  3.86931    0.19169   20.18   <2e-16 ***
#---
#Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#
#Residual standard error: 1.106 on 145 degrees of freedom
#
#Number of iterations to convergence: 5
#Achieved convergence tolerance: 1.782e-07

系数、传感器比例因子和误差方差的一致性非常好。β