#导入库介绍
%matplotlib inline
from scipy import stats# 专门解决科学计算中各种标准问题域的集合
import pandas as pd #快速处理大量数据结构和函数,选取子集等
import numpy as np #基础包,各种运算
import matplotlib.pyplot as plt #绘制数据图表
import statsmodels.api as sm#拟合多种统计模型
import math #出现求指数次数为1/2的情况可以用到
2.1 引言
在学习回归之前,需要对简单线性回归有一个初步的了解,在初步学习之后,我们就可以慢慢对之后的研究有自己的一个理解。首先,先引进协方差和相关系数这两个概念,来度量两个变量之间线性关系的方向及强度。然后再构造简单的线性回归模型。
2.2协方差和相关系数
以一个小例子出发,简单先了解以下本章节需要学习的知识点:均值、标准差、相关系数、协方差等
#由一个例子出发去解决均值、标准差等参数
x=[1,2,3,4,5]
y=[6,7,8,9,10]
print(x)
print(y)
#p22 如何求取均值
#第一步:定义一个求均值的函数
#第二步:刚开始总和为0
#第三步:利用for循环让求和的次数随着i的值依次叠加
#第四步:停止后的sum除以观测的长度
#第五步:return得到mean
def mean(x):
sum=0
for i in range(len(x)):
sum+=x[i]
mean=sum/len(x)
return mean
print('X的平均数是:'+str(mean(x)))
print('Y的平均数是:'+str(mean(y)))
#p23 如何求取协方差 与标准差
#协方差
#第一步:定义一个求协方差的函数
#第二步:因为需要用到x_mean与y_mean,导入,并且总和为0
#第三步:利用for循环让求和的次数随着i的值依次叠加
#第四步:停止后的sum除以len(x)-1
#第五步:return得到cov
def cov(x,y):
x_mean=np.mean(x)
y_mean=np.mean(y)
sum=0
for i in range(len(x)):
sum+=(x[i]-x_mean)*(y[i]-y_mean)
cov=sum/len(x)-1
return cov
print("cov(x,y)="+str(cov(x,y)))
#标准差
def s(x):
x_mean=np.mean(x)
x_sum_square=0
for i in range(len(x)):
x_sum_square+=(x[i]-x_mean)**2
s=math.sqrt(x_sum_square/(len(x)-1))
return s
print("sx="+str(s(x)))
#相关系数
#第一步:定义相关系数函数
#第二步:将x_mean与y_mean函数导入
#第三步:计算离差乘积求和
#第四步:计算x与y的离差平方和
#第五步:输出所定义的系数函数
def cor(y,x):
x_mean=np.mean(x)
y_mean=np.mean(y)
sum_deviation=0
for i in range(len(x)):
sum_deviation+=(x[i]-x_mean)*(y[i]-y_mean)
x_sum_square=0
for i in range(len(x)):
x_sum_square+=(x[i]-x_mean)**2
y_sum_square=0
for i in range(len(y)):
y_sum_square+=(y[i]-y_mean)**2
cor= sum_deviation/math.sqrt(x_sum_square* y_sum_square)
return cor
print('\ncor(x,y)='+str(cor(y,x)))
【1】以上是对相关统计量的一些代码定义
协方差的符号反映了Y与X的线性关系的方向,计算协方差之前需要对数据进行标准化。
相关系数既可以解释为标准化后变量的协方差,也可以解释为协方差与两个变量标准差的比。因而它可以度量Y与X之间的相关的方向以及强度的非常有用的量。
#第25页表格和图
#从table 2.3 计算观测变量与响应变量的散点图
#第一步:我们需要输出我们所需要的数据
dataset1=pd.read_csv('F:\linear regression\chapter 2\Table 2.3.csv')#dataset1 为表2.3的数据
print(dataset1)
print('Table 2.3 A Data Set With a Perfect Nonlinear Relationship Between Y and X')
#第二步:可以调整我们需要输出的散点图的大小
plt.figure(figsize=(5.5,3.5))#长5.5,宽3.5
#第三步:将表格中的两个变量输出,利用scatter 拟合散点图
x=dataset1['X']
y=dataset1['Y']
plt.xlabel("X")#横坐标
plt.ylabel("Y")#纵坐标
plt.xticks([-4,0,4])#将横坐标的刻画点-4,0,4
plt.scatter(x,y,color='green')#每个点的坐标以及设置坐标颜色为绿色
plt.suptitle('Figure2.2 A scatter plot of Y versus X in Table 2.3 ',y=-0.05,color='green')#表的名称
plt.show()#显示图像
# 第25页的表格2.3的自相关系数的推断
#计算Table 2.3 的相关系数
dataset1=pd.read_csv('F:\linear regression\chapter 2\Table 2.3.csv') #读取Table 2.3 的相关数据信息
y=dataset1['Y']
x=dataset1['X']
#定义自相关函数
def cor(x,y):
x_mean=np.mean(x)
y_mean=np.mean(y)
#计算分子:离差乘积求和
sum_deviation=0
for i in range(len(x)):
sum_deviation+=(y[