R语言与函数估计学习笔记
毫无疑问,函数估计是一个比参数估计要复杂得多的问题,当然也是一个有趣的多的问题。这个问题在模型未知的实验设计的建模中十分的常见,也是我正在学习的内容的一部分。
关于函数估计我想至少有这么几个问题是我们关心的:1、我知道函数的一个大概的模型,需要估计函数的参数;2、我不知道它是一个什么模型,但是我想用一个不坏的模型刻画它;3、我不知道它是一个什么模型,我也不太关心它的显式表达是什么,我只想知道它在没观测到的点的取值。这三个问题第一个是拟合或者叫参数估计,第二个叫函数逼近,第三个叫函数插值。从统计的角度来看,第一个是参数问题,剩下的是非参数的问题。
函数模型的参数估计
这类的问题有很多,一个比较典型的例子是柯布-道格拉斯函数\( Y=L^\alpha k^\beta \mu \)。我们要估计参数常用的就是最小化残差平方和,如果是密度函数或者分布函数常用的办法在加上矩估计与似然估计(MLE)两种办法。
我们在这里介绍一下R中的用于函数拟合的函数nls(),其调用格式如下:
nls(formula, data, start, control, algorithm, trace, subset, weights, na.action, model, lower, upper, …)
其用法与线性回归函数lm()用法类似,这里就不作过多介绍了,我们来看几个例子来说明函数的用法:
情形一:指数模型
模拟模型\( y=x^\beta+\varepsilon \),这里假设\( \beta=3 \)
len <- 24
x <- runif(len, 0.1, 1)
y <- x^3 + rnorm(len, 0, 0.06)
ds <- data.frame(x = x, y = y)
str(ds)
## 'data.frame': 24 obs. of 2 variables:
## $ x: num 0.238 0.482 0.787 0.145 0.232 ...
## $ y: num 0.0154 0.12048 0.56788 0.10287 -0.00321 ...
plot(y ~ x, main = "Known cubic, with noise")
s <- seq(0, 1, length = 100)
lines(s, s^3, lty = 2, col = "green")
使用函数nls估计参数\( \beta \)
m <- nls(y ~ I(x^power), data = ds, start = list(power = 1), trace = T)
## 1.637 : 1
## 0.2674 : 1.847
## 0.07229 : 2.464
## 0.06273 : 2.656
## 0.06264 : 2.677
## 0.06264 : 2.678
## 0.06264 : 2.678
summary(m)
##
## Formula: y ~ I(x^power)
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## power 2.678 0.117 22.9 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '