【发布时间】:2015-10-20 05:59:46
【问题描述】:
我有以下一些实验数据图(见下文)。红线是黑点的拟合曲线,是实验值。现在,0、0.583 和 1.916 处的前三个点形成基线,而接下来的两个点 2.083、2.416 似乎是异常值。如何对拟合曲线进行编程,使其不考虑基线和异常值?目前,R 显然也在尝试优化那些不相关的值。
x <-
c(0,0.583333,1.916666,2.083333,2.416666,2.5,3.666666,5.916666,9,16.75,20)
y <-
c(
0.05464,0.05453,0.0544,0.18043,0.18151,0.12551,0.18792,0.2497,0.28359,0.31734,0.3263
)
plot(x,y, ylim = range(c(0,0.45)), pch = 1)
fit <- nls(y ~ -p1 / exp(x) + p1, start = list(p1 = 1))
xx <- seq(0,20, length = 200)
lines(xx, predict(fit, data.frame(x = xx)), col = "red")
【问题讨论】:
-
忽略这些值。由于它们位于向量中的位置 3 和 4,因此使用以下命令 plot(x[-c(3,4)],y[-c(3,4)], ylim=range(c(0,0.45)) ,pch=1) 并将 x 的任何其他实例替换为 x[-c(3,4)] 对 y 也是如此。
-
这只会从图中删除点,但拟合曲线将保持不变。我实际上希望拟合曲线只拟合不是异常值或基线的值。当我将你的 y[-c(3,4)] 用于 lm 时,它会引发错误:
Error in parse(text = x, keep.source = FALSE) : <text>:2:0: unexpected end of input 1: ~ -
从提供给拟合过程的数据中删除基线值,但没有“异常值”,只有“数据值”。
标签: r