点击蓝字关注这个神奇的公众号~


作者简介Introduction

林筱越:华东政法大学 社会学专业 R语言爱好者

往期回顾:

使用ggplot2绘制心形

注:阅读全文大概需要10-15分钟

坐稳了没?要开车了哦


全文结构:

  1. 前言

  2. 数据筛选

  3. 数据预处理

  4. 部分数据重编码与合并

  5. 描述性统计部分

  6. 回归建模总结

这里如果算上「报告输出」是一套基本的数据分析流程,但是这都是后续工作,这里仅展示以R来进行数据处理的部分;不过「招无定式」,并不一定都按照这样的顺序来操作,仅供大家参考

1. 前言

由于是社会学专业,所以「统计学」也算是被纳入到了必修课当中;大一下的时候除了学习社会统计学之外,还学习了统计软件Stata(社科专业除了SPSS外,大多数会使用Stata)。

这里可以提一提Stata的特点,可以说是从「点击式」的SPSS到「命令式」的R一种中间过渡:

  • Stata也可以类似于spss一样点击操作,并且会出现操作命令,上手快;

  • 全面的数据管理功能

  • 同时Stata最强大的地方我觉得就是在它的回归建模部分,生成的结果可以说是十分全面了。

「统计学」与「Stata」的接触也为后面自学R语言以及其他数据分析的工具奠定了兴趣的基础吧,自己也被「定量」的研究方法所吸引,于是自己深入学习,先后入了R语言、Python、MySQL等大坑……

本次文章处理过程是选自我大二时「项目设计的理论与实践」所做的有关「健康水平、婚姻状况对于幸福感的影响」期末作业,也算是一篇小小的基础的社科定量论文吧;但是当时用的是Stata做的,由于之前的代码以不知道丢到哪里了,因此也只能尽量复现我之前的思路并呈现给大家,如有错误,请大家指正!

前期准备

  1. 本文所使用的数据集是来自[CGSS2015(中国社会综合调查)数据](http://cnsda.ruc.edu.cn./index.php?r=projects/view&id=62072446)(作业当时用的是2010版的,结果不会差太多),大家下载数据集后还需要下载pdf格式的问卷,不然无法理解数据的变量命名代表什么意思

  2. 使用工具:Rstudio

  3. 本文使用到的包有:

  • haven包(由于CGSS数据只有stata格式或SPSS格式,没有CSV格式,因此需要额外使用haven包读取)

  • tidyverse包(可以说这是一套搞定数据分析的大礼包了!高效强大)

  • 其他包的部分函数


  • 如果不想使用默认路径,也可以自己获取数据文件所在路径,在使用`read_spss()`函数时可以指定`path`参数即可

  • 一定要加上文件拓展名(.sav)!否则会报错

2. 数据筛选

在论文研究过程中,往往选择一个变量作为研究切入点,然后再通过回归中加入其他自变量以及控制变量来输出结果考察,因此在做数据分析前需要挑选或限定,主要分为以下三部分:

  1. 因变量y:幸福感。(问卷A36题)

  2. 自变量x:健康水平(问卷A15题);婚姻状况(问卷A69题)

  3. 控制变量i:

  • 性别(问卷A2题)

  • 宗教信仰(问卷A5题)

  • 政治面貌(问卷A10题)

  • 教育程度(问卷A7a题)

  • 年龄(问卷A3题,根据出生年月需要自行计算出年龄)

  • 家庭年收入(问卷A62题)

接下来的步骤是需要将以上变量挑出,对数据集进行分割以提高计算效率(如果不减少变量,那么在Rstudio里查看数据集时会特别特别的卡顿!这也就是为什么我说Stata在数据管理上是全面的),这里使用到的是select()函数


  • %>%是属于管道操作符,随tidyverse包一同加载;它会将左边的数据集自动导入后面的函数中,在不不赋值的情况下,能使得代码结果不占用内存;并且也提高了代码的整洁程度

  • 由于问题编号与变量名并不完全一致,所以需要花点心思进行挑选,这里已经帮大家挑选好,直接复制代码即可

  • 这里需要说明的是宗教信仰变量选项(a501),由于变量中

3. 数据预处理部分

挑选出研究的变量后,就需要对数据进行简单的查看、清洗;好在使用已经处理好的数据集,但是在读取数据的时候变量类型可能会有所改变,因此这时候需要做的就是对查看变量类型并对类型进行转换:

对于「年龄变量」,原数据中以出生年份的形式(a301)给出;因此为了方便研究,粗略取2018减去出生年份作为年龄,并创建年龄变量;最后去掉出生年份的变量,使数据整洁。这里使用到的是mutate函数:


接着我们就需要对数据进行命名的修改,这里使用到的是rename函数:


之后我们可以使用R基础的head函数来查看一下预处理后的数据集,可以看出数据集已经被我们化简了


4. 数据重编码与合并

通过对数据初步观察,可以看到所有变量都是定距类型的数值变量,因此接下来就是分别进行类型的转换并重编码,并对部分变量的值进行适当的合并;对于分类变量统一用R基础的factor函数处理为因子;并且对「教育水平」变量(edu)将其从转化为「教育年限」数值变量(如小学=6,初中=9,以此类推)






接着还需要对收入变量进行调整,一般来说,学术界通用的方法是对其取对数,使收入能呈正态分布以便能更好的观察:



此时可能会提出警告出现了NaNs(Not a number)这一类型的值,因此后面需要统计一下这型的值有多少再作处理

至此可以看出数据清洗与重编码部分所花的代码量是最多的;毕竟大多数数据分析工作80%的时间可能都花在了数据的初步处理上。

做完以上的工作后,再次对数据集进行切片,挑选新的已经处理好的变量变量,然后创建新的、处理好的数据集;之后需要查看对数据集各变量进行一个基本的描述性统计,然后再查看一下缺失值和其他异常值的数量:



通过基本观察可以发现,除了收入变量外,大多数变量都包含了缺失值,但是数量并不多;收入变量的缺失从隐私的角度来理解的话或许可以解释得通,因为对于大多数人而言,往往倾向于保密自己的收入情况。

但是收入变量除了之前出现的NaN值外,还有-Inf(无限小)类型的值;很有可能是因为原始数据中出现误填或者是值过大的情况,所以在取对数时出现过小的情况,因此我们还需要查看一下缺失值、NaN值、Inf值的情况:


从返回结果看到相对于上万的样本量(在数据集观察窗口可以发现样本量N=10968)而言,缺失值只占到了大约10%,;而nan类型的值有930个,但是Inf类型的值有180,但是收入变量的缺失值已经达到了931个,所以怀疑缺失值很有可能导致前两种类型的值出现;所以,这里粗糙地将后两个类型的值归入缺失值后再查看一下缺失值的数量变化情况:


这里看出,最后缺失值只有1355个,实际上就是已有的缺失值加上Inf值的数量;那么nan值去哪了呢?其实nan和NA值是有一定关联的,或许说,NA值可以看作是nan值的一种,从官方帮助文档可以查看对于Nan的说明:


不过官方建议不要直接将nan值作为缺失值对待,这里为了方便演示而采取处理为缺失值的操作;如果在实际中出现的nan值特别多,那么就最好就要格外注意一下了!

最后提取无缺失值数据集:


5. 描述性统计部分

由于处理后的数据集分类变量居多,因此这里就使用到R基础的描述性统计函数来查看即可,就可以看到大多数变量的相关描述性统计:


当然,如果还想查看一下一些变量的分布状况,如幸福感、年龄、以及家庭收入等,可以使用ggplot2来进行绘制,这里以画出幸福感和年龄的分布图形为例,这一部分仅是作为拓展:



  • 如果想学习ggplot2绘图更多的细节,可以参考《R graphics cookbook》

  • 由于ggplot2的绘图有些特殊,R基础的「一页多图」方法无法起到作用,因此借助gridExtra包的grid.arrange函数来实现

6. 回归建模

由于因变量属于定序多分类变量,而R基础的glm函数适用于因变量为二分类变量;因此这就需要借用到MASS包的polr函数,最后用summary函数对回归结果进行提取,但是这里就不过多开展有关统计方法的东西,仅作为演示:


由于polr函数生成的结果没有p值,因此需要自己额外创建p值:


  • 作为展示,这里的统计回归诸多细节这里并没有很好的展现与考虑,只能是一个很「粗糙」的回归

  • 不得不说R提供的回归功能还不是很全面,因此需要借助到其他包来实现;这也就是为什么前面提到的Stata在回归模型输出方面是优于R的

7. 总结

  • 本文主要借助了tidyverse包来完成了大部分操作,当然仍有一些部分的功能需要借助其他函数来实现;

  • 大部分的代码都用在了数据的清洗与预处理上,大多数数据分析工作在前期的数据处理上需要花费大量的精力,否则后续工作只能是「垃圾进,垃圾出」

  • 千万千万不要忽略掉缺失值和异常值!

  • 但是R语言并不是没有缺陷,如在对面板数据的管理上我觉得是没有Stata那样完善

  • 目前而言,在许多社科研究中大多数仍然是使用Stata或者Spss等较为简单的统计软件,但是如果花上一点时间掌握R语言,借助其他强大的包,可以实现比Stata和Spss等软件无法实现的功能

愿能与诸君共勉!

 大家都在看 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)

公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

定量论文:探究「健康水平、婚姻状况」对幸福感的影响相关推荐

  1. 硕士论文研究「AI预测性取向」:化妆等因素并不影响判断

    全世界只有3.14 % 的人关注了 数据与算法之美 2017 年,斯坦福大学的一篇<深度学习通过面部识别判断性取向超越人类>曾引发了极大争议,其通过 AI 算法仅需「看面相」即可判断一个人 ...

  2. 「斐波那契」投稿法不好使了:IJCAI 2020出台新规,隐瞒「拒稿重投」者将被一票否决...

    点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 投稿被拒是一件非常令人沮丧的事情,但过来人一般会这样劝你:「没关系,改改再投其他家就好 ...

  3. 《预训练周刊》第14期:World-GAN:Minecraft 世界的生成模型、CMU博士论文探究可控文本生成...

    No.14 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 超大规模预训练模型是当前人工智能领域研究的热点,为了帮助研究与工程人员了解这一领域的进展和资讯,智源社区整理了第14期&l ...

  4. 基于某地区高校数据探究大学生健康状态

    基于某地区高校数据探究大学生健康状态 1 大学生健康状态的主要影响因素研究 1.1 对于计量用到的数据进行说明,并说明主要原因 我们最主要估计的模型如下: 其中A23是我们最关心的因变量是在校大学生健 ...

  5. CV十年发展之观察:1.5万篇论文透视「业界」与「学界」,到底谁更胜一筹?...

    视学算法报道 转载自:机器之心 编辑:杜伟 为了调查计算机视觉领域业界赞助的研究所占的比例,以及它们对该领域产生的影响,加拿大约克大学的一位博士生分析了 2010 至 2019 十年间 Top-5 计 ...

  6. 16岁日本神童打造日版「健康码」,追踪用户行动数据抗击疫情

      新智元报道   来源:techxplore 编辑:梦佳 [新智元导读]16岁日本计算机天才少年加藤(Kato)近日开发了一个使用GPS的行迹记录软件Asiato,可记录用户行踪,同时将数据储存在手 ...

  7. 火爆全网,却只有4页!ICLR爆款论文「你只需要Patch」到底香不香?

    来源:新智元 [导读]顶会投稿竟只写4页?拳打ViT,脚踢MLP,Patch到底能不能成为ALL YOU NEED? 金秋十月,又到了ICLR截稿的季节! 一篇「Patches are all you ...

  8. 【2020年第七次人口普查】省市县三级人口婚姻状况和妇女生育状况

    人口数据是我们在各项研究中最常用的数据之一.人口数据的主要来源是我国每十年进行一次的人口普查,最近一次的人口普查是2020年进行的第七次人口普查,简称七普!很多小伙伴对七普数据翘首以盼,最近<2 ...

  9. 【五六七人口普查】我国省市两级人口婚姻状况和妇女生育状况

    人口数据是我们在各项研究中最常使用的数据!之前我们分享过第七次人口普查(简称七普)的数据!很多小伙伴拿到数据后都反馈数据非常好用,同时很多小伙伴咨询有没有前面几次人口普查的数据,这样方便做人口变化分析 ...

  10. 【芝麻背调百科】​员工隐瞒婚姻状况入职是否构成劳动法意义上的欺诈?

    2017年11月15日,李某珍通过应聘入职中艺公司,从事文案策划岗位工作.入职时, <员工入职表格>"特别提示"一栏中载明:"本人承诺保证所填资料真实,若有虚 ...

最新文章

  1. Selenium3自动化测试——14.操作Cookie
  2. 关于oracle监听程序的相关问题及解决方法
  3. Lucene Inverted index(倒排索引)原来快速入门
  4. Visual Studio 2019 16.3.10 初体验
  5. 基于用户的协同过滤算法
  6. 嵌入式开发有用的github上的开源代码库
  7. 游戏工委:已有63家单位响应防止未成年人沉迷通知
  8. 浅析JS模块规范:AMD,CMD,CommonJS
  9. java 解码_如何在Java中进行URL解码?
  10. windows mysql memcached,Windows上的Memcached(不是memcache)PHP扩展
  11. 【java】本地客户端内嵌浏览器1 - Swing、SWT、DJNativeSwing、javaFX
  12. win10系统从旧固态迁移到新固态,win10系统迁移到固态硬盘ssd
  13. 计算机课ppt插入图片,ppt2010官方基础教程:插入照片-powerpoint技巧-电脑技巧收藏家...
  14. 科研笔记1:科研绘图
  15. 【前端面试题】数据类型-js
  16. 「Python海龟画图」利用海龟画笔绘制奥运五环
  17. 4K60帧!RayLink远程控制软件如何帮助设计师远程办公?
  18. 计算机二级c语言题2016,2016年计算机二级《C语言》专项练习题及答案
  19. 《海边的卡夫卡》读后感
  20. 异步赠书:12月《Go Web编程》领航

热门文章

  1. 写这么骚的代码,真不怕被同事揍么?
  2. openwrt源码分析_编译个性化的OPENWRT固件(openWRT源码修改)
  3. VSNETcodePrint 2005 SQL ServerPrint 2005
  4. 《机器学习》瓜书—周志华
  5. plsql developer无法识别32位oracle问题如何解决?
  6. 第一模块·开发基础-第1章 Python基础语法
  7. Python数据结构1-----基本数据结构和collections系列
  8. [转]Handsontable对单元格的操作
  9. PSR-4——新鲜出炉的PHP规范
  10. 关于LightMapping和NavMesh烘焙的动态载入