如何使用 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方法比较y1
的n1
和y2
的n2
的系数。我该怎么做?
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 不同。
顺便说一句,您的代码没有 运行 所示。这可能会阻止人们回答您的问题。
我正在尝试使用 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方法比较y1
的n1
和y2
的n2
的系数。我该怎么做?
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 不同。
顺便说一句,您的代码没有 运行 所示。这可能会阻止人们回答您的问题。