2015-10-17 120 views
0

我有以下的一些實驗數據圖(見下文)。紅線是黑點的擬合曲線,這是實驗值。現在,0,0.583和1.916的前三個點形成了基線,接下來的兩個點2.083,2.416似乎是異常值。我如何編程擬合曲線,使其不考慮基線和異常值?目前,R顯然也試圖優化這些不相關的價值觀。如何排除R中曲線擬合的某些值?

plot

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") 
+0

只需忽略這些值。由於它們位於向量中的位置3和4,因此使用以下函數:plot(x [-c(3,4)],y [-c(3,4)],ylim = range(c(0,0.45)) ,pch = 1),並用x [-c(3,4)]替換x的任何其他實例。 – user1945827

+0

這隻會刪除圖中的點,但擬合曲線將保持不變。我實際上想要擬合曲線只適合不是異常值或基線的值。當我使用y [-c(3,4)]作爲lm時,它會拋出一個錯誤:'解析錯誤(text = x,keep.source = FALSE): :2:0:意外結束輸入 1:〜' – ste

+0

從給定擬合過程的數據中移除基線值,但不存在「異常值」,只有「數據層」。 –

回答

1

爲了避免裝配前5點使用subset=參數的nls給予負的位置的矢量,以排除:

nls(y ~ -p1/exp(x) + p1, start = list(p1 = 1), subset = -seq(5)) 

注意,該模型實際上是線性其單參數,所以我們可以用lm代替nls

lm(y ~ I(1-exp(-x)) - 1, subset = -seq(5))