2013-09-25 88 views
0

我認爲這很簡單,但我有真正的困難。無論做什麼,我都可以使用excel或R。我只需要知道這些曲線何時通過某個值。我的曲線通過一定的門檻

我試着在我的圖表中添加一個額外的行來查看是否存在交叉函數但沒有。

Years Y 
10  0 
20  0 
50  5.54 
100  21.81 
200  46.24 
500  71.96 
1000 84.74 
1500 89.63 
2000 91.94 

我需要知道這個曲線穿過90

Years Y 
10  1 
20  0.96 
50  0.28 
100  0 
200  0 
500  0 
1000 0 
1500 0 
2000 0 

我需要知道這個曲線穿過0.01

編輯的情況下,它可以幫助(而不是從OP):

SO19006597 question example

+0

我(也許是低技術含量)的方法是將曲線擬合到數據(R ,並且可能是excel,具有這個功能)。然後計算出當y等於0.01或90時曲線的x值。如果可能的話,擬合第二個數據集的曲線可能會在10-100個區域形成更多數據。 –

+1

這不是曲線;這是一個點的集合。你有沒有適合你可以分享的曲線? – Peyton

+0

我只是把它放入excel並將其繪製爲散點圖 – Colin

回答

1

您需要做的第一件事就是決定如何將曲線擬合到您的數據。有很多方法可以做到這一點,顯然答案取決於您的選擇。如果「曲線」你僅僅意味着線性插值(即「連接 - 在點」),則這樣的功能會發現第一次超過閾值:

findCross<-function(years, y, value){ 
    over <- y > value 
    w <- which(over != over[1])[1] 
    frac <- (value - y[w-1])/(y[w] - y[w-1]) 
    years[w-1] + (years[w] - years[w-1]) * frac 
} 
1

我會用適合的數據無論是線性,多項式或非線性擬合最適合您的數據和目的。然後使用您創建的健身功能與運行

uniroot(fit_fun-90,upperbound,lowerbound)

編輯 - 每托馬斯的評論: 的任何R結果的配件工具,如lmnls包括所有條款中的係數擬合功能。例如,對於簡單的線性擬合,提供了斜率和截距。有了這些信息,請創建一個新的fit_fun<-function(x) {intercept + slope*x}

減去90的原因是uniroot尋找「根」,即零值,所以我基本上應用了一個偏移量的函數。有關完整的詳細信息,請參閱?uniroot

+1

這可能會從更多的解釋中受益。例如,'fit_fun'看起來像什麼?爲什麼是-90? – Thomas

2

如果可以設置逆模型$ x = f(y)$,例如Years ~ Y,你可以建立和評估。 (想想反向建模的後果,儘管如此。)

  • 對於線性逼近,看看?approx
  • 如果您需要特定類型的模型,那麼也許您可以設置您所請求的依賴關係的逆模型,然後?predict是您的朋友。

這裏是你的第一個數據集古典與逆建模之間的差異爲例(與loess):

經典:
classical model

逆:
inverse model

由於逆模型假定年數上的誤差爲>> Y上的誤差,Y = 90線跨越t的95%置信區間他的模特適合約。對於逆模型,年= 1375年和1900年。對於經典模型,假設Y上的誤差占主導地位。在那種情況下,所有年份都在約。 800在擬合的95%置信區間內,置信區間幾乎接近第一次在年= 350左右時的Y = 90線。
請注意,點估計值也有所不同:Y = 90與ca的典型擬合值相交。 1435,而逆配合在1635年

交叉(當然,你可能會想要去一個更嚴格的模型)

+1

@pnuts:OP對第一組數據說:「我需要知道這條曲線穿過90°的位置 - 通過觀察預計在1500年和2000年之間的某處,可能接近1500比2000年,**沒有**介於20和50之間。 – cbeleites

+1

@pnuts:沒問題 – cbeleites