常见的抽样方法
# 导入数据
# 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 | 收入 | |
---|---|---|---|
375 | 1 | A001 | 6811 |
360 | 1 | A002 | 3976 |
505 | 1 | A003 | 2692 |
470 | 1 | A004 | 8156 |
214 | 1 | A005 | 2169 |
450 | 1 | A006 | 6142 |
简单随机抽样最基本的抽样方法。分为重复抽样和不重复抽样。社会调查采用不重复抽样。
sample(x,size,replace=FALSE,prob=NULL)
使用sample函数要将数据按照升序排序
# 对数据序号抽样
# 无放回的抽取10个样本
index_11 <- sample(1:nrow(data),10,replace = FALSE)
index_11
data[index_11,]
专业 | ID | 收入 | |
---|---|---|---|
65 | 2 | B102 | 8522 |
369 | 2 | B081 | 8386 |
309 | 3 | C092 | 6151 |
169 | 2 | B122 | 6439 |
392 | 1 | A022 | 4371 |
41 | 2 | B017 | 4203 |
428 | 2 | B090 | 5392 |
44 | 2 | B147 | 3291 |
402 | 2 | B035 | 7097 |
523 | 2 | B069 | 8141 |
# 又放回的抽取收入大于6000的5个样本
index_12 <- sample(data$ID,5,replace = TRUE)
index_12
# 不等概率的随机抽样
sample(c("a","b","c"),size = 10,replace = TRUE,
prob = c(0.1,0.5,0.4))
分层抽样:先依据一种或几种特征将总体分为若干个子总体,每一子总体称作一个层;然后从每层中随机抽取若干子样本,这些子样本合起来就是总体的样本
strata(data, stratanames=NULL, size, method=c(“srswor”,“srswr”,“poisson”,“systematic”), pik,description=FALSE)
# 导入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_unit | Prob | Stratum | |
---|---|---|---|---|
62 | 1 | 62 | 0.01 | 1 |
241 | 2 | 241 | 0.01 | 2 |
280 | 2 | 280 | 0.01 | 2 |
359 | 3 | 359 | 0.01 | 3 |
393 | 3 | 393 | 0.01 | 3 |
399 | 3 | 399 | 0.01 | 3 |
又称等距抽样。是纯随机抽样的变种。在系统抽样中,先将总体从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_unit | state | region | income | |
---|---|---|---|---|
14 | 14 | nc | 1 | 172.0453 |
38 | 38 | nc | 1 | 341.7052 |
59 | 59 | nc | 1 | 616.9244 |
87 | 87 | nc | 1 | 331.2421 |
107 | 107 | nc | 2 | 150.9538 |
127 | 127 | nc | 2 | 993.4834 |
152 | 152 | nc | 3 | 992.7680 |
179 | 179 | sc | 1 | 854.8830 |
201 | 201 | sc | 2 | 638.2734 |
222 | 222 | sc | 2 | 919.4055 |
有时候我们只是想快速浏览数据的描述统计特征,如果一个一个输入函数计算是很麻烦的,R中给我们提供了很多函数,可以一次性展示多个统计量
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
该函数提供变量和观测的数量,缺失值数量,唯一值数量,平均值,各个分位值,五个最大最小值。
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
--------------------------------------------------------------------------------
该函数可以计算种类繁多的描述性统计量。
stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95)
library(pastecs)
stat.desc(mtcars[vars],norm = TRUE)
mpg | hp | wt | |
---|---|---|---|
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 |
sum | 642.9000000 | 4694.00000000 | 102.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号,我的文章会同步发表至公众号,且是不是有资源分享哦