数据来源:选自课件
i | xi | yi |
1 | 5 | 4 |
2 | 5 | 6 |
3 | 10 | 8 |
4 | 20 | 13 |
5 | 30 | 16 |
6 | 40 | 17 |
7 | 50 | 19 |
8 | 60 | 25 |
9 | 65 | 25 |
10 | 90 | 29 |
11 | 120 | 46 |
这里面涉及到求回归系数,拟合值,拟合直线,F检验统计量的计算。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('C:/Users/admin/Desktop/2019.10.05/回归分析/data.csv') # 读取数据
data=data.drop('i', axis=1) #去掉序号那一列
#样本相关系数,可用于回归检验
r=data.corr()
describe=data.describe() #描述性统计
mean=describe.loc['mean'] #列均值
T=list(data.apply(sum,axis=0)) #列和
m=data.index.size #数据行数
# xx=0
# yy=0
# xy=0
# for i in range(0,m):
# xx=xx+data.iloc[i,0]**2
# yy=yy+data.iloc[i,1]**2
# xy=xy+data.iloc[i,0]*data.iloc[i,1]
#
# lxx=xx-m*(mean[0]**2)
# lyy=yy-m*(mean[1]**2)
# lxy=xy-m*mean[0]*mean[1]
lxx=sum(x**2 for x in data['xi'])-m*(mean[0]**2)
lyy=sum(x**2 for x in data['yi'])-m*(mean[1]**2)
# 举例:
# func = lambda x,y:x*y
# result=map(func,[1,2,3,4],[4,3,2,1])
# list_result = list(result)
# print(list_result)
func = lambda x,y:x*y
result=map(func,data['xi'],data['yi'])
list_result = list(result)
lxy=sum(list_result)-m*mean[0]*mean[1]
# print(lxx)
# print(lxy)
# print(lyy)
b1=lxy/lxx
b0=mean[1]-b1*mean[0]
print("常数项回归系数:\n%f\n一次项回归系数:\n%f"%(b0,b1))
#小数位数的控制,("%.4f" % b0)是str类型,所以转为浮点数
# b0=float(("%.4f" % b0))
# b1=float("%.4f" % b1)
data['拟合值']=[b0+b1*x for x in data['xi']] #添加一列:拟合值
print("\n拟合值:")
print(data) #在原有数据上加有拟合值一列
ST=lyy #总离差平方和:ST
SR=sum((x-mean[1])**2 for x in data['拟合值']) #残差平方和:SR
SE=lyy-b1*lxy #回归平方和:SE
print("\nF统计量的值:")
print((SR/1)/(SE/(m-2))) #F统计量
plt.scatter(data['xi'],data['yi'],alpha=0.5, color='blue') # 1.真实的点
plt.plot(data['xi'],data['拟合值'], alpha=0.5,color='red', linewidth=4) # 2.拟合的直线
plt.show()
其中describe=data.describe()的输出为:
| xi | yi |
count | 11.000000 | 11.000000 |
mean | 45.000000 | 18.909091 |
std | 36.878178 | 12.103343 |
min | 5.000000 | 4.000000 |
25% | 15.000000 | 10.500000 |
50% | 40.000000 | 17.000000 |
75% | 62.500000 | 25.000000 |
max | 120.000000 | 46.000000 |
输出结果:常数项回归系数:4.366811,一次项回归系数:0.323162,F统计量的值:286.52242428783325
SPSS回归分析结果:
模型摘要
模型 R R 方 调整后 R 方 标准估算的误差
1 .985a .970 .966 2.226
a 预测变量:(常量), xi
ANOVAa
模型 平方和 自由度 均方 F 显著性
1 回归 1420.296 1 1420.296 286.522 .000b
残差 44.613 9 4.957
总计 1464.909 10
a 因变量:yi
b 预测变量:(常量), xi