如何从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轴为因变量。它需要这样建模,它类似于剂量-反应曲线。这些图表纯粹是为了展示我想要达到的视觉效果,比如这个软件包会做你想做的事情,只需要深入了解学习使用它的本质..看起来这个软件包会做你想做的事情,只需要深入了解学习使用它的本质。。