此博客仅为个人理解和上课笔记梳理,如果发现有误,请各位大佬不吝赐教!
通过不同的X(predictor,independent variable, covariate, input, etc.)去估计Y值(the dependent variable, output, response, etc.)
回归分析: 一种通过分析两个或多个变量间关系,以达到可以通过其他量的值来预测所需量的值的统计学方法。 也就是说,等同于预测一个函数关系: Y=f(x)
模型(model):变量间关系的估计 (函数关系,统计关系)
1. 函数关系: x和Y之间的关系可以通过函数来表达 Yi=f(xi) , 如果我们知道 xi 的值,就可以直接获得 Yi 的值。这种关系是具有确定性的(deterministic)。
2. 统计关系: 一般描述为 trend + error。 例如:信号和噪声。 这种关系是具有随机性的(stochastic)。它可以认为是一个函数关系加上噪声。
经验模型(empirical model): Y=f(x)+ϵ(x) , 其中 ϵ(x) 是均值为0,彼此不相关 corr(ϵi,ϵj)=0 的噪声。
corr(x,y)=0 : 相关关系是一种非确定性的关系,相关系数是研究变量之间线性关系程度的量。
1. 若 X和Y不相关,corr(x,y) = 0。只能说明X和Y之间不存在线性关系,但不排除X和Y之间可能存在其他关系。
2. 若X和Y独立,则一定有corr(x,y) = 0,若X和Y不相关,则仅仅是不存在线性关系。
使用有限的数据去估计函数关系几乎是不可能的,为了使得问题可解,我们定义:
yi=β0+β1xi+ϵi,i=1,...,n
Note:
1. xi 不仅仅局限于线性,我们可以定义 x∗=x2i,x∗=logxi ,等等。
2. E(ϵi)=0 and Var(ϵi)=δ2
3. 因为 ϵ 的存在,即使假设 xi 是常数,Y依然是一个随机量。
Y=9.5+2.1x+ϵ 。其中x的范围为20-80
β0 : intercept(截距): 当x = 0 时, Y的值。 但是当x = 0 在观测值范围以外时, β0 即没有相关的意义。
β1 : slope(斜率),每当x增加1时,Y的变化。
为了确定回归函数,我们必须在一定程度上尽可能的降低预测误差( Yi−β0−β1xi )
Q1(β0,β1)=∑ni=0|yi−(β0+β1xi)|
Q2(β0,β1)=∑ni=0{yi−(β0+β1xi)}2
Q3(β0,β1)=∑ni=0{yi−(β0+β1xi)}
至于为什么线性回归问题选择了最小均方误差,即 Q2 ,请参考最小均方误差
对 Q2 求导等于0之后可以获得:
β^1=∑ni=1(xi−x¯)(yi−y¯)∑ni=1(xi−x¯)
β^0=y¯−β^1x¯
为什么最小均方估计是好的?
1. 他们是无偏估计量: E(β^0)=β0 , E(β^1)=β1
2. 在所有的线性无偏估计量中,他们具有最小的方差,他们是最佳线性无偏估计量(best linear unbiased estimators (BLUEs) )
residual(偏差): ei=yi−y^i=yi−(β^0+β1xi)
fitted value(估计值): y^i=β^0+β^1xi,i=1,2...,n
Note:
1. ei=yi−y^i≠ϵi 其中 y^i 是基于 xi 的,而 ϵi 的值是随机的
∑ni=0ei=0
∑ni=0yi=∑ni=0y^i
∑ni=0xiei=0
∑ni=0y^iei=0
Note:
在证明这些公式的过程中,有个小技巧可以用
∑(yi−y¯)=0
sum of square : ∑ni=1(yi−y¯)2
mean square : s2=1n−1∑ni=1(yi−y¯)2
SSE( sum of squared residuals) : SSE=∑ni=1(yi−y^i)2
MSE( mean squared residuals) : MSE=∑ni=1(yi−y^i)2n−2=SSEn−2=∑ni=1e2in−2
Note:
1. MSE 是 δ2 的无偏估计量, E(MSE)=δ2
2. δ^=MSE−−−−−√ , 很多情况下我们可以知道MSE,即可用此公式求出 δ^
ϵi∼iidN(0,δ2),i=1,2,...,n 独立同分布(iid)
E(ϵ)=0
Var(ϵ)=δ2
Corr(ϵi,ϵj)=0,i≠j
rm(list=ls())
#####################################################
# Toluca example
#载入x和y的数据,默认为多列一行
x<-c(80,30,50,90,70,60,120,80,100,50,40,70,90,20,110,100,30,50,90,110,30,90,40,80,70)
Y<-c(399,121,221,376,361,224,546,352,353,157,160,252,389,113,435,420,212,268,377,421,273,468,244,342,323)
# 绘制散点图,其中xlab和ylab分别定义了坐标名称
plot(x,Y,xlab="Lot Size (Parts/lot)",ylab="Work Hours" )
# Fit 一个model,该方法会返回beta_0和beta_1的值
# b获得了fit的model的参数,即直接组成了beta的矩阵
# seq函数返回的是20-120范围内,以1为间隔的值,b[1]为beta_0的值,b[2]为beta_1的值,lines(x范围,线性方程)绘制直线。
lm(Y~x)
b<-lm(Y~x)$coefficients
lines(seq(20,120,1),b[1]+b[2]*seq(20,120,1))
# 不使用lm方法,而是通过矩阵的方法获得beta的值
# 其中只需要注意构造x的矩阵,第一列全为1
# rep(1,length(seq(20,120,1))) 构造了第一列值全为1,且行数等于seq(20,120,1)的长度,cbind()将两个矩阵左右相连
cov.p<-cbind(rep(1,length(seq(20,120,1))),seq(20,120,1))
plot(x,Y,xlab="Lot Size (Parts/lot)",ylab="Work Hours")
# %*%表示矩阵的点乘,col控制颜色
lines(seq(20,120,1), cov.p%*%(lm(Y~x)$coefficients),col="red")
# 在上面的散点图中绘制出误差值
for(i in 1:length(x)){
lines(c(x[i],x[i]),c(b[1]+b[2]*x[i],Y[i]),col="green")
}
# 计算MSE,SSE
Y.hat<-b[1]+b[2]*x
n<-length(Y)
SSE<-sum( (Y-Y.hat)^2)
MSE<-SSE/(n-2)
sqrt(MSE)
# We can also get this from the summary of the regression output given by R
summary(lm(Y~x))