线性回归是一种我们可以用来量化一个或多个预测变量与响应变量之间关系的方法。
通常,你可能想用一个或多个分类变量作为预测变量来拟合回归模型。
本教程提供了一个逐步的例子,说明如何在R中用分类变量进行线性回归。
例子:R中分类变量的线性回归
假设我们在R中拥有以下数据框,其中包含12个不同篮球运动员的三个变量的信息:
- 得分
- 练习的时间
- 使用的训练程序
#create data frame
df <- data.frame(points=c(7, 7, 9, 10, 13, 14, 12, 10, 16, 19, 22, 18),
hours=c(1, 2, 2, 3, 2, 6, 4, 3, 4, 5, 8, 6),
program=c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3))
#view data frame
df
points hours program
1 7 1 1
2 7 2 1
3 9 2 1
4 10 3 1
5 13 2 2
6 14 6 2
7 12 4 2
8 10 3 2
9 16 4 3
10 19 5 3
11 22 8 3
12 18 6 3
假设我们想拟合以下线性回归模型。
得分 = β0 + β1小时 + β2程序
在这个例子中,小时数是一个连续变量,但程序是一个分类变量,可以有三个可能的类别:程序1,程序2,或程序3。
为了拟合这个回归模型并告诉R,变量 "program "是一个分类变量,我们必须使用**as.factor()**将其转换为一个因子,然后再拟合模型:
#convert 'program' to factor
df$program <- as.factor(df$program)
#fit linear regression model
fit <- lm(points ~ hours + program, data = df)
#view model summary
summary(fit)
Call:
lm(formula = points ~ hours + program, data = df)
Residuals:
Min 1Q Median 3Q Max
-1.5192 -1.0064 -0.3590 0.8269 2.4551
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.3013 0.9462 6.660 0.000159 ***
hours 0.9744 0.3176 3.068 0.015401 *
program2 2.2949 1.1369 2.019 0.078234 .
program3 6.8462 1.5499 4.417 0.002235 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.403 on 8 degrees of freedom
Multiple R-squared: 0.9392, Adjusted R-squared: 0.9164
F-statistic: 41.21 on 3 and 8 DF, p-value: 3.276e-05
根据估计栏中的数值,我们可以写出拟合的回归模型。
点 = 6.3013 + .9744(小时) + 2.2949(程序2) + 6.8462(程序3)
下面是如何解释输出中的系数值:
- 小时:假设程序保持不变,每增加一个小时的练习,得分平均增加0.9744。
- p值为0.015,这表明在α=0.05的水平上,练习时间对得分是一个有统计学意义的预测因素。
- 程序2:使用程序2的选手比使用程序1的选手平均多得2.2949分,假设时间不变。
- p值为0.078,这表明在α=.05的水平上,使用程序2的球员与使用程序1的球员相比,得分没有统计学上的显著差异。
- 程序3:假设时间不变,使用程序3的选手比使用程序1的选手平均多得 2.2949分。
- P值为0.002,这表明使用程序3的球员与使用程序1的球员相比,在α=0.05的水平上,存在着统计学上的显著差异。
使用拟合的回归模型,我们可以根据球员的总练习时间和他们使用的程序来预测他们的得分数量。
例如,我们可以用下面的代码来预测一个练习了5小时并使用了训练程序3的球员的得分:
#define new player
new <- data.frame(hours=c(5), program=as.factor(c(3)))
#use the fitted model to predict the points for the new player
predict(fit, newdata=new)
1
18.01923
该模型预测,这个新球员将得到18.01923分。
我们可以通过将新球员的数值插入拟合的回归方程中来确认这一点是否正确:
- 分数=6.3013+.9744(小时)+2.2949(程序2)+6.8462(程序3)
- 积分 = 6.3013 + .9744(5) + 2.2949(0) + 6.8462(1)
- 积分=18.019
这与我们用R中的predict()函数计算出的数值相符。
其他资源
下面的教程解释了如何在R中执行其他常见任务: