如何使用 R 中的 deltaMethod 函数比较两个不同 glms 的系数?

How to use the deltaMethod function in R to compare coefficients from two different glms?

我正在尝试使用 deltaMethod in R

检查从两个方程中提取的两个系数之间的差异是否大于零
set.seed(111)
y1.predict <- rnorm(12,3,1)
y1.n1 <- c(1000, 2000, 3000, 4000,0,0,0,0,1000,4000,3000,3000)
y1.n2 <- c(0,0,0,0,1000, 2000, 3000, 4000,4000,1000,2000,2000)


y2.predict <- rnorm(16,5,1)
y2.n1 <- c(1000, 2000, 3000, 4000,0,0,0,0,1000,4000,3000,3000,1000,0,2500,4000)
y2.n2 <- c(0,0,0,0,1000, 2000, 3000, 4000,4000,1000,2000,2000,0,4000,2500,0)


df1 <- data.frame(y1.predict, y1.n1,y1.n2)
df2 <- data.frame(y2.predict, y2.n1,y2.n2)


y1 <- lm(y1.predict ~ n1 + n2)
y2 <- lm(y2.predict ~ n1 + n2)


#Typical use of delta method when comparing coefficients from same regression. Here I am trying to see if n1 - n2 > 0
g1.delta <- deltaMethod(y1,"(-n1) - (-n2)") 

我需要的是使用delta方法比较y1n1y2n2的系数。我该怎么做?

deltaMethod(...) 从拟合模型对象(示例中的 lm 对象)中提取方差协方差矩阵。如果您基于不同的数据比较两个回归,则您不知道 vcov。

如果您假设 n1(来自 fit.1)和 n2(来自 fit.2)是独立的,那么您可以这样使用 deltaMethod(...)

df1   <- data.frame(y1.predict, n1=y1.n1, n2=y1.n2)
df2   <- data.frame(y2.predict, n1=y2.n1, n2=y2.n2)
fit.1 <- lm(y1.predict ~ n1 + n2, df1)
fit.2 <- lm(y2.predict ~ n1 + n2, df2)
#
means <- c(coef(fit.1)['n1'], coef(fit.2)['n2'])
##
# assumes independence (covariance = 0)
#
vcov  <- diag(c(summary(fit.1)$coefficients['n1', 2],
                summary(fit.2)$coefficients['n2', 2])^2)
deltaMethod(means, 'n1-n2', vcov)
##            Estimate          SE       2.5 % 97.5 %
## n1 - n2  6.3295e-05  2.7686e-04 -4.7934e-04  6e-04

由于 95%CL 包含 0,因此您不能断定 n 不同。

顺便说一句,您的代码没有 运行 所示。这可能会阻止人们回答您的问题。