[英]Find equation of a line to fit data in R
我剛剛開始學習 R 並試圖展示汽車的 mpg 和馬力之間的關系。 我試圖獲得一條最適合的線來匹配數據,這樣我就可以用它來預測其他值。
#read data from csv file
data <- read.csv("auto-mpg.csv")
#get data
df <- head(data, 350)
#set x and y
x <- df$horsepower
y <- df$mpg
#change x from string to int
x <- strtoi(x)
#create scatterplot
scatter.smooth(x, y, main = "mpg vs horsepower",
xlab = "horsepower", ylab = "mpg",
pch = 19)
這是我想要指數衰減的圖表
這里有兩種方法。 首先,按照@Gregor Thomas 的建議對 log(y) 進行線性擬合,然后對原始數據進行非線性擬合。 您沒有提供可重現的數據,所以我使用來自mtcars
的類似數據:
data(mtcars)
plot(mpg~hp, mtcars, pch=20)
mpg.lm <- lm(log(mpg)~hp, mtcars) # Model is log(mpg) = a + b * hp
mpg.lm
#
# Call:
# lm(formula = log(mpg) ~ hp, data = mtcars)
#
# Coefficients:
# (Intercept) hp
# 3.460467 -0.003429
#
X <- seq(50, 350)
Y1 <- exp(predict(mpg.lm, data.frame(hp=X)))
lines(X, Y1, col="red")
紅線表示合身。 現在使用nls
直接擬合非線性 model。 我們將使用第一個 model 的系數來估計第二個的起始值:
a1 <- coef(mpg.lm)[1]
b1 <- coef(mpg.lm)[2]
mpg.nls <- nls(mpg ~ a * hp^b, mtcars, start=list(a=exp(a1), b=b1))
mpg.nls # Model is mpg = a * hp^b
# Nonlinear regression model
# model: mpg ~ a * hp^b
# data: mtcars
# a b
# 272.1171 -0.5404
# residual sum-of-squares: 288.7
#
# Number of iterations to convergence: 7
# Achieved convergence tolerance: 1.127e-07
Y2 <- predict(mpg.nls, data.frame(hp=X))
lines(X, Y2, col="blue")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.