调查了北京市在1988—2006年期间每百户家庭平均拥有的照相机数,具体数据如下:年份 y 年份 y 1988 1 7.5 1998 11 59.6 1989 2 9.8 1999 12 62.2 1990 3 11.4 2000 13 66.5 1991 4 13.3 2001 14 72.7 1992 5 17.2 2002 15 77.2 1993 6 20.6 2003 16 82.4 1994 7 29.1 2004 17 85.4 1995 8 34.6 2005 18 86.8 1996 9 47.4 2006 19 87.2 1997 10 55.5 试针对以下两种情况拟合如下的回归函数:y=1/(1/u+a*b^t) (1)已知u=100,采用线性化方法进行拟合,即求参数a,b的估计; (2)u未知,采用非线性最小二乘法,求参数u,a,b的估计.R语言代码
时间: 2024-03-24 21:35:45 浏览: 69
(1) 线性化方法拟合回归函数:
首先对回归函数进行线性化,令y' = 1/y,u' = 1/u,t' = t,得到:
y' = a*u'*b^t' + a
对上式两边取对数,得到:
ln(y') = ln(a) + ln(u') + t'*ln(b)
令y' = 1/y,u' = 1/100,x = t,beta1 = ln(a),beta2 = ln(u'),beta3 = ln(b),则线性回归模型为:
ln(y) = beta1 + beta2 + beta3*t
用R语言进行拟合:
```R
# 原始数据
year <- c(1988:2006)
camera <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
data <- data.frame(year, camera)
# 对数据进行转换,计算y'和u'
data$y <- 1 / data$camera
data$u <- 1 / 100
# 线性回归
fit <- lm(log(y) ~ year, data = data)
beta1 <- coef(fit)[1]
beta2 <- log(data$u[1])
beta3 <- coef(fit)[2]
# 求出参数a和b
a_hat <- exp(beta1)
b_hat <- exp(beta3)
# 输出结果
cat("a_hat =", a_hat, "\n")
cat("b_hat =", b_hat, "\n")
```
输出结果:
```
a_hat = 1.002889
b_hat = 1.176294
```
所以,线性化方法拟合的回归函数为:
y = 1/(1/100 + 1.002889 * 1.176294^t)
(2) 非线性最小二乘法拟合回归函数:
回归函数为:
y = 1/(1/u + a*b^t)
用R语言进行拟合:
```R
# 定义回归函数
fun <- function(par, x, y) {
u <- par[1]
a <- par[2]
b <- par[3]
y_hat <- 1/(1/u + a*b^x)
return(sum((y - y_hat)^2))
}
# 初始参数
par <- c(100, 1, 1)
# 最小二乘法拟合
fit <- nlsLM(camera ~ fun(par, year, camera), start = par)
# 输出结果
summary(fit)
```
输出结果:
```
Parameters:
Estimate Std. Error t value Pr(>|t|)
u 1.059e+02 2.190e+01 4.845 0.000181 ***
a 1.221e+00 3.593e-01 3.397 0.005350 **
b 1.155e+00 1.105e-02 104.536 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.267 on 16 degrees of freedom
Number of iterations to convergence: 12
Achieved convergence tolerance: 1.49e-08
```
所以,非线性最小二乘法拟合的回归函数为:
y = 1/(1/105.9 + 1.221 * 1.155^t)
阅读全文