《统计学基于R》第一章 数据与R

《统计学基于R》第一章 数据与R

1.1 数据与统计学

1.1.1 什么是统计学

1、统计学:统计学是一门分析数据的科学,它提供了收集数据、处理数据和分析数据的一套方法和技术。

2、处理数据:包括数据的录入、筛选、分类和汇总等。

3、分析数据:利用统计学方法对数据进行分析。包括描述统计和推断统计。

4、描述统计:主要利用图表形式对数据进行汇总和展示,计算一些简单的统计量(诸如比例、比率、平均数和标准差等)。

5、推断统计:利用样本信息来推断总体的特征,内容包括参数估计和假设检验两大类。

6、参数估计:是利用样本信息推断所关心的总体特征

7、假设检验:是利用样本信息判断总体的某个假设是否成立。

1.1.2变量和数据

1、变量:变量是描述所观察对象某种特征,从一次观察到下一次观察可能会出现不同结果。

2、数据:变量的观测结果。

3、变量的分类
在这里插入图片描述

1.1.3 数据的来源

1、抽样:亲自调查或实验

2、总体:包含所研究的全部个体(或数据)的集合

3、样本:从总体中抽取的一部分元素的集合

4、样本量:构成样本的元素的数目

5、概率抽样:根据已知的概率抽取样本元素,也称随机抽样

6、简单随机抽样:从总体N个单位(元素)中随机地抽取n个单位作为样本,使得总体中每一个元素都有相同的机会(概率)被抽中。抽取元素的具体方法有放回抽样和无放回抽样

7、分层抽样(分类抽样):将总体单位按某种特征或规则划分为不同层,再从不同的层中随机地抽取样本

8、系统抽样(等距抽样):将总体中的所有单位(抽样单位)按一定顺序排列,并按某种规则确定一个随机起点,然后每隔一定间隔抽取一个元素,直至抽取n个元素组成一个样本。

9、整群抽样:将总体中若干个单位合并为组(群),抽样时直接抽取群,再对中选群中的所有单位全部实施调查。

1.2 R的初步使用

1.2.1 R语言

R语言:一种自由软件编程语言,主要用于统计分析、绘图、数据挖掘

1.2.2 对象赋值与运行

#对象赋值
x<-c(80,87,98,73,100)                   # 将5个数据赋值给对象x
#  对象运行
sum(x)                                  # 计算对象x的总和
mean(x)                                 # 计算对象x的平均数
var(x)                                 # 计算对象x的方差
barplot(x)                              # 绘制对象x的条形图

1.2.3 查看帮助信息

help(sum)                   # 查看mean函数的帮助信息
help(plotmath)              # 查看R的数学运算符
help(package="stats")       # 查看包stats的信息
var                         # 查看var函数源代码

1.2.4 包的安装和加载

# 安装包
install.packages("car")				# 安装包car
install.packages(c("car","vcd"))	 # 同时安装两个包
#  加载包
library(car)                         # 加载包car
require(car)                         # 加载包car
#  显示已安装包的名称
installed.packages(all.available=TRUE)
#  卸载(删除)安装在R中的包
remove.packages("vcd")         		 # 从R中彻底删除vcd包
# 查看包中的函数
help(package=vcd)

1.3 R数据

R的基本数据类型:数值型、字符型、逻辑型、因子型。

R的基本数据结构:向量、矩阵、数组、数据框、因子、列表。

1.3.1 创建R格式数据

1、 向量:一维数组,可以是数值型数据、字符数据或逻辑值

# 用c函数创建向量
a<-c(2,5,8,3,9)                              # 数值型向量
b<-c("甲","乙","丙","丁")                     # 字符型向量
c<-c("TRUE","FALSE","FALSE","TRUE")          # 逻辑值向量
# 创建向量其他方法
v1<-1:6                                      # 产生1~6的等差数列
v2<-seq(from=2,to=4,by=0.5)                  # 在2~4之间产生步长为0.5的等差数列
v3<-rep(1:3,times=3)                         # 将1~3的向量重复3次
v4<-rep(1:3,each=3)                          # 将1~3的向量中每个元素重复3次

2、 矩阵:二维数组,其中每个元素都是相同的数据类型

# 用matrix函数创建矩阵
a<-1:6                                  # 生成1到6的数值向量
mat<-matrix(a,nrow=2,ncol=3,byrow=TRUE) # 生成2行3列的矩阵
rownames(mat)=c("甲","乙")   			 # 添加行名
colnames(mat)=c("A","B","C")  		   # 添加行名
# 取出矩阵元素
mat[1,2]  		                       # 注:角标从1开始不是从0开始
mat["甲","B"]
mat[1:2,c(1,2)]
t(mat)                   			  # 矩阵转置

3、数据框:表格结构数据

# 写入姓名和分数向量
names<-c("刘文涛","王宇翔","田思雨","徐丽娜","丁文斌")
stat<-c(68,85,74,88,63)
math<-c(85,91,74,100,82)
econ<-c(84,63,61,49,89)
# 将向量组织成数据框形式
table1_1<-data.frame(学生姓名=names,统计学=stat,数学=math,经济学=econ)

1.3.2 数据的读取、处理和保存

1、读取和保存R格式数据

# 读取R格式的数据
load("./data/matrix1_1.RData")
# 保存为R格式的数据
save(matrix_1, file="./data/matrix1_1.RData")

2、读取和保存csv数据

# 读取包含标题的csv格式数据
table1_1<-read.csv("C:/example/chap01/table1_1.csv") 
# 读取不包含标题的csv格式数据
table1_1<-read.csv("C:/example/chap01/table1_1.csv", header=FALSE)
#  将tablel_1存为csv格式文件
write.csv(table1_1, file="C:/mydata/chap01/table1_1.csv“ )

3、读取和保存xlsx数据

# 读取*.xlsx的数据
install.packages("readxl")
library("readxl")
test.df<-read_excel("./data/test_excel.xlsx",sheet=1,col_names=T,col_types=NULL)
# 保存*.xlsx的数据
install.packages("writexl")
library("writexl")
write_xlsx(x = test.df,"./data/save_excle.xlsx")

4、在R中查看数据

head(table1_1,3)                     # 查看前3行
tail(table1_1,3)                     # 查看后3行
nrow(table1_1)                       # 查看行数
ncol(table1_1)                       # 查看列数
dim(table1_1)                        # 同时查看行数和列数
class(table1_1)                      # 查看table1_1的数据类型
str(table1_1)                        # 查看每列数据的数据结构

1.3.3 数据的使用和编辑

1、数据排序

## 按学生姓名第一个字母升序排列
table1_1<-read.csv("./data/example/chap01/table1_1.csv")
newdata<-table1_1[order(table1_1$姓名),]
## 按统计学成绩降序排列
newdata1<-table1_1[order(table1_1$统计学,decreasing=TRUE),]
newdata1<-table1_1[order(-table1_1$统计学),]

2、选择数据框中特定的列

mean(table1_1$统计学)    # 选定数据框中的某一列求平均数
mean(table1_1[,2])      # 选定数据框中的第2列求平均数

3、对矩阵的行列处理

load("./data/matrix1_1.RData")
# 对行或列求和
colSums(matrix1_1[,1:3])
rowSums(matrix_1)
# 将求和结果加到原矩阵上
rbind(matrix1_1,colSums(matrix1_1[,1:3]))  # 对列求和后,按行合并
cbind(matrix1_1,rowSums(matrix1_1))        # 对行求和后,按列合并
# apply对矩阵处理
apply(matrix1_1, 1, sum)  # 对矩阵所有行求和
apply(matrix1_1, 2, sum)  # 对矩阵所有列求和
apply(matrix1_1, 1, mean) # 对矩阵所有行求平均
apply(matrix1_1, 2, mean) # 对矩阵所有列求平均
apply(matrix_1, 2, std)   # 对矩阵所有列求标准差

4、编辑数据框

# 变量重命名
table1_1<-read.csv("./data/example/chap01/table1_1.csv")
head(table1_1,3)
install.packages("reshape")
library(reshape)
rename(table1_1, c(姓名="name",统计学="stat"))               # 对副本重命名,原数据框列名不变
table1_1<-rename(table1_1,c(姓名="name",统计学="stat"))      # 对原数据框重命名

5、缺失值处理

x<-c(2,4,6,NA) 
is.na(x)                              # 判断是否有空值
sum(x)                                # 一旦有空值,则求和得到的也是NA
sum(x,na.rm=TRUE)                     # 排除空值后求和
table1_2<-read.csv("./data/example/chap01/table1_2.csv")
table1_3<-na.omit(table1_2);table1_3  # 删除含有空值的行

6、数据框的合并

rbind(d1.df,d2.df)  # 当两个数据框的列变量相同时,可以按行合并
cbind(d1.df,d4.df)  # 当两个数据框的行索引相同时,可以按列合并。

7、因子类型

类别变量在R中称为因子(factor),因子的取值称为水平。

a<-c("金融","地产","医药","医药","金融","医药")  # a是字符串向量
f<-factor(a)                                   # 将a转换成因子,f是无序的因子,level默认按照拼音排序
num<-as.numeric(f)                             # 将因子转换成数值数据

b<-c("很好","好","一般","差","很差")
f<-factor(b,order=TRUE)                       # f是有序因子,但顺序按拼音字母排序,不是我们理想的的排序

bb<-c("很好","好","一般","差","很差")
ff<-factor(bb,order=TRUE,
           levels=c("很好","好","一般","差","很差"))    #指定理想的level排序

1.3.4 数据类型转换

1、数据框—>向量

table1_1<-read.csv("C:/example/chap01/table1_1.csv")
vector1<-as.vector(table1_1$统计学)                    # 将统计学分数转换成向量
vector2<-as.vector(c(table1_1$统计学,table1_1$数学))   # 将统计学和数学分数合并转换成向量
vector3<-as.vector(as.matrix(table1_1[,2:4]))         # 将数据框转换为向量

2、数据框<—>矩阵

# 将数据框转换为矩阵
mat<-as.matrix(table1_1[,2:4])           # 转换为矩阵mat
rownames(mat)=table1_1[,1]               # 矩阵的行名为table1_1第1列的名称
# 将矩阵转化成数据框
as.data.frame(mat)

3、短格式—>长格式

library(reshape2)
# 融合table1_1与id变量,并命名variable.name="课程",value.name="分数"
tab.long<-melt(table1_1,id.vars="姓名",variable.name="课程",value.name="分数")

1.3.5 生成随机数

# 设置固定的seed后,产生的随机数都相同,每次用rnorm前都要设置
set.seed(15)
rnorm(n, mean=0, sd=1)         # 产生n个服从均值为mean,方差为sd正态分布的随机数
runif(n, min, max)             # 产生n个在min~max之间服从均匀分布随机数
rexp(n)                        # 产生n个服从指数分布的随机数
rchisq(n, df)                  # 产生n个服从自由度为df的卡方分布的随机数

1.3.6 数据抽样与筛选

函数sample(x,size,replace=FALSE,………)用于简单随机抽样。

其中,x为抽样的元素向量;size为样本量;函数默认replace=FALSE,表示无放回抽样;若replace=TRUE,为有放回抽样。

titanic.df <- read.csv(".//data//example//chap01//Titanic.csv")
str(titanic.df)

# 1. 采取无放回和有放回抽样方式抽取10个样本
x<-sample(titanic.df$PassengerId,10,replace=FALSE)  #无放回抽样
y<-sample(titanic.df$PassengerId,10,replace=TRUE)   #有放回抽样

# 2. 筛选出age<20的所有passenger的名字
xx<-sample(titanic.df$Name[titanic.df$Age<20])

1.4 R函数

table1_1<-read.csv(".//data//example//chap01//table1_1.csv")
x<-table1_1$统计学
myfun<-function(x){
  n<-length(x)
  mean<-sum(x)/n
  r<-max(x)-min(x)
  s<-sd(x)
  summ<-data.frame(c(mean,r,s),row.names=c("平均数","极差","标准差"))
  names(summ)<-"值"
  return(summ)
}
y<-myfun(x)

1.5 数据的频数分布

1、频数分布:变量的取值及其相应的频数形成的分布。

一个类别变量——简单频数表

两个类别变量——二维列联表(交叉表)

多个类别变量——多维列联表

# 一维列联表
mytable1<-table(example1_1$社区)
# 将频数表转化成百分比表
prop.table(mytable1)*100    

# 生成二维列联表
# 生成社区和态度的二维列联表
mytable2<-table(example1_1$态度,example1_1$社区)
addmargins(mytable2)                  # 为列联表添加边际和
addmargins(prop.table(mytable2)*100)  # 将列联表转换成百分比表

# 生成三维频数表(列变量为“社区”)
# 行变量为性别和态度,列变量为社区
mytable3<-ftable(example1_1,row.vars=c("性别","态度"),col.vars="社区")
# 生成三维频数表(列变量为"社区",行变量为“性别”和"态度")
ftable(example1_1,row.vars=c("社区"),col.vars=c("性别","态度"))
# 为列联表添加边际和
ftable(addmargins(table(example1_1$性别,example1_1$态度,example1_1$社区)))

# 将列联表转化为数据框
install.packages("DescTools")
library(DescTools)
mytable<-ftable(example1_1,row.vars=c("社区"),col.vars=c("性别","态度"))
df<-Untable(mytable)          # 将列联表转化成原始数据框
dff<-as.data.frame(mytable3)  # 将列联表转换成带有交叉频数标签的数据框

2、计算描述统计量

频数(frequency) :落在各类别中的数据个数

百分比(percentage) :将对比的基数作为100而计算的比值

比例(proportion) :某一类别数据个数占全部数据个数的比值

比率(ratio) :不同类别数值个数的比值

3、 数值数据如何生成生成频数分布表?

(1)确定要分的组数

(2)确定各组的组距(组的宽度):组距=(最大值-最小值) ÷ 组数。

(3)统计出各组的频数即得频数分布表

# 数值数据的类别化
install.packages("DescTools")
library(DescTools)
example1_2<-read.csv(".//data//example//chap01//example1_2.csv")
tab<-Freq(example1_2$销售额)

# 指定组距,不含上限值
tab1<-Freq(example1_2$销售额,breaks=c(160,175,190,205,220,235,250,265,280),right=FALSE)
tab2<-data.frame(分组=tab1$level,频数=tab1$freq,
                 频数百分比=tab1$perc*100,累积频数=tab1$cumfreq,
                 累积百分比=tab1$cumperc*100)  # 重新命名频数表中的变量
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
统计学基于R第四章的答案主要涉及以下几个方面: 1. 数据准备:数据准备是统计学中非常重要的一步,涉及到数据的收集、整理、清洗和转换等工作。R语言提供了许多函数和包,可以帮助我们方便地进行数据准备的工作,包括数据导入、变量选择、缺失值处理等。 2. 描述性统计:描述性统计是对数据进行总结和描述的一种方法,主要包括数据的中心趋势、离散程度和分布形状等方面的指标。R语言中的summary()函数可以方便地计算数据的均值、中位数、最大值、最小值等统计量,并且利用绘图函数可以将数据的分布情况可视化。 3. 推断统计:推断统计是基于样本数据对总体进行推断和假设检验的方法。R语言提供了许多函数和包,用于计算样本均值、方差以及进行假设检验等,例如t.test()函数可以进行单样本、双样本或配对样本的t检验。 4. 回归分析:回归分析是统计学中常用的一种方法,用于研究变量之间的关系和预测。R语言中的lm()函数可以进行线性回归分析,可以计算回归系数、拟合优度以及进行回归模型的诊断等。 总之,统计学基于R第四章的答案涵盖了数据准备、描述性统计、推断统计和回归分析等方面。R语言提供了丰富的函数和包,可以帮助我们进行各类统计分析的计算和可视化,并且具有灵活性和易用性,因此在统计学的学习和实践中得到了广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力不秃头的小仙主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值