MIT:The Analytics Edge 笔记02-线性回归

MIT课程 15.071x The Analytics Edge 第二单元的学习记录。


Linear Regression

第二单元的主题是线性回归。

1.理论

一元线性回归公式:

formula

其中x是自变量independent variable,y是因变量dependent variable。
beta是相关系数coefficient,epsilon是误差error。

为了判断线性回归的效果,我们有如下检验标准:

1.SSE(sum of squared errors)
注意这里的误差是实际值相对于预测值的。

formula

2.SST (total sum of square)
公式同上。但这里的误差是实际值相对于baseline的。baseline是因变量的平均值。
所以有 0 <= SSE <= SST 。

3.RMSE(root mean square error)

formula

4.R平方

formula

R平方越接近1越好。

多元线性回归公式:

formula

所有数据分析,都要经历 training-test-predict 这三个过程。
在接下来的例子中,我们介绍 建模-评估 这前两个过程。

补充一个relative error的公式:

formula

2.0 事前整理

2.0.1 去除空值

# 如果数据中包含空值
DF = na.omit(DF)

2.0.2 reference level
有些列时字符型的,它们无法进行计算。
如果某列的因子不算多,我们可以把这一列变换成多个可以用于计算的列。

# 假设DF$colr有因子 "Red"4次, "Blue"3次, "Yellow"2次
DF$colr = relevel(DF$colr, "red")

# 效果是,DF$colr 这一列不见了
# 增加了两列 DF$colrBlue 和 DF$colrYellow
# 原先 DF$colr == "Red" 的那些行,它们 colrBlue 和 colrYellow 的值都是0
# 原先 DF$colr == "Blue" 的那些行,它们 colrBlue=1, colrYellow=0
# 原先 DF$colr == "Yellow" 的那些行,它们 colrBlue=0, colrYellow=1

2.建立回归模型

建模使用lm()函数。
DF是保存学习数据的data.frame。

model = lm(y ~ x1 + x2 + ... +xn, data = DF)
# y不要写成 DF$y
# x1也不要写成 DF$x1
# 否则,后面做预测predict()的时候,DFTest代入会报warning

# 除了y列以外所有列
model = lm(y ~ ., data = DF)

# 误差 model$residuals
SSE = sum(model$residuals^2)

随便看个结果吧

> summary(model)

Call:
lm(formula = Price ~ HarvestRain + WinterRain, data = wine)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.0933 -0.3222 -0.1012  0.3871  1.1877 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.865e+00  6.616e-01  11.888 4.76e-11 ***
HarvestRain -4.971e-03  1.601e-03  -3.105  0.00516 ** 
WinterRain  -9.848e-05  9.007e-04  -0.109  0.91392    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.5611 on 22 degrees of freedom
Multiple R-squared:  0.3177,    Adjusted R-squared:  0.2557 
F-statistic: 5.122 on 2 and 22 DF,  p-value: 0.01492

Call表示建模使用的语句。
Residuals表示误差。
Coefficients表示系数,就是公式里面的beta。
Estimate的第一行是常数beta0,第二行是第一个自变量的系数beta1,第三行是第二个自变量的系数beta2,后面类推。
t value越大越好

formula

Pr(>|t|) 和t value相反,越小越好。
最后一列星星越多越好。
三短横下面这行解释了星星的含义。
Multiple R-squared就是R平方,越接近1越准确。

3.评估

对于刚过简历的模型,我们使用测试数据来评估一下准确度。
model就是上文建立的模型。
DFTest是测试数据,它的结构和上文的DF一样。

predict = predict(model, newdata = DFTest)

这个命令的返回值是 DFTest$Price 的预测结果。你可以跟 DFTest$Price 的实际结果相比较,计算SSE、RMSE、R平方等等来衡量对测试数据的预测的准确性。

SSE = sum( (DFTest$Price - predict)^2 )
SST = sum( (DFTest$Price - mean(DF$Price)^2 )
R2 = 1 - SSE/SST

4.Correlation

线性相关性

cor(var1, var2)
# 也可以考察整个DF中,每两列的线性相关性
cor(DF)

返回值是斜率。

建立线性回归模型的时候,应该去掉相关性比较高的列。

补充知识A-棒球统计术语

完全不懂棒球啊,一开始摸不着头脑。

缩写 原文 中文
RS Run Scores 跑分,得分
RA Run Allowed 失分,对手得分
OBP On-Base Percentage 上垒率
OOBP Opponent On-Base Percentage 对手上垒率
SLG Slugging Percentage 长打率,击中率
OSLG Opponent Slugging Percentage 对手长打率
BA Batting Avarage 平均成功率

补充知识B-篮球统计术语

年轻时看NBA,好歹知道一点。

缩写 原文 中文
PTS Points 得分
oppPTS Opponent Points 失分,对手得分
FG Field Goals (success) 进球数
FGA Field Goals Attempted 出手次数
X2P 2 Points 2分球进球数
X2PA 2 Points Attempted 2分球出手次数
X3P 3 Points 3分球进球数
X3PA 3 Points Attempted 3分球出手次数
FT Free Throw 罚球进球数
FTA Free Throw Attempted 发球出手次数
ORB Offensive Rebounds 前场篮板,进攻篮板
DRB Defensive Rebounds 后场篮板,防守篮板
AST Assists 助攻
STL Steals 抢断
BLK Blocks 盖帽
TOV Turnovers 失误

注:X2P列,原始数据列名是2P。由于R不支持数字开头的列名/变量,读取CSV文件的时候,会在原列名2P前加个X,从而变成 X2P。

补充知识C-滞后序列

函数lag,用于生成滞后/偏移序列?

lag(x, k = 1, ...)
# k < 0, previous observations   
# k > 0, future observations
# na.pad=TRUE, add missing values