2021-10-06 统计学-基于R(第四版)第一章课后习题记录及总结

本文通过R语言展示了数据录入、矩阵操作、列联表分析及频数分布表的生成过程。首先,创建并修复了数据框table1,然后将其转换为矩阵mat,并进一步转换为长格式tab.long。接着,利用table和ftable函数对泰坦尼克号数据进行性别与生存率的列联表分析,最后使用Freq函数生成频数分布表table4。这些操作涵盖了数据整理和初步分析的关键步骤。
摘要由CSDN通过智能技术生成

1.1 题目如下

(1)基础数据录入:

> income<-c("低收入户","中等偏下户","中等收入户","中等偏上户","高收入户")
> year2016<-c(3750,7338,10508,14823,28225)
> year2017<-c(4647,9330,13506,19404,36957)
> year2018<-c(6545,12674,18277,26044,49175)
> year2019<-c(8004,17024,24832,35576,67132)
> year2020<-c(10422,21636,31685,45639,85541)

错误1:

> table1<-data.frame(收入户等级=income,2016年=year2016,2017年=year2017,2018年=year2018,2019年=year2019,2020年=year2020)
Error: unexpected symbol in "table1<-data.frame(收入户等级=income,2016年"

原因是系统无法识别数字字符,于是我给带有数字的字符加上引号就出现了错误2:

> table1<-data.frame(收入户等级=income,"2016年"=year2016,"2017年"=year2017,"2018年"=year2018,"2019年"=year2019,"2020年"=year2020)
> table1
  收入户等级 X2016年 X2017年 X2018年 X2019年 X2020年
1   低收入户    3750    4647    6545    8004   10422
2 中等偏下户    7338    9330   12674   17024   21636
3 中等收入户   10508   13506   18277   24832   31685
4 中等偏上户   14823   19404   26044   35576   45639
5   高收入户   28225   36957   49175   67132   85541

每个数字前面都自动添加了X

解决方式:在末尾加上check.names=F

> table1<-data.frame(收入户等级=income,"2016年"=year2016,"2017年"=year2017,"2018年"=year2018,"2019年"=year2019,"2020年"=year2020,check.names=F)
> table1
  收入户等级 2016年 2017年 2018年 2019年 2020年
1   低收入户   3750   4647   6545   8004  10422
2 中等偏下户   7338   9330  12674  17024  21636
3 中等收入户  10508  13506  18277  24832  31685
4 中等偏上户  14823  19404  26044  35576  45639
5   高收入户  28225  36957  49175  67132  85541

然后保存为csv格式(保存路径要用/而不是\),完整代码为:

>income<-c("低收入户","中等偏下户","中等收入户","中等偏上户","高收入户")
> year2016<-c(3750,7338,10508,14823,28225)
> year2017<-c(4647,9330,13506,19404,36957)
> year2018<-c(6545,12674,18277,26044,49175)
> year2019<-c(8004,17024,24832,35576,67132)
> year2020<-c(10422,21636,31685,45639,85541)
> table1<-data.frame(收入户等级=income,"2016年"=year2016,"2017年"=year2017,"2018年"=year2018,"2019年"=year2019,"2020年"=year2020,check.names=F)
> table1
  收入户等级 2016年 2017年 2018年 2019年 2020年
1   低收入户   3750   4647   6545   8004  10422
2 中等偏下户   7338   9330  12674  17024  21636
3 中等收入户  10508  13506  18277  24832  31685
4 中等偏上户  14823  19404  26044  35576  45639
5   高收入户  28225  36957  49175  67132  85541
>write.csv(table1,file="D:/作业/统计学R/table.csv")

(2)相关理解见注释,完整代码为:

> mat<-as.matrix(table1[,2:6])  #将table1中的第2到第6列转换成矩阵mat
> rownames(mat)=table1[,1]      #矩阵的行名为table1第1列的名称
> mat
           2016年 2017年 2018年 2019年 2020年
低收入户     3750   4647   6545   8004  10422
中等偏下户   7338   9330  12674  17024  21636
中等收入户  10508  13506  18277  24832  31685
中等偏上户  14823  19404  26044  35576  45639
高收入户    28225  36957  49175  67132  85541

(3)相关理解见注释,完整代码为:

>install.packages("reshape2")  #下载reshape2包
> library(reshape2)            #加载reshape2包
> tab.long<-melt(table1,id.vars="收入户等级",variable.name="年份",value.name="收入")
#转换成长格式,id.vars为变量,variable.name为变量名,value.name为数值名
> tab.long
   收入户等级   年份  收入
1    低收入户 2016年  3750
2  中等偏下户 2016年  7338
3  中等收入户 2016年 10508
4  中等偏上户 2016年 14823
5    高收入户 2016年 28225
6    低收入户 2017年  4647
7  中等偏下户 2017年  9330
8  中等收入户 2017年 13506
9  中等偏上户 2017年 19404
10   高收入户 2017年 36957
11   低收入户 2018年  6545
12 中等偏下户 2018年 12674
13 中等收入户 2018年 18277
14 中等偏上户 2018年 26044
15   高收入户 2018年 49175
16   低收入户 2019年  8004
17 中等偏下户 2019年 17024
18 中等收入户 2019年 24832
19 中等偏上户 2019年 35576
20   高收入户 2019年 67132
21   低收入户 2020年 10422
22 中等偏下户 2020年 21636
23 中等收入户 2020年 31685
24 中等偏上户 2020年 45639
25   高收入户 2020年 85541


1.2 题目如下

完整代码如下:

> set.seed(123)    #设定随机数种子
> mat<-matrix(rnorm(n=20,mean=0,sd=1),nrow=4,ncol=5,byrow=TRUE)
#rnorm()生成20个标准正态分布随机数,n代表数字个数,mean代表均值,sd代表标准差,matrix生成矩阵
> mat
           [,1]       [,2]       [,3]        [,4]       [,5]
[1,] -0.5604756 -0.2301775  1.5587083  0.07050839  0.1292877
[2,]  1.7150650  0.4609162 -1.2650612 -0.68685285 -0.4456620
[3,]  1.2240818  0.3598138  0.4007715  0.11068272 -0.5558411
[4,]  1.7869131  0.4978505 -1.9666172  0.70135590 -0.4727914
> set.seed(123)
> mat<-matrix(rnorm(n=20,mean=0,sd=1),nrow=5,ncol=4,byrow=TRUE)
> mat
           [,1]       [,2]       [,3]        [,4]
[1,] -0.5604756 -0.2301775  1.5587083  0.07050839
[2,]  0.1292877  1.7150650  0.4609162 -1.26506123
[3,] -0.6868529 -0.4456620  1.2240818  0.35981383
[4,]  0.4007715  0.1106827 -0.5558411  1.78691314
[5,]  0.4978505 -1.9666172  0.7013559 -0.47279141


 1.3 题目如下

 (1)相关理解见注释,完整代码为:

> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv") #读取csv数据
> attach(Titanic)
> table2<-table(Sex,Survived) #生成二维列联表
> table2
        Survived
Sex        No  Yes
  Female  126  344
  Male   1364  367
> addmargins(table2) #加上边际和
        Survived
Sex        No  Yes  Sum
  Female  126  344  470
  Male   1364  367 1731
  Sum    1490  711 2201

 (2)相关理解见注释,完整代码为:

> table3<-ftable(Titanic,row.vars=c("Class","Sex","Age"),col.vars="Survived")
#生成多维列联表,row.vars为行变量,col.vars为列变量
> table3
                   Survived  No Yes
Class Sex    Age                   
1st   Female Adult            4 140
             Child            0   1
      Male   Adult          118  57
             Child            0   5
2nd   Female Adult           13  80
             Child            0  13
      Male   Adult          154  14
             Child            0  11
3rd   Female Adult           89  76
             Child           17  14
      Male   Adult          387  75
             Child           35  13
Crew  Female Adult            3  20
             Child            0   0
      Male   Adult          670 192
             Child            0   0

 (3)相关理解见注释,完整代码为:

> df<-as.data.frame(table3)  #将列联表转化成带有类别频数的数据框
> df
   Class    Sex   Age Survived Freq
1    1st Female Adult       No    4
2    2nd Female Adult       No   13
3    3rd Female Adult       No   89
4   Crew Female Adult       No    3
5    1st   Male Adult       No  118
6    2nd   Male Adult       No  154
7    3rd   Male Adult       No  387
8   Crew   Male Adult       No  670
9    1st Female Child       No    0
10   2nd Female Child       No    0
11   3rd Female Child       No   17
12  Crew Female Child       No    0
13   1st   Male Child       No    0
14   2nd   Male Child       No    0
15   3rd   Male Child       No   35
16  Crew   Male Child       No    0
17   1st Female Adult      Yes  140
18   2nd Female Adult      Yes   80
19   3rd Female Adult      Yes   76
20  Crew Female Adult      Yes   20
21   1st   Male Adult      Yes   57
22   2nd   Male Adult      Yes   14
23   3rd   Male Adult      Yes   75
24  Crew   Male Adult      Yes  192
25   1st Female Child      Yes    1
26   2nd Female Child      Yes   13
27   3rd Female Child      Yes   14
28  Crew Female Child      Yes    0
29   1st   Male Child      Yes    5
30   2nd   Male Child      Yes   11
31   3rd   Male Child      Yes   13
32  Crew   Male Child      Yes    0


1.4 题目如下

 完整代码如下:

> library(DescTools)  #加载频数分布表所在包
> set.seed(123)       #设置随机数种子
> table4<-Freq(rnorm(n=1000,mean=200,sd=10),breaks=c(170,180,190,200,210,220,230,240),right=FALSE)
#生成频数分布表,breaks设置组距,不含上限值
> table4
       level  freq   perc  cumfreq  cumperc
1  [170,180)    19   1.9%       19     1.9%
2  [180,190)   146  14.6%      165    16.5%
3  [190,200)   330  33.0%      495    49.5%
4  [200,210)   348  34.8%      843    84.3%
5  [210,220)   129  12.9%      972    97.2%
6  [220,230)    27   2.7%      999    99.9%
7  [230,240]     1   0.1%    1'000   100.0%


呼哈~结束啦!贴一个带有答案的网站(只有效果图没有代码,代码全部是我自己比对教材做出来的):《统计学—基于R》(第4版)—各章习题答案人大版 - 道客巴巴 (doc88.com)

下次见。

  • 35
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值