如何找到合适的模型来拟合 r 中当前数据的非线性曲线
How to find appropriate model to fit the non linear curve of current data in r
我有一个数据集:Reg
dist ED
75 4.9
150 7.6
225 8.9
300 8.8
375 8.1
450 7.3
525 6.5
600 5.8
我想找一个拟合好的非线性回归模型。我试过:
plot(Reg$ED, Reg$dist)
lines(lowess(Reg$ED,Reg$dist))
m1 <- lm(ED ~poly(dist,2,raw=TRUE),data=Reg)
m2 <- lm(ED~dec+I(dist^2),data=Reg)
summary(m1)
summary(m2)
lines(Reg$PVFD_Mean, predict(m2), col=2)
但我不知道为什么回归模型的线没有显示在图中。所以我不知道如何为我的数据找到最合适的模型。我也试过 fitModel
但还是不行。
非常感谢任何帮助。
非常感谢
这里有一个使用 loess
函数构建您的 non-linear 模型的选项:
dt = read.table(text = "dist ED
75 4.9
150 7.6
225 8.9
300 8.8
375 8.1
450 7.3
525 6.5
600 5.8", header=T)
# build the model
m = loess(ED ~ dist, data = dt)
# see model summary
summary(m)
# Call:
# loess(formula = ED ~ dist, data = dt)
#
# Number of Observations: 8
# Equivalent Number of Parameters: 4.41
# Residual Standard Error: 0.06949
# Trace of smoother matrix: 4.87 (exact)
#
# Control settings:
# span : 0.75
# degree : 2
# family : gaussian
# surface : interpolate cell = 0.2
# normalize: TRUE
# parametric: FALSE
# drop.square: FALSE
# plot points and model fit
plot(dt$dist, dt$ED)
lines(dt$dist, m$fitted, col=2)
如果您出于某种原因真的想使用 lowess
功能,您可以执行以下操作:
plot(dt$dist, dt$ED)
lines(lowess(dt$dist, dt$ED), col = "blue")
lines(lowess(dt$dist, dt$ED, f = 0.5), col = "green")
lines(lowess(dt$dist, dt$ED, f = 0.3), col = "red")
这会给你相同的情节,但你必须 select 平滑参数的小值 f
:
这两种方法的区别很简单,loess
有一个默认值很好的平滑参数 (span = 0.75
),但是 lowess
有一个默认值不好的平滑参数在你的情况下足够的默认值 (f = 2/3
).
问题中 dist
和 ED
的值有时会互换。
m1 <- lm(ED ~ poly(dist, 2, raw = TRUE), data = Reg)
summary(m1)
plot(Reg$dist, Reg$ED)
lines(lowess(Reg$dist, Reg$ED))
lines(Reg$dist, predict(m1), col = 2)
我的方程式搜索显示非常适合 three-parameter 逆哈里斯屈服密度方程,"y = x / (a + b * pow(x, c))",参数 a = 1.4956613575678071E+01,b = 7.8559465184281589E-05,c = 2.1768293119284090E+00 给出 RMSE = 0.1002 和 R-squared = 0.9943
我有一个数据集:Reg
dist ED
75 4.9
150 7.6
225 8.9
300 8.8
375 8.1
450 7.3
525 6.5
600 5.8
我想找一个拟合好的非线性回归模型。我试过:
plot(Reg$ED, Reg$dist)
lines(lowess(Reg$ED,Reg$dist))
m1 <- lm(ED ~poly(dist,2,raw=TRUE),data=Reg)
m2 <- lm(ED~dec+I(dist^2),data=Reg)
summary(m1)
summary(m2)
lines(Reg$PVFD_Mean, predict(m2), col=2)
但我不知道为什么回归模型的线没有显示在图中。所以我不知道如何为我的数据找到最合适的模型。我也试过 fitModel
但还是不行。
非常感谢任何帮助。
非常感谢
这里有一个使用 loess
函数构建您的 non-linear 模型的选项:
dt = read.table(text = "dist ED
75 4.9
150 7.6
225 8.9
300 8.8
375 8.1
450 7.3
525 6.5
600 5.8", header=T)
# build the model
m = loess(ED ~ dist, data = dt)
# see model summary
summary(m)
# Call:
# loess(formula = ED ~ dist, data = dt)
#
# Number of Observations: 8
# Equivalent Number of Parameters: 4.41
# Residual Standard Error: 0.06949
# Trace of smoother matrix: 4.87 (exact)
#
# Control settings:
# span : 0.75
# degree : 2
# family : gaussian
# surface : interpolate cell = 0.2
# normalize: TRUE
# parametric: FALSE
# drop.square: FALSE
# plot points and model fit
plot(dt$dist, dt$ED)
lines(dt$dist, m$fitted, col=2)
如果您出于某种原因真的想使用 lowess
功能,您可以执行以下操作:
plot(dt$dist, dt$ED)
lines(lowess(dt$dist, dt$ED), col = "blue")
lines(lowess(dt$dist, dt$ED, f = 0.5), col = "green")
lines(lowess(dt$dist, dt$ED, f = 0.3), col = "red")
这会给你相同的情节,但你必须 select 平滑参数的小值 f
:
这两种方法的区别很简单,loess
有一个默认值很好的平滑参数 (span = 0.75
),但是 lowess
有一个默认值不好的平滑参数在你的情况下足够的默认值 (f = 2/3
).
问题中 dist
和 ED
的值有时会互换。
m1 <- lm(ED ~ poly(dist, 2, raw = TRUE), data = Reg)
summary(m1)
plot(Reg$dist, Reg$ED)
lines(lowess(Reg$dist, Reg$ED))
lines(Reg$dist, predict(m1), col = 2)
我的方程式搜索显示非常适合 three-parameter 逆哈里斯屈服密度方程,"y = x / (a + b * pow(x, c))",参数 a = 1.4956613575678071E+01,b = 7.8559465184281589E-05,c = 2.1768293119284090E+00 给出 RMSE = 0.1002 和 R-squared = 0.9943