1

所以这是游戏计划。我试图在下面使用这个数据集(将是一个结构对象),通过它运行一个曲线回归模型。然后,我想在每个点取斜率(即每个 x 的一阶导数值),并将具有该斜率信息的数据表保存在它自己的列中。

输入.txt:

yval    xval
0.198   0.125
0.18    0.0625
0.126   0.03125
0.078   0.015625
0.066   0.007813
0.03    0.0039065
0.00    0.0

脚本.r:

dat <- read.table("input.txt", header=T, sep="\t")
library(drc)
library(ggplot2)

mm <- structure(list(x = dat$xval, y = dat$yval), .Names= c("x","y"), class = "data.frame")
model.drm <- drm (y ~ x, data = mm, fct = MM.2())
mml <- data.frame(x = seq(0, max(mm$x), length.out = 100)) #I actually don't know what length does, and am unsure about this line
mml$y <- predict(model.drm, newdata = mml)

ggplot(mm, aes(x = x, y = y)) +
    theme_bw() +
    xlab("x lab") +
    ylab("y lab") +
    ggtitle("dose response curve") +
    geom_point(alpha = 0.5) +
    geom_line(data = mml, aes(x = x, y = y), colour = "blue")
ggsave("mm.pdf", width = 6, height = 4)

#Need to pass in vector (list) of x, into the derivative of mml's function.
#Output will be a list of corresponding slope values for each of those x's.
#append said slope values to the data frame and save it.

dev.off()

摘要:获取数据,运行回归,获取每个值的斜率,然后将具有斜率的相同数据保存在单独的列中。输出将是同一张表,但有一个新的第三列:与每个 x 值相关的斜率。输出必须如下所示:

输出.txt:

yval    xval    slopes
0.198   0.125   slope1
0.18    0.0625  slope2
0.126   0.03125 slope3
0.078   0.01562 slope4
0.066   0.00781 slope5
0.03    0.00396 slope6
0.00    0.00    slope7

问题是,如何“获取”该信息以及如何重新保存它是我不知道如何正确执行的事情。我不熟悉 R 如何为方程进行微积分。我可以从 summary() 中得到方程的常数,但我无法处理它。

我无法找到正确的信息组合(或者可能只是我正在使用的搜索词?)。如果其中一些看起来像是不正确的伪代码,我深表歉意,至少可以说,R 一直在学习……令人沮丧。帮助?

R 版本 3.2.4 Redhat Linux 4.1.2 数据借鉴自https://plot.ly/~gwaligroski/15/michaelis-menten-equation 代码改编自https://rpubs.com/RomanL/6752

4

1 回答 1

2

我将首先提出这一行,您正在创建一个数据框,该数据框有一个长度为 100 的变量,从 0 到 max(mm$x) 等距

mml <- data.frame(x = seq(0, max(mm$x), length.out = 100)) #I actually don't know what length does, and am unsure about this line

Predict 然后使用该 data.frame 来决定要预测哪些点,因此如果您使用 length.out = 5 它将是一条非常粗糙的曲线,而 length.out=1000 将是一条非常平滑的曲线。

因此,您不想预测 1:max(mm$x) 之间的序列,而是要预测 xval ,所以我会使用

dat$predicted<-predict(model.drm, newdata=dat["xval"])

这将使用预测值向您的dat数据框中添加另一列。

添加

 +geom_point(data = dat, aes(x=xval,y=predicted),colour="red")

到你的ggplot,你应该在你想要的x点处看到曲线上的红点。

注意:我不擅长 R,所以我无法解释为什么 dat["xval"] 返回一个 1 变量数据框(您需要它)而 dat$xval 返回一个不适用于预测的向量。

于 2016-04-28T22:55:18.410 回答