您如何测试回归估计参数(拟合数据)的显着性?
Posted
技术标签:
【中文标题】您如何测试回归估计参数(拟合数据)的显着性?【英文标题】:How do you test the significance of regression estimated parameters (fitting data)? 【发布时间】:2022-01-05 03:01:24 【问题描述】:我创建了一个回归模型,试图拟合我的数据(x:年份,y:汽车数量)。而现在我感到很沮丧。如何评估估计的参数(p = 0.0001695867,q = 0.349592505)是否显着?如何执行一些统计测试(估计 p 和 q 的 p 值,t 统计量)以测试 p 和 q 的显着性。也许是回归分析中总体显着性的 F 检验。出于某种原因,我对找到 p 和 q 的置信区间不感兴趣。但是 p 值或 t 统计量或我计算更感兴趣的任何东西。这样
Ho:p 统计上不显着 H1:p 统计上显着。 q 也一样。
还有一个 F 检验:
Ho: p & q = 0 同时。 H1:p 或 q 不等于 0
import pandas as pd
x = pd.read_excel('fitting_data.xlsx', sheet_name="bevshyb cars (2)", index_col=None, dtype='Name': str, 'Value': float)
import numpy as np
#regression function
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)))))
#initial values
g = [0.000001,0.000001]
import scipy.optimize
t = x['t'].values
carsfact = x['BEVSHYB'].values
c, cov = scipy.optimize.curve_fit(fit,t,carsfact,g)
print(round(c[0],10))
print(round(c[1],10))
估计参数:p & q 分别 == 0.0001695867, 0.349592505
import sklearn.metrics
print('R^2: ',sklearn.metrics.r2_score(x['BEVSHYB'],y))
print('explained_variance_score: ', sklearn.metrics.explained_variance_score(x['BEVSHYB'], y))
评估回归模型中的拟合优度: R^2:0.9143477744061798 解释变量分数:0.9168457427666166
将不胜感激任何帮助)))
【问题讨论】:
【参考方案1】:请查阅此链接中发布的问题的答案:它显示了一种评估优化参数重要性的方法:
https://stats.stackexchange.com/questions/362520/how-to-know-if-a-parameter-is-statistically-significant-in-a-curve-fit-estimat
这是那里的示例代码;注意 scipy.stats 的用法:
from scipy.optimize import curve_fit
import numpy as np
import scipy.odr
import scipy.stats
x = np.array([5.357, 5.797, 5.936, 6.161, 6.697, 6.731, 6.775, 8.442, 9.861])
y = np.array([0.376, 0.874, 1.049, 1.327, 2.054, 2.077, 2.138, 4.744, 7.104])
def f(x,b0,b1):
return b0 + (b1 * x)
def f_wrapper_for_odr(beta, x): # parameter order for odr
return f(x, *beta)
parameters, cov= curve_fit(f, x, y)
model = scipy.odr.odrpack.Model(f_wrapper_for_odr)
data = scipy.odr.odrpack.Data(x,y)
myodr = scipy.odr.odrpack.ODR(data, model, beta0=parameters, maxit=0)
myodr.set_job(fit_type=2)
parameterStatistics = myodr.run()
df_e = len(x) - len(parameters) # degrees of freedom, error
cov_beta = parameterStatistics.cov_beta # parameter covariance matrix from ODR
sd_beta = parameterStatistics.sd_beta * parameterStatistics.sd_beta
ci = []
t_df = scipy.stats.t.ppf(0.975, df_e)
ci = []
for i in range(len(parameters)):
ci.append([parameters[i] - t_df * parameterStatistics.sd_beta[i], parameters[i] + t_df * parameterStatistics.sd_beta[i]])
tstat_beta = parameters / parameterStatistics.sd_beta # coeff t-statistics
pstat_beta = (1.0 - scipy.stats.t.cdf(np.abs(tstat_beta), df_e)) * 2.0 # coef. p-values
for i in range(len(parameters)):
print('parameter:', parameters[i])
print(' conf interval:', ci[i][0], ci[i][1])
print(' tstat:', tstat_beta[i])
print(' pstat:', pstat_beta[i])
print()
```
【讨论】:
我有一个愚蠢的问题是这行代码 t_df = scipy.stats.t.ppf(0.975, df_e) 表示 97.5% 的 conf 间隔,所以如果我将其更改为 0.95 会起作用吗? 在 alpha = 0.05 的情况下,必须使用 ppf 方法计算 2 尾 t 检验的 t 值,概率为 0.0975 = 1 - 0.05/2 作为第一个参数。 哦,谢谢,这已经是 95% 的 conf 间隔 不客气。请考虑选择我的答案,以防它对您有帮助。以上是关于您如何测试回归估计参数(拟合数据)的显着性?的主要内容,如果未能解决你的问题,请参考以下文章
R中怎么就选定变量,而不是从线性回归的所有变量(F-测试)得到的p值(显着性水平)?