有没有使用许多简单模型自动拟合曲线的包?
通过简单的模型,我的意思是:
- ax+b
- ax^2+bx+c
- a*log(x) + b
- a*x^n+b
- 斧头/(1+bx)
- ax^n/(1+bx^n)
- ...
最好的方法是有一个函数,它接受两个向量参数 X 和 Y,并返回一个拟合简单模型及其 SSE 的列表。
有没有使用许多简单模型自动拟合曲线的包?
通过简单的模型,我的意思是:
最好的方法是有一个函数,它接受两个向量参数 X 和 Y,并返回一个拟合简单模型及其 SSE 的列表。
试试这个。 rhs
是右侧的字符向量,x
并且y
是数据。它为每个构造公式fo
,然后提取参数并将每个参数设置为 1 作为起始值。最后,它运行nls
并返回排序后的 SSE,结果是通过右侧命名的 SSE 向量。如果verbose=TRUE
(默认情况下),那么它还会显示每个拟合的输出。
sse <- function(rhs, x, y) sort(sapply(rhs, function(rhs, x, y, verbose = TRUE) {
fo <- as.formula(paste("y", rhs, sep = "~"))
nms <- setdiff(all.vars(fo), c("x", "y"))
start <- as.list(setNames(rep(1, length(nms)), nms))
fm <- nls(fo, data.frame(x, y), start = start)
if (verbose) { print(fm); cat("---\n") }
deviance(fm)
}, x = x, y = y))
## test
set.seed(123)
x <- 1:10
y <- rnorm(10, x)
# modify to suit
rhs <- c("a*x+b", "a*x*x+b*x+c")
sse(rhs, x, y)
您还可以查看提供评估分数多项式的函数的包。到目前为止,这些似乎是mboost
(使用函数FP
)和mfp
(使用函数mfp
)。尽管我没有尝试过这些软件包,但它们背后的理论符合您的需求。
该mfp
软件包于 2005 年在R-News中进行了描述。
可能感兴趣的两个参考是
Royston P, Altman D (1994) 使用连续协变量的分数多项式进行回归。应用统计。3:429–467。
Sauerbrei W, Royston P (1999) 构建多变量预后和诊断模型:使用分数多项式转换预测变量。皇家统计学会杂志(A 系列)162:71-94。
您可以拟合回归样条曲线并通过手动调整自由度几次来找到合适的拟合。尝试以下功能:
spline.fit <- function(x, y, df=5) {
## INPUT: x, y are two vectors (predictor and response);
## df is the number of spline basis. Increase "df" to fit more adaptively to the data.
require(splines) # available as default R Package.
bx <- bs(x, df) # B-spline basis matrix as New Predictors (dimension is "length(x)" by "df")
f <- lm(y ~ bx) # Linear Regression on Spline Basis (that is, "df" number of new predictors)
fy <- fitted(f) # Fitted Response
plot(x, y); lines(x, fy, col="blue", lwd=2) # Make a plot to show the fit.
invisible(list(x=bx, y=fy, f=f)) # Return the Basis (new predictors), Fitted Y, Regression
}
if (F) { # Unit Test
spline.fit(1:100, rnorm(100))
spline.fit(1:100, rnorm(100), df=20)
}