You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检验非线性回归估计参数的显著性 含t检验、F检验及p值计算

非线性回归参数显著性与整体F检验实现方案

你使用的scipy.optimize.curve_fit是非线性最小二乘拟合,参数显著性检验和整体F检验可基于拟合返回的协方差矩阵、残差结果计算,具体实现如下:

1 单参数t检验(检验p、q的个体显著性)

检验假设:

H0:对应参数统计上不显著;H1:对应参数统计上显著

计算逻辑:

  • 从curve_fit返回的协方差矩阵cov中提取对角线元素开平方得到参数的标准误
  • t统计量 = 参数估计值 / 对应标准误
  • 自由度 = 样本量 - 参数个数(此处参数为p、q共2个)
  • 双侧t检验的p值对应t分布的尾部概率

2 整体F检验(检验模型整体显著性)

检验假设:

H0:p和q同时为0;H1:p或q任意一个不为0

计算逻辑:

  • 计算解释平方和ESS(预测值与真实值均值的差的平方和)、残差平方和RSS(真实值与预测值的差的平方和)
  • F统计量 = (ESS/参数个数) / (RSS/自由度)
  • F检验p值对应F分布的尾部概率

完整实现代码

import pandas as pd
import numpy as np
import scipy.optimize
from scipy.stats import t, f
import sklearn.metrics

# 原有数据读取与拟合逻辑
x = pd.read_excel('fitting_data.xlsx', sheet_name="bevshyb cars (2)", index_col=None, dtype={'Name': str, 'Value': float})
def fit(t,p,q):
    return 22500000*(((p*p*p+2*p*p*q+p*q*q)*np.exp(-p*t-q*t))/(((p+q*np.exp(-p*t-q*t))*(p+q*np.exp(-p*t-q*t)))))
g = [0.000001,0.000001]
t = x['t'].values
carsfact = x['BEVSHYB'].values
c, cov = scipy.optimize.curve_fit(fit,t,carsfact,g)
p_est, q_est = c
print('估计参数p:', round(p_est,10))
print('估计参数q:', round(q_est,10))

# 拟合优度计算
y_pred = fit(t, *c)
print('R^2: ',sklearn.metrics.r2_score(carsfact, y_pred))
print('explained_variance_score: ', sklearn.metrics.explained_variance_score(carsfact, y_pred))

# ========== 新增:显著性检验部分 ==========
n = len(carsfact) # 样本量
k = 2 # 参数个数
df = n - k # 自由度

# 1 单参数t检验
se = np.sqrt(np.diag(cov)) # 计算参数标准误
t_stats = c / se # 计算t统计量
p_values = [2 * (1 - t.cdf(np.abs(ts), df=df)) for ts in t_stats] # 计算双侧p值
print('\n===== 单参数显著性检验结果 =====')
print(f'参数p:t统计量={round(t_stats[0],4)}, p值={round(p_values[0],6)}')
print(f'参数q:t统计量={round(t_stats[1],4)}, p值={round(p_values[1],6)}')

# 2 整体F检验
y_mean = np.mean(carsfact)
ESS = np.sum((y_pred - y_mean)**2) # 解释平方和
RSS = np.sum((carsfact - y_pred)**2) # 残差平方和
F_stat = (ESS / k) / (RSS / df)
F_pvalue = 1 - f.cdf(F_stat, dfn=k, dfd=df)
print('\n===== 整体F检验结果 =====')
print(f'F统计量={round(F_stat,4)}, p值={round(F_pvalue,6)}')

结果解读

  • 单参数检验:如果对应p值小于你设定的显著性水平(通常为0.05),则拒绝原假设,认为该参数统计显著
  • 整体F检验:如果p值小于显著性水平,则拒绝原假设,认为回归模型整体是显著的

注:上述检验基于非线性最小二乘的渐近正态性假设,大样本下结果更可靠。

内容的提问来源于stack exchange,提问作者Alexander Plesovskikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:36:04