R语言学习笔记2(学习林月老师R课程)
一、R下载及推荐学习书目
推荐学习书目:至少需要学习5本R语言有关的书才能说你掌握了R
R语言之书编程与统计,Tilman M.Davis著作,李毅译.2019
R markdown:The Definitive Guide,https://bookdown.org/yihui/rmarkdown/
- R下载:The Comprehensive R Archive Network (ustc.edu.cn)首次下载直接点击base包
- R studio下载:R studio是IDE集成开发环境,结合了R和R markdown。R已经有完整可用的功能套件,但是对初学者来说比较难用,因此需要安装整合数据分析(R)和论文写作的集成开发环境(R studio)Download the RStudio IDE - RStudio
- 论文写作的英文环境搭建:打开R studio-file-new file-R markdown,首次打开的时候会弹出对话框,直接yes就会自动下载需要的包。使得我们可以新建输出格式为pdf的.rmd文档,之后输出PDF会报错“pdflatex not found”因为没有安装LaTaX环境。
- 安装LaTaX环境方案一:只是写课堂作业研究报告,对学术要求不高。但要求之前安装过LaTeX的需要卸载已经安装好的,避免两个LaTeX起冲突。
#直接在console控制台输入 install.packages('tinytex') tinytex::install_tinytex()
- 安装LaTaX环境方案一:只是写课堂作业研究报告,对学术要求不高。但要求之前安装过LaTeX的需要卸载已经安装好的,避免两个LaTeX起冲突。
-
-
- 安装LaTaX环境方案二:经常需要写学术论文
#从TeX Live、MiKTex、MacTex中选一个百度搜索安装,会经历漫长的下载和安装过程 #安装之后重启R studio就可以正常从R studio中导出PDF了
- 安装LaTaX环境方案二:经常需要写学术论文
- 论文写作的中文环境搭建
#在控制台安装模板包rticles install.packges("rticles") #点击菜单栏file-new file-R markdown-form a template-CTex #还有很多适用于不同期刊的R markdown模板,其中只有CTex是支持中文显示的模板,唯一缺点是页边距大,调整页边距,在documentclass下一排输入(下列实例是比较常见的页边距情况) geometry:"left=2.5cm,right=2cm,top=3cm,bottom=2.5cm"
-
二、R语言数据类型和变量调用
1. R中的数据类型

2. R中的数据结构
向量vector、矩阵matrix、数据框dataframe(跟matrix相似但不要求数据类型一致,只要求向量长度相等)、数组Array(matrx在多维上的扩展)、列表list(什么都可以往里放,组成部分是元素,列表中甚至可以包括列表)

3.变量调用:子集运算符(subsetting operators)[ ]、[[ ]]、$
- 基于位置索引或者逻辑索引提取
#1.创建向量 color <- c("red",”yellow“) color #输出的结果:[1]"red" ”yellow“ #2.创建矩阵 c(1:24) #输出的结果: #[1]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #[19]19 20 21 22 23 24 #这里的[1]和[19]是紧贴着方括号的元素的位置,因此位置编号的方式是从左到右依次编号 #3.创建矩阵 num <- matrix(c(1:4),2,2) num #输出结果是(行,列) # [,1][,2] #[1,] 1 3 #[2,] 2 4 #4.创建数据框:因为数据框只要求长度一致,不要求数据类型一致,因此可以将上述的向量和矩阵组成数据框 df <- data.frame(color, num) df #输出结果为,因为num没有特定的名字所以默认为x1,x2 #color x1 x2 #red 1 3 #yellow2 4 #想要在表格中查看上述,用View(df) #现在要看看如何提取变量 #(1)df[1]:输出结果直接是第一列 #color #red #yellow #(2)df[,1]:输出结果是[1] ”red“ "yellow" #(3)df[[1]]:输出结果是[1] ”red“ "yellow" #(4)df[[,1]]:直接报错 #(5)用变量名称提取df["color"]结果与(1)一致;df[,"color"]结果与(2)一致;df[["color"]]与(3)一致,区别在于一个是给出了位置,一个是给了一个tag #(6)那为了方便,不用每次都输入tag,使用$。在有名称的情况下,$返回的结果与[[]]是等价的:df$color,输出结果是[1] ”red“ "yellow" #5.创建列表;一共有4个元素,color向量,num矩阵,df数据框,array数组 l <- list(color=color, num, df=df,a=array(c(1:8),dim=c(2,2,2)) l #输出的结果 #$color #[1]"red" "yellow" # #[[2]] # [,1] [,2] #[1,] 1 3 #[2,] 2 4 # #$df # color x1 x2 # 1 red 1 3 # 2 yellow2 4 # #$a #,,1
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
##,,2
# [,1] [,2]
#[1,] 5 7
#[2,] 6 8#现在调用l中的几种情况 #(1)l[1]:输出结果: $color [1]"red" "yellow" #(2)l[[1]]=l[["color"]]输出结果: [1]"red" "yellow" #(3)l$df$x1:输出结果[1] 1 2 #(4)l[["df"]][[2]]:输出结果[1] 1 2 #(5)l[3]["x1"]:输出结果:返回的是空 $<NA> NULL #因此[]截取的是什么,返回的就是什么。因此l[3]["x1"]中提取出来的只有一个列表其中不存在x1的元素 #[[]]则是提取的元素,提取变量返回的是向量而不是数据框
4.描述性统计:以某一个研究为例
- R markdown的基本构成
- 最前面的YAML,规定文档的整体排版格式,行间距页边距页眉页脚文献引用格式等等(点击最左边可以收起来):前面有title、author、date……页眉页脚一定需要在里面写,写完就可以点击左侧收起
title: "Descriptive Statistics" author: "Linyue" date: '2022-05-29' bibliography: "Example.bib" csl: "apa_7th.csl"
#插入的bibliography和csl方便插入文献 output: bookdown::pdf_document2 - 代码块,根据需要在适当的位置插入代码块进行数据分析,可以根据情况选在输出的文档中保留或者隐藏代码:灰色底色的“、、、“之间的是R的代码,最右边可以运行。点击insert a new code可以添加R、Bash、D3、python、SQL等代码块。
- 最前面的YAML,规定文档的整体排版格式,行间距页边距页眉页脚文献引用格式等等(点击最左边可以收起来):前面有title、author、date……页眉页脚一定需要在里面写,写完就可以点击左侧收起
![]()

-
- 文本内容,用R markdown语言规定文本格式,包括加粗、斜体、标题、字体等:引言introduction,蓝色的部分是格式;玫红色是参考文献

- 研究问题和数据:
- 母亲抑郁症对初中学生的认知发展的影响
- 数据来自美国1988-1999年的early childhood longitudual study,kindergarten class从幼儿园追踪到初中毕业,选取8年级的部分数据,总计4577个样本
- 用R做描述性统计分析和表格展示:
-
{r, include=FALSE} #r, echo=FALSE表示不会输出 #load data,仅运行一行命令:选中该命令所在行(点击最左边的数字)ctrl+enter df <- read.csv(file = "maternaldep.csv", header = TRUE) #1.数学分数的平均数“df$mathirt”:df为数据名称;$为调用的符号;mathirt为变量名称 mean(df$mathirt) #2.数学分数的标准差standard deviation sd(df$mathirt) #3.数学分数的最小值最大值中位数 min(df$mathirt) max(df$mathirt) median(df$mathirt) #4.数学分数的百分位数percentile:这里的是median所以是0.5,后面要说明是多少百分位数 quantile(df$mathirt,0.5) #5.对数据中每个变量求均值colMeans(df) # summary statistics for data set tab_01 = data.frame( Mean = c(colMeans(df)), SD = c(sapply(df, sd)), Median = c(sapply(df, median)), Min = c(sapply(df, min)), Max = c(sapply(df, max)) ) #SD = c(sapply(df, sd)),sapply循环函数对数据中的每个变量求标准差;后面的以此类推;后面分别mean,SD看运算结果 #6.制作表格,制表命令Kable ```{r tab2} ## table for descriptive statistics kable( tab_01, col.names = c("Mean", "SD", "Median", "Minimum", "Maximum"), digits = 2, caption = "\\label{tab2}Summary Statistics", booktabs = T #对格式的规定,一般选Ture,如果表格中有莫名其妙的横线你改成F就行了 ) ```
-
5.单个分类变量声明、频数比例、饼图柱状图、R markdown交叉引用
- 分类变量的声明
```{r, echo=TRUE, message=FALSE, results='hide'} # 以种族ethnicity为例,查看种族的变量类型(分类变量还是连续型变量) df$ethnicity Count <- table(df$ethnicity) Count #可以看到ethnicity的取值范围是1~4 library(expss) library(maditr) val_lab(df$ethnicity) = num_lab(" 1 White Non-hispanic 2 Black Non-hispanic 3 Hispanic 4 Other ") #意思是白种拉丁裔是1,黑人拉丁裔为2,拉丁裔3,都不是是4。这里的1234可以是连续的也可以是不具备加减含义的分类变量,因此要查看在R中是否是分类变量is.factor(),如果是F就说明是连续变量 is.factor(df$ethnicity) # False, not a factor variable #连续变量做线性回归,数学成绩和种族coefficients只有一个值,说明确实是当成了连续变量 linear regression when ethnicity is treated as continuous variable lm(mathirt~ethnicity, data=df) # 因此需要把连续变量声明成分类变量define factor variable. ***!!!!Important!!!!!*** df$ethnicity<- factor(df$ethnicity) is.factor(df$ethnicity) # True #现在看声明的分类变量分成几类,会显示1234中的内容 levels(df$ethnicity) #再对数学成绩做线性回归就有4个值了linear regression when ethnicity is treated as factor variable lm(mathirt~ethnicity, data=df) ``` - 频数比例
```{r, include=FALSE} # occurrences # 用table()求分类变量各类的频数 Counts <- table(df$ethnicity) Counts # proportion #直接计算 Calculate proportions for each manually Counts / sum( Counts ) # 用 prop.table()计算各类在总体中的占比 prop.Counts <- prop.table(Counts) prop.Counts ``` Table \@ref(tab:tab3) shows the frequencies and proportions. #这里是交叉引用的内容 ```{r tab3} # Use kable to make a frequency table tab_02 <- data.frame(Counts, prop.Counts) tab_02 <- tab_02[-3] #这里是因为第三列是不想要的所以去除掉了,下面是用kable制表 #注意数据处理和结果作图的代码分开成两个代码块,方便后面形成PDF的时候交叉引用 kable( tab_02, col.names = c("Class","Frequency", "Proportion"), digits = 2, caption = "\\label{3}Frequency table", booktabs = T ) %>% kable_styling(latex_options = "hold_position") ``` - 饼状图柱状图
```{r fig1, fig.cap="The pie chart"} # Make a pie chart pie(Counts) ``` Figure \@ref(fig:fig2) presents the bar chart. ```{r,include=FALSE} # Make a bar chart barplot(Counts) ``` ```{r fig2,fig.height=3.5, fig.cap="Distribution of ethnicity"} #beautify bar chart library(RColorBrewer) #自动配色的包 coul <- brewer.pal(4, "Set2") b<- barplot(Counts, xlab = "Ethnicity",#x轴标签 ylab = "Frequency", main = "Distribution of ethnicity", ylim=c(0,3600),#调整Y轴上限 col=coul, cex.names=0.75, space=0.8#柱子之间的间隔 ) text(x=b, y= Counts+150, labels=as.character(Counts))#每个柱子上边加上数值,间隔150个单位 ``` - 直方图、密度曲线(density curve)和箱线图boxplot
#集中趋势查(均值和中位数);离散趋势(最小值,最大值,四分位数,方差和标准差) ```{r, include=FALSE} #1.检查变量是否是数值型的numeric is.numeric(df$bweight) ``` #2.评估Evaluating a quantitative variable #R自带一个summary()计算最大最小值,四分位数(1、3四分位)和平均值 #var()计算方差;sd()计算标准差 #cbind()添加列 Table \@ref(tab:tab4) shows the center and spread of a variable. ```{r, include=FALSE} # five number summary su <-summary(df$bweight) su <- t(as.matrix(unlist(su))) # variance and standard deviation var <- data.frame(var(df$bweight)) sd <- sd(df$bweight) tab_03 <- cbind(su, var, sd) ``` ```{r tab4} ## table for center and spread kable( tab_03, col.names = c("Minimum", "Q1", "Median", "Mean", "Q3", "Maximum","Variance", "Std. Dev."), digits = 2, caption = "\\label{tab3}Center and spread", align = "c",#c表示居中排列,lr分别表示左右对齐 booktabs = T ) %>% kable_styling(latex_options = c("hold_position")) ``` #3.绘制直方图Histogram graph ```{r, include=FALSE} hist(df$bweight) ``` #绘制出来的还比较钟型,bell-shaped, uni-modal and symmetrical. ```{r fig3,fig.height=3.5, fig.cap="Histogram graph"} hist(df$bweight, main = "Histogram graph of birth weight", xlab = "Birth weight (lbs)", breaks = 20) ``` #4.给直方图绘制密度曲线 ```{r fig4, fig.height=3.5, fig.cap="Histogram and density graph of birth weight"} par(mfrow=c(1,2)) # Adding density curve hist(df$bweight, main = "Adding density curve", xlab = "Birth weight (lbs)", prob = TRUE, ylim=c(0, .4),#定义Y轴最大值 cex.main=0.9,#调整字体大小 col = "peachpuff",#定义画图主体颜色 breaks = 20) lines(density(df$bweight), #增加密度曲线 lwd = 2, #thickness of line线的粗细 col = "chocolate3") #5.加上密度曲线和正态分布曲线 normal distribution curve hist(df$bweight, main = "Adding normal distribution curve", xlab = "Birth weight (lbs)", ylab = "", prob = TRUE, ylim=c(0, .4), cex.main=0.9, breaks = 20, col = "peachpuff") lines(density(df$bweight), #density plot lwd = 2, #thickness of line col = "chocolate3") curve(dnorm(x,mean=mean(df$bweight), sd=sd(df$bweight,na.rm=T)), add=T, col='blue') ``` #6.Boxplot #离群值outliers:Q1-1.5IQR跟最小值比较,如果比最小值大,这条线就是Q1-1.5IQR;如果比最小值小,那么最小值是这条线(Q1为第一四分位数);中间的黑色线是中位数;上面的线是第三四分位数(判断是通过Q3+1.5IQR跟最大值用最大的当上面的线),最上面和最下面的线叫whisker,whisker外面的点就是离群值 ```{r, include=FALSE} boxplot(df$bweight) #也可以去掉离群值再画一次 boxplot(df$bweight, outline = FALSE) ``` #对去掉离群值的箱线图进行标注 ```{r fig5,fig.height=3.5, fig.cap="Boxplot of birth weight"} #因为summrize是第一行第一列,因此取数据框中的第一行第一列su[,1];su[,2]-1.5*IQR(df$bweight)第一四分位数家-1。5IQR;su[,2:3]第四百分位数和中位数在2,3列; su[,5]+1.5*IQR(df$bweight)在第五列的第三四分位数+1.5IQR;su[,6]最大值在第六列 x.value <- c(su[,1],su[,2]-1.5*IQR(df$bweight),su[,2:3], su[,5]+1.5*IQR(df$bweight),su[,6]) #保留小数点两位数,有几位round到几位 x.value <- round(x.value,digits = 2) fig <- boxplot.default(df$bweight, horizontal = TRUE, #变成横着的 boxwex=.8,#箱体的宽度是之前的0.8倍 col = "light grey", xlab = "Birth weight (lbs)", pch = 20,#规定离群值用实心点,防都在一起看不清楚。用第20种即实心点 cex = 0.3,#实心圆点大小0.3 outcol="red",#离群值的颜色 staplewex = 0.5)#分割线的宽度=1是正常的,0.5缩短 text(x=x.value, labels =x.value, y=1.3, cex=0.8)#标注添加文字:在X轴的位置增加X值,y轴的位置是1.3,文字大小为0.8 - ≥2个分类变量的描述性分析和作图(列联表、卡方独立性检验、Fisher精确检验、Cramer's V系数、lambda系数、柱状堆积图、并列柱状图)
- 二维列联表分析:通常会将因变量Y按行分类,自变量按列分类。(1)按照列计算Y的频数分布(2)按行比较是否有比例变化。如果比例变化则说明有相关性
- 如果母亲抑郁程度不会随着性别的变化发生变化,则说明母亲抑郁与孩子性别没有相关性。
![]()
- Pearson卡方独立检验:如果Y和X相关,那么Y的条件概率分布随着X的取值不同而变化。做推断
- Fisher精确检验:比P值还要大,则说是极端值。说是精确,而大家都用卡方的原因是如果没有计算机是没法算fisher的
- Cramer's V系数、lambda系数:现在看两者之间的强弱关系如何
- Cramer's V系数:适用于名义变量或者有序变量,每个变量至少有两个分类(0~0.1弱相关;0.11~0.3一般相关;>0.3强相关)
- lambda系数:
![]()
- Cramer's V系数:适用于名义变量或者有序变量,每个变量至少有两个分类(0~0.1弱相关;0.11~0.3一般相关;>0.3强相关)
- 柱状堆积图、并列柱状图
- 二维列联表分析:通常会将因变量Y按行分类,自变量按列分类。(1)按照列计算Y的频数分布(2)按行比较是否有比例变化。如果比例变化则说明有相关性
6.单个连续变量作图及分析
posted on 2022-09-05 21:33 Stellaself 阅读(434) 评论(1) 收藏 举报


浙公网安备 33010602011771号