如何从R中的y变量估计x变量?

如何从R中的y变量估计x变量?,r,ggplot2,tidyverse,R,Ggplot2,Tidyverse,以下是我的数据: # A tibble: 8 x 3 CFU strain diltn <dbl> <chr> <dbl> 1 159 aM12 8748 2 124. aM12 2916 3 76.5 aM12 972 4 22 aM12 324 5 16.5 aM12 108 6 17 aM12 36 7 22.5 aM12 12 8 17.5 aM12

以下是我的数据:

# A tibble: 8 x 3
    CFU strain diltn
  <dbl> <chr>  <dbl>
1 159   aM12    8748
2 124.  aM12    2916
3  76.5 aM12     972
4  22   aM12     324
5  16.5 aM12     108
6  17   aM12      36
7  22.5 aM12      12
8  17.5 aM12       4

我想估计在什么“diltn”(x变量),我会得到77“CFU”(y变量)

我在excel中对此进行了管理,并将其绘制为以下图表,以说明我希望实现的目标:


根据散点图,我们可能可以将非线性回归线拟合到数据集。假设您的数据集名为
dat
。我们可以使用
nls
函数来拟合回归模型。请注意,找到可能的方程式和起始值需要一些努力和思考。在这种情况下,方程为
CFU~a*diltn/(b+diltn)
a
b
的起始值分别为
100和
1000

library(tidyverse)

fit <- nls(formula = CFU ~ a * diltn/(b + diltn), 
           start = list(a = 100, b = 1000), data = dat)

summary(fit)

# Formula: CFU ~ a * diltn/(b + diltn)
# 
# Parameters:
#   Estimate Std. Error t value Pr(>|t|)    
# a   187.32      21.25   8.814 0.000118 ***
# b  1514.27     517.50   2.926 0.026420 *  
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 13.17 on 6 degrees of freedom
# 
# Number of iterations to convergence: 4 
# Achieved convergence tolerance: 3.555e-06

我觉得这个模型不错

最后,我们可以过滤
Pred
值,以找到
diltn
的可能值。在这种情况下,我认为
1057
可能是一个可能的答案

dat2 %>% filter(Pred > 76.9, Pred < 77.1)

# # A tibble: 5 x 2
#   diltn  Pred
#   <int> <dbl>
# 1  1055  76.9
# 2  1056  77.0
# 3  1057  77.0
# 4  1058  77.0
# 5  1059  77.1
dat2%>%过滤器(Pred>76.9,Pred<77.1)
##tibble:5 x 2
#diltn Pred
#    
# 1  1055  76.9
# 2  1056  77.0
# 3  1057  77.0
# 4  1058  77.0
# 5  1059  77.1

或者,由于我们已经拟合了一个非线性回归模型,并且我们知道拟合参数
a
b
,我们可以设置
CFU
=
77
,并计算
diltn
。我的计算表明,
diltn
1056.914

基于散点图,我们可能可以将非线性回归线拟合到数据集。假设您的数据集名为
dat
。我们可以使用
nls
函数来拟合回归模型。请注意,找到可能的方程式和起始值需要一些努力和思考。在这种情况下,方程为
CFU~a*diltn/(b+diltn)
a
b
的起始值分别为
100和
1000

library(tidyverse)

fit <- nls(formula = CFU ~ a * diltn/(b + diltn), 
           start = list(a = 100, b = 1000), data = dat)

summary(fit)

# Formula: CFU ~ a * diltn/(b + diltn)
# 
# Parameters:
#   Estimate Std. Error t value Pr(>|t|)    
# a   187.32      21.25   8.814 0.000118 ***
# b  1514.27     517.50   2.926 0.026420 *  
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 13.17 on 6 degrees of freedom
# 
# Number of iterations to convergence: 4 
# Achieved convergence tolerance: 3.555e-06

我觉得这个模型不错

最后,我们可以过滤
Pred
值,以找到
diltn
的可能值。在这种情况下,我认为
1057
可能是一个可能的答案

dat2 %>% filter(Pred > 76.9, Pred < 77.1)

# # A tibble: 5 x 2
#   diltn  Pred
#   <int> <dbl>
# 1  1055  76.9
# 2  1056  77.0
# 3  1057  77.0
# 4  1058  77.0
# 5  1059  77.1
dat2%>%过滤器(Pred>76.9,Pred<77.1)
##tibble:5 x 2
#diltn Pred
#    
# 1  1055  76.9
# 2  1056  77.0
# 3  1057  77.0
# 4  1058  77.0
# 5  1059  77.1

或者,由于我们已经拟合了一个非线性回归模型,并且我们知道拟合参数
a
b
,我们可以设置
CFU
=
77
,并计算
diltn
。我的计算表明,diltn
1056.914

这实际上是一个比看起来更棘手的问题(一般来说)。这并不是说不能做到(有很多选择),而是在很大程度上取决于数据的行为。例如,假设感兴趣的y值是20而不是77。现在,任何介于4和324之间的diltn值都是“合理”答案

为了解决这个问题,我们使用统计模型。如果我猜对了,您正在使用剂量-反应模型(或类似的模型-例如,我在分析中使用了标准曲线),您可以查看
drc
包中的
drm()
,它可以适当地拟合这些曲线

比如:

mod <- drm(CFU ~ diltn, data = data, fct = LL.4())
plot(mod)

不过,我已经有一段时间没有读过上面的小插曲了,所以您可能需要阅读一些内容,以确保得到正确的结果。

这实际上是一个比看起来更棘手的问题(一般来说)。这并不是说不能做到(有很多选择),而是在很大程度上取决于数据的行为。例如,假设感兴趣的y值是20而不是77。现在,任何介于4和324之间的diltn值都是“合理”答案

为了解决这个问题,我们使用统计模型。如果我猜对了,您正在使用剂量-反应模型(或类似的模型-例如,我在分析中使用了标准曲线),您可以查看
drc
包中的
drm()
,它可以适当地拟合这些曲线

比如:

mod <- drm(CFU ~ diltn, data = data, fct = LL.4())
plot(mod)

不过,我已经有一段时间没有读过上面的小插曲了,所以您可能需要进行一些阅读,以确保得到正确的结果。

您对情节的处理似乎有误。如果你想从
CFU
预测
diltn
,你应该首先在
CFU
上回归
diltn
(例如
lm(diltn~CFY,data)
),然后预测(你可以使用
predict
函数)。OP必须澄清,但我怀疑这是一条剂量-反应曲线(或类似的东西). x轴为自变量,y轴为因变量。它需要这样建模,它类似于剂量-反应曲线。这些图表纯粹是为了展示我想要达到的视觉效果,而你对情节的处理似乎是错误的。如果你想从
CFU
预测
diltn
,你应该首先在
CFU
上回归
diltn
(例如
lm(diltn~CFY,data)
),然后预测(你可以使用
predict
函数)。OP必须澄清,但我怀疑这是一条剂量-反应曲线(或类似的东西). x轴为自变量,y轴为因变量。它需要这样建模,它类似于剂量-反应曲线。这些图表纯粹是为了展示我想要达到的视觉效果,比如这个软件包会做你想做的事情,只需要深入了解学习使用它的本质..看起来这个软件包会做你想做的事情,只需要深入了解学习使用它的本质。。