R语言执行带类别型预测变量的线性回归示例
有些情况下,预测变量中也会包含类别变量的情形。因此,本篇继续接前文的内容,通过一个简单示例展示带类别预测变量的线性回归在R语言中的计算方法,并解释结果中类别项的含义。
示例数据
示例数据、R代码等,可见网盘附件(提取码,24cr):
https://pan.baidu.com/s/1qdm6x4B1JtlBIOINPyBZyA
附件“plant.txt”来自某项调查研究数据,测量了生长于两个不同温度(低、高)环境中的某种植物的高度,以及土壤中的氮浓度,期望了解土壤氮浓度及温度对植物生长的影响。
带类别型预测变量的线性回归
考虑到线性关系最为直观且易于理解,这里希望通过建立线性回归,探讨植物生长高度与其所处环境中土壤氮浓度及温度的关系。
数据中,温度(temperature)并非具体的测量数值,而是以Low(低温)和High(高温)表示的,因此它就是一列类别变量。类似连续变量的线性回归,R语言中仍可通过lm()拟合带类别预测变量的线性回归,类别变量以因子(factor)添加在表达式中,并以“+”连接各预测变量表示响应变量由它们的加权和贡献。
#读取示例数据
dat <- read.delim('plant.txt', sep = '\t')
#通过线性回归探讨植物生长高度与其所处环境中土壤氮浓度及温度的关系
fit <- lm(plant~N+factor(temperature), data = dat) #类别变量最好用 factor() 括起来
summary(fit) #展示拟合方程的简单统计
对于结果中各项的解释,可参考前文“”中的描述。整体而言,全模型p<0.001是非常显著的,R2=0.96非常完美,各预测变量的效应也很显著,表明植物生长高度与其所处环境中土壤氮浓度及温度存在很高的线性关联。
这种情况下,当回归中包含一个类别(或因子)预测变量时,类别变量被转换成取值为0或者1的名义变量(dummy variables)。例如,类别变量temperature有两个等级,Low(低温)和High(高温),R因此构造了一个名义变量,在上述结果中变量名为factor(temperature)Low。如果temperature=Low时其值为1,temperature=High时其值为0。
已经在结果中观察到所有预测变量都是显著的,把求得的斜率和截距项提取出来,现在拟合后的线性回归可以表示为:
其中plant是植物生长高度;N是土壤氮含量,一组连续变量;temperature为类别变量,temperature=Low时其值为1,temperature=High时其值为0。
最终可得知,土壤氮含量高时更有利于植物生长,并且该植物为喜温植物,低温将抑制其生长。
最后,可以绘制一些简单的统计图观察这种关系。
#单独观察植物生长高度与土壤氮浓度的关系,已知高度随氮浓度增加而增加
dat[which(dat$temperature == 'Low'),'color'] <- 'blue'
dat[which(dat$temperature == 'High'),'color'] <- 'red'
plot(dat$N, dat$plant, pch = 20, col = dat$color, main = 'plant~N',
xlab = 'N', ylab = 'plant')
#单独观察植物生长高度与温度的关系,已知低温不利于植物生长
plot(dat$temperature, dat$plant, col = c('red', 'blue'), main = 'plant~temperature',
xlab = 'temperature', ylab = 'plant')
#同时展示三组变量关系的三维图
library(car)
dat[which(dat$temperature == 'Low'),'temp'] <- 0 #首先将类别变量转换为 0-1 数值
dat[which(dat$temperature == 'High'),'temp'] <- 1
scatter3d(plant~N+temp, data = dat, point.col = dat$color)