当前位置: 首页 > 工具软件 > IndexR > 使用案例 >

R语言中的抽样方法与描述统计函数

娄建义
2023-12-01

抽样方法

常见的抽样方法

  • 简单随机抽样
  • 分层抽样
  • 系统抽样
# 导入数据
# 1 金融  2 建筑   3 外语
data <- read.csv("E:\\Github\\code-learning\\R\\data\\第11期资料\\data.csv")
# 按照专业和ID排序
data <- data[order(data$专业,data$ID),]
head(data)
专业ID收入
3751 A0016811
3601 A0023976
5051 A0032692
4701 A0048156
2141 A0052169
4501 A0066142

简单随机抽样

简单随机抽样最基本的抽样方法。分为重复抽样和不重复抽样。社会调查采用不重复抽样。

sample(x,size,replace=FALSE,prob=NULL)

  • x :抽样总体
  • size: 样本容量
  • replace: 是否有放回
  • prob: 抽样概率,默认等概率

使用sample函数要将数据按照升序排序

# 对数据序号抽样
# 无放回的抽取10个样本
index_11 <- sample(1:nrow(data),10,replace = FALSE)
index_11
data[index_11,]
  1. 202
  2. 181
  3. 392
  4. 222
  5. 22
  6. 117
  7. 190
  8. 247
  9. 135
  10. 169
专业ID收入
652 B1028522
3692 B0818386
3093 C0926151
1692 B1226439
3921 A0224371
412 B0174203
4282 B0905392
442 B1473291
4022 B0357097
5232 B0698141
# 又放回的抽取收入大于6000的5个样本
index_12 <- sample(data$ID,5,replace = TRUE)
index_12
  1. C118
  2. A006
  3. B117
  4. B104
  5. C087
# 不等概率的随机抽样
sample(c("a","b","c"),size = 10,replace = TRUE,
       prob = c(0.1,0.5,0.4))
  1. 'c'
  2. 'c'
  3. 'b'
  4. 'c'
  5. 'b'
  6. 'b'
  7. 'b'
  8. 'a'
  9. 'c'
  10. 'b'

分层抽样

分层抽样:先依据一种或几种特征将总体分为若干个子总体,每一子总体称作一个层;然后从每层中随机抽取若干子样本,这些子样本合起来就是总体的样本

strata(data, stratanames=NULL, size, method=c(“srswor”,“srswr”,“poisson”,“systematic”), pik,description=FALSE)

  • stratanames: 分层字段
  • size: 每层样本大小
  • method:
    • srswor:不放回随机抽样
    • srswr:放回随机抽样
    • poisson:泊松抽样
    • systematic:系统抽样
  • pik: 各数据包含在样本中的概率,只在不等概率抽样中使用
  • description: TRUE时,显示样本个数和总体个数
# 导入sampling
library(sampling)

# 按照专业分层抽样,各抽取1个,2个,3个,方法为不放回抽样,显示描述信息
index_21 <- strata(data,stratanames = "专业",size=c(1,2,3),
                   method = "srswor",description = TRUE)
index_21
Stratum 1 

Population total and number of selected units: 100 1 
Stratum 2 

Population total and number of selected units: 200 2 
Stratum 3 

Population total and number of selected units: 300 3 
Number of strata  3 
Total number of selected units 6 
专业ID_unitProbStratum
621 62 0.011
2412 241 0.012
2802 280 0.012
3593 359 0.013
3933 393 0.013
3993 399 0.013

系统抽样

又称等距抽样。是纯随机抽样的变种。在系统抽样中,先将总体从1~N相继编号,并计算抽样距离K=N/n。式中N为总体单位总数,n为样本容量。然后在1~K中抽一随机数k1,作为样本的第一个单位,接着取k1+K,k1+2K……,直至抽够n个单位为止。
系统抽样要防止周期性偏差,因为它会降低样本的代表性。例如,军队人员名单通常按班排列,10人一班,班长排第 1名,若抽样距离也取10时,则样本或全由士兵组成或全由班长组成。

data2=rbind(matrix(rep("nc",165),165,1,byrow=TRUE),
matrix(rep("sc",70),70,1,byrow=TRUE))
data2=cbind.data.frame(data2,c(rep(1,100), rep(2,50), rep(3,15), rep(1,30),rep(2,40)),
1000*runif(235))
names(data2)=c("state","region","income")

# 使用“income”字段计算每个总体单元的入样概率
pik=inclusionprobabilities(data2$income,10)
# 使用系统抽样抽取样本(样本量为10)
s=UPsystematic(pik) 
# 提取观察到的数据
getdata(data2,s)
ID_unitstateregionincome
14 14 nc 1 172.0453
38 38 nc 1 341.7052
59 59 nc 1 616.9244
87 87 nc 1 331.2421
107107 nc 2 150.9538
127127 nc 2 993.4834
152152 nc 3 992.7680
179179 sc 1 854.8830
201201 sc 2 638.2734
222222 sc 2 919.4055

描述统计

有时候我们只是想快速浏览数据的描述统计特征,如果一个一个输入函数计算是很麻烦的,R中给我们提供了很多函数,可以一次性展示多个统计量

summary函数

summary()是系统自带的函数,包括最小最大值,中位数,中值,四分位数及类别数据的频数统计。

vars <- c("mpg","hp","wt")
summary(mtcars[vars])
      mpg              hp              wt       
 Min.   :10.40   Min.   : 52.0   Min.   :1.513  
 1st Qu.:15.43   1st Qu.: 96.5   1st Qu.:2.581  
 Median :19.20   Median :123.0   Median :3.325  
 Mean   :20.09   Mean   :146.7   Mean   :3.217  
 3rd Qu.:22.80   3rd Qu.:180.0   3rd Qu.:3.610  
 Max.   :33.90   Max.   :335.0   Max.   :5.424  

Hmisc包中的describe函数

该函数提供变量和观测的数量,缺失值数量,唯一值数量,平均值,各个分位值,五个最大最小值。

library(Hmisc)
describe(mtcars[vars])
mtcars[vars] 

 3  Variables      32  Observations
--------------------------------------------------------------------------------
mpg 
       n  missing distinct     Info     Mean      Gmd      .05      .10 
      32        0       25    0.999    20.09    6.796    12.00    14.34 
     .25      .50      .75      .90      .95 
   15.43    19.20    22.80    30.09    31.30 

lowest : 10.4 13.3 14.3 14.7 15.0, highest: 26.0 27.3 30.4 32.4 33.9
--------------------------------------------------------------------------------
hp 
       n  missing distinct     Info     Mean      Gmd      .05      .10 
      32        0       22    0.997    146.7    77.04    63.65    66.00 
     .25      .50      .75      .90      .95 
   96.50   123.00   180.00   243.50   253.55 

lowest :  52  62  65  66  91, highest: 215 230 245 264 335
--------------------------------------------------------------------------------
wt 
       n  missing distinct     Info     Mean      Gmd      .05      .10 
      32        0       29    0.999    3.217    1.089    1.736    1.956 
     .25      .50      .75      .90      .95 
   2.581    3.325    3.610    4.048    5.293 

lowest : 1.513 1.615 1.835 1.935 2.140, highest: 3.845 4.070 5.250 5.345 5.424
--------------------------------------------------------------------------------

pastecs包中的stat.desc函数

该函数可以计算种类繁多的描述性统计量。
stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95)

  • basic: 计算其中所有值,控制,缺失值的数量,及最小最大值,值域和总和。
  • desc: 计算中位数,平均值,平均值标准误,平均值置信度为95%的置信区间,方差,标准差及变异系数
  • norm: 返回正态分布统计量(偏度,峰度,统计显著程度)和shapiro-Wilk正态检验结果
  • p: 置信区间
library(pastecs)
stat.desc(mtcars[vars],norm = TRUE)
mpghpwt
nbr.val 32.0000000 32.00000000 32.00000000
nbr.null 0.0000000 0.00000000 0.00000000
nbr.na 0.0000000 0.00000000 0.00000000
min 10.4000000 52.00000000 1.51300000
max 33.9000000 335.00000000 5.42400000
range 23.5000000 283.00000000 3.91100000
sum642.9000000 4694.00000000102.95200000
median 19.2000000 123.00000000 3.32500000
mean 20.0906250 146.68750000 3.21725000
SE.mean 1.0654240 12.12031731 0.17296847
CI.mean.0.95 2.1729465 24.71955013 0.35277153
var 36.3241028 4700.86693548 0.95737897
std.dev 6.0269481 68.56286849 0.97845744
coef.var 0.2999881 0.46740771 0.30412851
skewness 0.6106550 0.72602366 0.42314646
skew.2SE 0.7366922 0.87587259 0.51048252
kurtosis -0.3727660 -0.13555112 -0.02271075
kurt.2SE -0.2302812 -0.08373853 -0.01402987
normtest.W 0.9475647 0.93341934 0.94325772
normtest.p 0.1228814 0.04880824 0.09265499

总之,R中的描述性统计函数是很多的,这只是其中几个。有兴趣的可以发掘下,找到自己习惯的用一个就可以了

欢迎大家关注我的公众号数据里261号,我的文章会同步发表至公众号,且是不是有资源分享哦

 类似资料: