【Python计算检验值】一元线性回归拟合,t值与p值,显著性检验

本文主要讨论Python实现一元回归的线性拟合、最小二乘法估计回归参数和显著性检验(t检验和p值).

        一元线性回归模型是描述两个变量之间相关关系的最简单的回归模型. 通常人们对所要研究的问题首先要收集与它有关的n组样本数据(x_i,y_i),i=1,2,3...,为了直观的发现样本数据的分布规律,把(x_i,y_i)看成是平面直角坐标系中的点. 描述两个变量之间的线性关系的数学结构通常为:

y=β_0+β_1*x+e

其中,β_0+β_1*x是由于x的变化引起y线性变化的部分,e是随机因素引起的部分.

    

from scipy import stats
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt

#读取数据并查看数据的前五行,sheetname=n,其中n表示excel中的工作表的索引(即第n+1个工作表)
df=pd.read_excel(u'文件位置',sheetname=0)
print(df.head())


#计算x,y的平均值
x=df['x']
y=df['y']
#画出x与y的散点图
plt.scatter(x,y)
plt.xlabel('x')
plt.ylabel('y')
plt.title('the linear regression')
#线性回归拟合
x_m=np.mean(x)
y_m=np.mean(y)
x1=(x-x_m)
y1=y-y_m
x2=sum((x-x_m)**2)
xy=sum(x1*y1)
#回归参数的最小二乘估计
beta1=xy/x2
beta0=y_m-beta1*x_m
#输出线性回归方程
print('y=',beta0,'+',beta1,'*x')
#画出回归方程的函数图
a=np.linspace(1000,5000,1000)#b表示在(1000,5000)上生成1000个a值
b=[beta0+beta1*i for i in a] 
plt.plot(a,b,'r')
#方差
sigma2=sum((y-beta0-beta1*x)**2)/(18)
#标准差
sigma=np.sqrt(sigma2)
#求t值
t=beta1*np.sqrt(x2)/sigma
print('t=',t)
#已知临界值求p值
p=stats.t.sf(t,18)
print('p=',p)

#输出检验结果
if p<0.05:
    print ('the linear regression between x and y is significant')
else:
	print('the linear regression between x and y is not significant')

plt.show()




猜你喜欢

转载自blog.csdn.net/semine_shen/article/details/80061594