如何在预测模型上获得曲线的斜率?并将它们保存为表格

时间:2016-04-28 22:00:53

标签: r input calculus non-linear-regression

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

input.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

script.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值相关联的斜率。输出必须如下:

output.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

问题是,如何&#34;得到&#34;这些信息,以及如何重新保存它是我不知道如何正确做的事情。我不熟悉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

1 个答案:

答案 0 :(得分:2)

我首先提出这一行,你创建的数据框有一个长度为100的变量,从0到最大(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

预测然后使用该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 [&#34; xval&#34;]返回1个可变数据帧(你需要)和dat $ xval返回一个不适用于预测的向量。