是否可以通过一次调用使用 emmeans() 指定连续预测变量的唯一组合?

问题描述 投票:0回答:1

我在 R 中使用 emmeans() 来估计用单结拟合线性模型后的边际均值。我知道我们可以使用

at = list(x = c())
明确预测器应设置为什么值。我需要通过为结定义一个新变量来创建模型,这使得创建这个
at =
更加复杂。

可重现的示例:

#
library(dplyr)
library(emmeans)
set.seed(080723)

# Simulate data
n <- 1000
df <- data.frame(x = runif(n, 0, 30))
df <- df%>%
  rowwise()%>%
  mutate(y = case_when(
  x <= 15 ~ (2*x) + rnorm(1, 0, 5),
  x > 15 ~ (2*x) + (5*(x-15)) + rnorm(1, 0, 5)
  ))%>%
  ungroup()

# Plot the simulated data
plot(df$x, df$y, pch = 16, col = "blue", xlab = "x", ylab = "y")

# Manually add a covariate to act as a spline in regression
df <- df%>%mutate(xk_15 = case_when(
  x <= 15 ~ 0,
  x > 15 ~ x-15
))

# LM using that covariate
m1 <- lm(y ~ x + xk_15, data = df)
summary(m1)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.53337    0.39976  -1.334    0.182    
x            2.01647    0.03994  50.493   <2e-16 ***
xk_15        4.99538    0.07298  68.452   <2e-16 ***

现在,假设我想要 x = 5、10、15 和 20 时 y 的估计边际平均值。但是,考虑到我的模型公式,我还需要指定 xk_15。为了匹配所需的 x 值,xk_15 的值应分别为 0、0、0、5。

我可以通过运行 emmeans() 两次来完成此任务。

首先,

emmeans(m1, "x", at = list(x=c(5,10,15), xk_15=c(0)))

x emmean    SE  df lower.CL upper.CL
  5   9.55 0.248 997     9.06     10.0
 10  19.63 0.206 997    19.23     20.0
 15  29.71 0.322 997    29.08     30.3

然后,

emmeans(m1, "x", at = list(x=c(20), xk_15=c(5)))

 x emmean    SE  df lower.CL upper.CL
 20   64.8 0.203 997     64.4     65.2

我的问题是:有没有办法在一次调用中完成此任务? 从概念上讲,类似于

emmeans(m1, "x" , at = list(x=c(5,10,15,20),xk_15=c(0,0,0,5)))
,它将匹配每个
at = 
向量的元素。请注意,该代码不起作用。

我介绍当前的样条设置,因为它是我的驱动力,但我可以想象这可以推广到使用 emmeans() 的任何两个连续预测变量。当然,我可以获得所需的估计边际均值,如图所示,调用 emmeans() 两次,但是如果能够在一行中指定连续预测变量的特定组合,尤其是在有许多感兴趣的组合的情况下,那就太好了。

r prediction lm emmeans
1个回答
0
投票
grid_data <- data.frame(x=c(5, 10, 15, 20), xk_15=c(0, 0, 0, 5))

emm <- emmeans(m1, specs = "x", grid = grid_data)
print(emm)

这样,您将能够在一次调用中完成。

© www.soinside.com 2019 - 2024. All rights reserved.