簡體   English   中英

查找直線方程以擬合 R 中的數據

[英]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)

這是我想要指數衰減的圖表

mpg 與馬力圖

這里有兩種方法。 首先,按照@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM