最近应课程要求在开始学习R,想在这里记录下学习路径,供大家参考和自己翻阅。
安装R的路径:mirrors.tuna.tsinghua.edu.cn/CRAN/
安装Rstduio的路径: rstudio.com/products/rstudio/download/
选择下载一个就好,当然还有其他的IDE可供选择,比如sublime、notebook。
这里选用Rstduio,在console里面输入命令行并实现编译。
R包安装命令:
install.packages("需要安装的包名")
自定义包的安装路径:
.libPaths("需要修改的路径")
首先在导入数据前需要导入需要的包:
library(需要导入的包名)
如果在命令行中出现中文乱码的情况,参考:cnblogs.com/nxld/p/6098987.html
导入数据(数据可关注公众号“经管人学数据分析”获取):
数据是关于红酒的相关参数,目的是利用该数据研究跟红酒质量相关的变量。
注意考虑到 \ 符号,这里的文件路径要么用 \\ 要么用 /
library("gridExtra")
library(ggplot2)
library(GGally)
wine <- read.csv("redwine1.csv", sep = ";")
有时候有些txt文件格式比较混乱,推荐“readr”包,这里的txt文件需要用到里面的read_csv("数据文件路径"),还有"readxl"包,可用来导入Excel文件。
这里先将因变量“质量”转变为因子变量,即分类变量,并设定其分类变量定序:
str(wine)
wine$质量 <- factor(wine$质量, ordered = T)
这里将质量分为三个等级并将其归为“打分”列:
wine$打分 <- ifelse(wine$质量 < 5, 'bad', ifelse(wine$质量 < 7, 'average', 'good'))
将打分列最终的顺序确定:
wine$打分 <- ordered(wine$打分, levels = c('bad', 'average', 'good'))
对wine数据进行描述性统计:
str(wine)
summary(wine)
可以看到对于数值型变量,我们得到了其最小值、 \frac{1}{4} 分位数、中位数、均值、 \frac{3}{4} 分位数、最大值;对于因子变量,我们得到其属性的频数。
对质量进行简单的可视化分析:
ggplot(data = wine, aes(x = 质量)) + geom_bar()
因为“残糖量”为数值型变量,比较适合画直方图:
ggplot(data = wine, aes(x = 残糖量)) + geom_histogram()
函数scale_x_continuous()是设定x轴的刻度,break用来控制刻度。
ggplot(data = wine, aes(x = 酒精)) + geom_histogram(color='white') + scale_x_continuous(breaks = seq(8, 15, 1))
ggplot(data = wine, aes(x = 打分)) + geom_bar()
也可以通过下面的方法,对单变量进行可视化。用grid.arrange()用来将几个图形放在同一图层下。
grid.arrange(
ggplot(wine, aes(x = "酒石酸", y = 酒石酸)) + geom_jitter(alpha = 0.1) + geom_boxplot(alpha = 0.2) +
theme(axis.title.x = element_blank()),
ggplot(data = wine, aes(x = 酒石酸)) + geom_histogram(color = 'white'),
ncol = 2
)
可直接在图形函数里面设置参数color,alpha为该图层的透明度。
grid.arrange(
ggplot(wine, aes(x = "醋酸", y = 醋酸)) + geom_jitter(alpha = 0.1) +
geom_boxplot(alpha = 0.2, color = 'steelblue') + scale_y_continuous(lim = c(0, 1)),
ggplot(data = wine, aes(x = 醋酸)) + geom_histogram(fill = 'steelblue', color = 'black'),
ncol = 2
)
grid.arrange(
ggplot(wine, aes(x = "柠檬酸", y = 柠檬酸)) +
geom_jitter(alpha = 0.1) +
geom_boxplot(alpha = 0.2, color = 'steelblue'),
ggplot(data = wine, aes(x = 柠檬酸)) +
geom_histogram(
binwidth = 0.03,
color = 'black',
fill = 'steelblue'
) ,
ncol = 2
)
同理画出其他的单变量因素的可视化图形。
接下来看看变量之间的相关关系:
str(wine)
wine_subset <- wine[, c(1:13)]
ggpairs(wine_subset[sample.int(nrow(wine_subset), 100),])
取一个wine前13列的子集wine_subset,通过ggpairs()绘制下面的图形:
对角线上的是数值型变量的分布图和分类变量的条形图,右上角的皮尔逊相关系数对应左下角的两变量散点图,从最后两列箱形图的走势可以看出每个变量对因变量质量和打分的关系,可以大致看到醋酸对因变量呈现负相关关系,酒石酸、硫酸钾、酒精对因变量呈现正相关关系。
接下来绘制酒精和质量之间的关系图,观察之间的大致关系。
ggplot(data = wine, aes(x = 质量, y = 酒精)) +
geom_jitter(alpha = .3) +
geom_boxplot(
alpha = .5,
lwd = 1,
fatten = 0.5,
color = 'steelblue'
) +
stat_summary(fun.y = "mean",
geom = "point",
color = "red")
酒精质量LinearModel <- lm(as.numeric(质量) ~ 酒精, data = wine)
summary(酒精质量LinearModel)
对“质量”用as.numeric()设置为数值型,并检测酒精跟其的数值关系,用线性模型LM来拟合,得到酒精显著影响质量,并且该变量能解释22.67%的因变量(看R方值),说明这个变量对预测质量很重要。
接下来在刚刚的图形中加入geom_smooth()图形并且method用线性模型得到图中的那条红线,也可以看出来酒精和质量之间呈现正相关关系。
ggplot(data = wine, aes(x = 质量, y = 酒精)) +
geom_jitter(alpha = .3) +
geom_boxplot(
alpha = .5,
lwd = 1,
fatten = 0.5,
color = 'steelblue'
) +
stat_summary(fun.y = "mean",
geom = "point",
color = "red") +
geom_smooth(method = lm, color = "red", aes(group = 1))
同理,醋酸和质量之间呈现负相关关系。
ggplot(data = wine, aes(x = 质量, y = 醋酸)) +
geom_jitter(alpha = .3) +
geom_boxplot(
alpha = .5,
lwd = 1,
fatten = 0.5,
color = 'steelblue'
) +
stat_summary(fun.y = "mean",
geom = "point",
color = "red") +
geom_smooth(method = lm, color = "red", aes(group = 1))
同理,可画出质量与其他变量之间的关系走势。
接下来自定义函数simple_cor_test(),该函数的主要含义是求出相关系数。
simple_cor_test <- function(x, y) {
return(cor.test(x, as.numeric(y))$estimate)
}
correlations <- c(
simple_cor_test(wine$酒石酸, wine$质量),
simple_cor_test(wine$醋酸, wine$质量),
simple_cor_test(wine$柠檬酸, wine$质量),
simple_cor_test(log10(wine$残糖量), wine$质量),
simple_cor_test(log10(wine$氯化钠), wine$质量),
simple_cor_test(wine$游离二氧化硫, wine$质量),
simple_cor_test(wine$总二氧化硫, wine$质量),
simple_cor_test(wine$密度, wine$质量),
simple_cor_test(wine$pH, wine$质量),
simple_cor_test(log10(wine$硫酸钾), wine$质量),
simple_cor_test(wine$酒精, wine$质量)
)
cors <- as.numeric(unlist(correlations))[seq(1, 22, 2)]
pvals <- as.numeric(unlist(correlations))[seq(2, 22, 2)]
cors <- as.data.frame(rbind(cors, pvals))
names(cors) <- c('酒石酸',
'醋酸',
'柠檬酸',
'残糖量',
'chlordies',
'游离二氧化硫',
'总二氧化硫',
'密度',
'pH',
'硫酸钾',
'酒精')
cors
最后进行多变量分析:
ggplot(aes(x = 酒石酸, y = 醋酸), data = wine) +
geom_point(aes(color = 质量)) +
facet_wrap( ~ 质量) +
ggtitle('红酒质量与酒石酸及醋酸之间相关关系图')
ggplot(data = wine, aes(y = 密度, x = 酒精, color = 质量)) +
geom_point(alpha = 0.2, size = 2) +
geom_smooth(method = "lm", se = FALSE, size = 1)
ggplot(data = wine,
aes(y = 硫酸钾, x = 酒精, color = 质量)) +
geom_point(alpha = 0.8, size = 1) +
geom_smooth(method = "lm", se = FALSE, size = 1) +
scale_y_continuous(limits = c(0.3, 1.5)) +
facet_wrap( ~ 打分)
发表评论