赤池信息准则(AIC)计算及两种非线性拟合结果的优劣判断咨询
两种拟合方案的AIC计算实现方法(Excel/R)
计算前提说明
- 观测样本量n:本次提供的实验数据共58组
- Fit1可调参数数量k1=4,Fit2可调参数数量k2=4(5个参数中1个固定为0,固定参数无需估计,不计入AIC的参数k统计;若你需要将固定参数也计入,把k2改为5即可)
- 残差服从正态分布假设下,最小二乘拟合的AIC计算公式为:
AIC = 2k + n × ln(SSE/n)
其中SSE为残差平方和,等于所有观测点的(实验y值 - 拟合y值)的平方和
- 若n/k < 40,建议使用校正版AICc避免小样本偏差:
AICc = AIC + 2k(k+1)/(n-k-1)
- 判断规则:AIC/AICc值越小的模型,拟合的综合表现越好;两个模型差值小于2则没有显著优劣差异。
Excel实现步骤
- 将所有数据粘贴到Excel中,调整列对应关系:A列=x_expt,B列=y_expt,D列=y_fit1,F列=y_fit2
- 计算Fit1的残差平方和SSE1:在空白单元格输入公式
=SUMSQ(B2:B59-D2:D59),Office 365直接回车即可,老版本按Ctrl+Shift+Enter执行数组公式 - 计算Fit1的AIC:输入公式
=2*4 + 58*LN(SSE1单元格位置/58),替换SSE1单元格位置为上一步的结果单元格 - 同理计算Fit2的残差平方和SSE2:
=SUMSQ(B2:B59-F2:F59) - 计算Fit2的AIC:
=2*4 + 58*LN(SSE2单元格位置/58) - 如需计算AICc,Fit1对应公式为
=AIC1单元格位置 + 2*4*5/(58-4-1),Fit2替换对应参数即可。
R实现步骤
直接运行如下代码即可自动计算并输出两个模型的对比结果:
# 1. 读取数据:先全选复制所有数据(包括表头两行) # Windows系统用这行读取剪切板数据 dat <- read.table("clipboard", header = T, skip = 1) # Mac系统替换为下面这行 # dat <- read.table(pipe("pbpaste"), header = T, skip = 1) # 重命名列方便调用 colnames(dat) <- c("x_expt", "y_expt", "x_fit1", "y_fit1", "x_fit2", "y_fit2") # 2. 自定义AIC计算函数 calc_aic <- function(y_obs, y_fit, k, n = length(y_obs)){ sse <- sum((y_obs - y_fit)^2) aic <- 2*k + n * log(sse / n) aicc <- aic + 2*k*(k+1)/(n - k -1) return(list(SSE = sse, AIC = aic, AICc = aicc)) } # 3. 分别计算两个模型的结果 fit1 <- calc_aic(dat$y_expt, dat$y_fit1, k = 4) fit2 <- calc_aic(dat$y_expt, dat$y_fit2, k = 4) # 4. 输出对比表格 res <- data.frame( 模型 = c("Fit1(4个可调参数)", "Fit2(1个参数固定)"), SSE = round(c(fit1$SSE, fit2$SSE),4), AIC = round(c(fit1$AIC, fit2$AIC),2), AICc = round(c(fit1$AICc, fit2$AICc),2) ) print(res, row.names = F)
运行后即可直接看到两个模型的SSE、AIC、AICc数值,直接对比大小即可判断拟合方案优劣。
内容的提问来源于stack exchange,提问作者Suddhasattwa Ghosh
相关产品推荐
相关产品推荐

