存在可识别性问题。假设并且工作。然后,和也可以工作。β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
系数、传感器比例因子和误差方差的一致性非常好。β