目录
一、线性回归
(一)基本含义
在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
(二)拟合方程
最小二乘法
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
回归系数
一般地,要求这个值大于5%。对大部分的行为研究者来讲,最重要的是回归系数。年龄增加1个单位,文档的质量就下降 -.1020986个单位,表明年长的人对文档质量的评价会更低。这个变量相应的t值是 -2.10,绝对值大于2,p值也<0.05,所以是显著的。结论是,年长的人对文档质量的评价会更低,这个影响是显著的。相反,领域知识越丰富的人,对文档的质量评估会更高,但是这个影响不是显著的。这种对回归系数的理解就是使用回归分析进行假设检验的过程。
二、用excel做线性回归分析
(一)操作步骤
1.选择数据
2.插入,工具栏选择散点图
3.生成渐近线
4.右击渐近线,选择线性和显示公式
5.效果呈现
(二)实例练习
用excel中数据分析功能做线性回归练习。分别选取20、200、2000(或20000)组数据,进行练习。记录回归方程式、相关系数R2 。
1.选择20组数据
2.选择200组数据
3.选择2000组数据
三、用jupyter编程和最小二乘法做线性回归分析
导入需要的包
import pandas as pd
import numpy as np
from numpy import array
from sklearn import linear_model
import matplotlib.pyplot as plt
import math
导入数据文件
points = np.genfromtxt("E:\Xxhg\weightsheights.xls",delimiter=",")
20组
#20个
#计算平均值
x1_mean=np.mean(x1)
y1_mean=np.mean(y1)
#计算a,b
num=0.0#分子
d=0.0#分母
m=0.0
for x1_i,y1_i in zip(x1,y1):
num+=(x1_i-x1_mean)*(y1_i-y1_mean)
d+=(x1_i-x1_mean)**2
m+=(y1_i-y1_mean)**2
a1=num/d
b1=y1_mean-a1*x1_mean
y_hate=a1*x1+b1
print("线性回归方程为:y1=",a1,"x1",b1)
#计算R^2
print("R^2:",((num/math.sqrt(d*m))**2))
plt.scatter(x1,y1)
plt.plot(x1,y_hate,color='g')#绘制直线
plt.show()
200组
#计算平均值
#200个
x2_mean=np.mean(x2)
y2_mean=np.mean(y2)
#计算a,b
num=0.0#分子
d=0.0#分母
m=0.0
for x2_i,y2_i in zip(x2,y2):
num+=(x2_i-x2_mean)*(y2_i-y2_mean)
d+=(x2_i-x2_mean)**2
m+=(y2_i-y2_mean)**2
a2=num/d
b2=y2_mean-a2*x2_mean
y_hate=a2*x2+b2
print("线性回归方程为:y2=",a2,"x2",b2)
#计算R^2
print("R^2:",((num/math.sqrt(d*m))**2))
plt.scatter(x2,y2)
plt.plot(x2,y_hate,color='g')#绘制直线
plt.show()
2000组
#2000个
#计算平均值
x3_mean=np.mean(x3)
y3_mean=np.mean(y3)
#计算a,b
num=0.0#分子
d=0.0#分母
m=0.0
for x3_i,y3_i in zip(x3,y3):
num+=(x3_i-x3_mean)*(y3_i-y3_mean)
d+=(x3_i-x3_mean)**2
m+=(y3_i-y3_mean)**2
a3=num/d
b3=y3_mean-a3*x3_mean
y_hate=a3*x3+b3
print("线性回归方程为:y3=",a3,"x3",b3)
#计算R^2
print("R^2:",((num/math.sqrt(d*m))**2))
plt.scatter(x3,y3)
plt.plot(x3,y_hate,color='g')#绘制直线
plt.show()
四、用jupyter编程,借助skleran做线性回归分析
20组
#20个
x1 = array(d[['Height']].values[:20,:])
y1 = array(d[['Weight']].values[:20,:])
model = linear_model.LinearRegression()
model.fit(x1,y1)
#斜率
print(model.coef_)
#截距
print(model.intercept_)
a=model.intercept_
b=model.coef_
y_hate1=b*x1+a
print("线性回归方程为:y1=",b,"x1",a)
#计算R^2
model.score(x1,y1)
plt.figure()
plt.scatter(x1,y1)#散点图绘制初始数据
plt.plot(x1,y_hate1,color='r')#绘制直线
plt.show()
200组
#200个
x2 = array(d[['Height']].values[:200,:])
y2 = array(d[['Weight']].values[:200,:])
model = linear_model.LinearRegression()
model.fit(x2,y2)
#斜率
print(model.coef_)
#截距
print(model.intercept_)
a=model.intercept_
b=model.coef_
y_hate2=b*x2+a
print("线性回归方程为:y2=",b,"x2",a)
#计算R^2
model.score(x2,y2)
plt.figure()
plt.scatter(x2,y2)#散点图绘制初始数据
plt.plot(x2,y_hate2,color='r')#绘制直线
plt.show()
2000组
#2000个
x3 = array(d[['Height']].values[:2000,:])
y3 = array(d[['Weight']].values[:2000,:])
model = linear_model.LinearRegression()
model.fit(x3,y3)
#斜率
print(model.coef_)
#截距
print(model.intercept_)
a=model.intercept_
b=model.coef_
y_hate3=b*x3+a
print("线性回归方程为:y3=",b,"x3",a)
#计算R^2
model.score(x3,y3)
plt.figure()
plt.scatter(x3,y3)#散点图绘制初始数据
plt.plot(x3,y_hate3,color='r')#绘制直线
plt.show()
五、总结
jupyter有一点点问题,在想办法解决…
参考文献