2015-04-26 127 views
2

我有一個數據集遵循1/x曲線的模式。我想用模型擬合數據曲線。將曲線/模型擬合爲1/x數據

我試過使用多項式函數,但它看起來不太正確,因爲多項式曲線備份,而我的數據在底部漸近。我知道我在這裏錯過了一些術語,但我該如何做曲線?是否有1/x曲線的名稱?

x<-rep(1:20) 
y<-1/x 

fit <- lm(y ~ poly(x, 2)) 
plot(x, y) 
points(x, predict(fit), type="l", col="red", lwd=2) 

example graph

+3

你可以試試lm(y〜I(1/x))'嗎? –

+0

謝謝! 「I」代表什麼? – phocav

+0

參見'?I' ...... –

回答

2

它不工作,因爲你強迫它是一個2度的多項式poly(x, 2)

你要創建一些其他的變量,它是你的x值的轉換,然後運行該回歸:

x <- rep(1:20) 
transformedx <- 1/x 

y <- 1/x 

fit <- lm(y ~ transformedx) 
plot(x, y) 
points(x, predict(fit), type="l", col="red", lwd=2) 

爲了緊湊,你可以使用簡單的寫在lm線公式該I功能Mike.Gahan指出:

fit <- lm(y ~ I(1/x)) 

當然,這會是因爲您映射功能本身上一個完美的結合,但我假設在現實中你y值來自與1/x不完全匹配的數據源。

+0

但是,正如評論指出的那樣,'lm'可以直接適用於'1/x'。不需要外部轉換。 –

+0

是的,但我想強調的是,它需要在變換上進行迴歸,而不是原始序列。 – robbrit