我正在估算受限线性回归模型
lm(TC~Q+PL+PK+PF)
在线性限制下的系数
PL+PK+PF
总和为一。我想要回归系数和标准误差。我怎样才能在R中实现这一目标?
答案 0 :(得分:3)
如果您唯一的约束是估计需要总和为1,那么您可以通过重写模型来相当容易地构造它。假设我们有3个预测变量X1,X2,X3,我们拟合一个模型
y = B0 + B1*X1 + B2*X2 + B3*X3 + error
然后注意,如果我们有B1 + B2 + B3 = 1的限制,我们可以重写B3 = 1 - B1 - B2。在这种情况下,我们的模型变为
y = B0 + B1*X1 + B2*X2 + (1 - B1 - B2)*X3 + error
= B0 + B1*(X1 - X3) + B2*(X2 - X3) + X3 + error
= B0 + B1*P1 + B2*P2 + X3 + error
我们定义了两个新变量P1 = X1 - X3和P2 = X2 - X3。
因此,如果我们能够适应该模型,那么我们就可以开展业务。请注意,变量P1的估计参数将是我们对B1的估计,而我们对变量P2的估计参数将是我们对B2的估计。我们没有直接得到B3的估计值,但由于B3只是B1和B2的函数,我们会没事的。
所以让我们生成一些数据并拟合模型......
# Generate fake data and fix some parameters
set.seed(123412)
n <- 100
x1 <- rnorm(n)
x2 <- rnorm(n)
x3 <- rnorm(n)
b0 <- 2
b1 <- .2
b2 <- .5
b3 <- 1 - b1 - b2 # so that b1 + b2 + b3 = 1
e <- rnorm(n)
y <- b0 + b1*x1 + b2*x2 + b3*x3 + e
p1 <- x1 - x3
p2 <- x2 - x3
o <- lm(y ~ offset(x3) + p1 + p2)
现在我们可以轻松获得参数估算值
b1hat <- coef(o)[2]
b2hat <- coef(o)[3]
b3hat <- 1 - b1hat - b2hat
如果我们想要标准误差,我们可以从摘要输出中获取前两个参数的SE(或者通过取vcov(o)
输出的对角线的平方根)
# Get standard errors for B1 and B2
summary(o)
sqrt(diag(vcov(o)))
# Get a standard error for B3 - which is just
# a linear combination of B1 and B2
D <- c(0, -1, -1)
b3hat.se <- sqrt( t(D) %*% vcov(o) %*% D)