使用R语言进行线性回归时如何通过给定的y值得到x的值?

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

我有以下数据表。我已经使用 ggplot2 对其进行了可视化。 我想知道当 y = 1 时,标准误差(se)和回归曲线的下边界对应的 x 轴值分别是多少?

library(tidyverse)

set.seed(114)
tableInput <- tibble(
  x = sample(60:270,100,replace = T) %>% sort(decreasing = F),
  y = rnorm(100,1,1) %>% abs(),
)

ggplot(tableInput, aes(x,y)) + 
  geom_smooth(method = lm) + 
  geom_hline(yintercept = 1) +
  scale_x_continuous(n.breaks = 10) +
  coord_cartesian(ylim = c(.5,2),xlim = c(50,280)) +
  theme_classic()

enter image description here

r ggplot2 math statistics tidyverse
1个回答
0
投票

基础 R 中的解决方案是使用

optimize
来查找
x
的值,从而给出所需的
y
值。

我们首先编写一个函数,当回归线位于

y = 1
时,该函数将达到最小值。

f1 <- function(val) {
  mod <- lm(y ~ x, tableInput)
  pred <- predict(mod, newdata = data.frame(x = val), se = TRUE)
  (1 - pred$fit)^2
}

我们可以对 SE 功能区的下边框执行相同的操作,如下所示:

f2 <- function(val) {
  mod <- lm(y ~ x, tableInput)
  pred <- predict(mod, newdata = data.frame(x = val), se = TRUE)
  (1 - (pred$fit + qnorm(0.025) * pred$se.fit))^2
}

现在我们可以使用

optimize
自动找到正确的 x 值:

x_regress <- optimize(f1, c(50, 275))$minimum
x_lower <- optimize(f2, c(50, 275))$minimum

x_regress
#> [1] 208.0677
x_lower
#> [1] 157.8854

我们可以通过将它们添加为绘图注释来确认这些是否正确:

ggplot(tableInput, aes(x,y)) + 
  geom_smooth(method = lm) + 
  geom_hline(yintercept = 1) +
  scale_x_continuous(n.breaks = 10) +
  annotate('point', x = c(x_regress, x_lower), y = 1, col = 'red') +
  coord_cartesian(ylim = c(.5,2),xlim = c(50,280)) +
  theme_classic()

enter image description here

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