x = c ( 1, 2, 3, 4 )
x
class ( x )
x1 = as.integer ( x )
class ( x1 ) # 显示向量x1的数据类型
x = c ( 1, 2, 3, 4 ) # 构造元素依次为1,2,3,4的向量x
x==2 # 判断向量x中等于2的元素
! ( x<2 ) # 判断向量x中大于等于2的元素
which ( x<2 ) # 选择向量x中小于2的元素
is.logical ( x ) # 判断向量x是否为逻辑性数据
y = c ( "I", "love", "R" ) # 构造元素依次为字符串“I”,“love”,“R”的向量y
y # 输出y的值
class ( y ) # 显示向量y的数据类型
length ( y ) # 显示向量y的维度,即元素个数
nchar ( y ) # 显示向量y中每个元素的字符个数
y=="R" # 判断向量y中为“R”的元素
#因子型数据,c里面表示有5个数据,levels水平代表特征,labels表示标签
sex = factor ( c(1,1,0,0,1), levels=c(0,1), labels=c("male","female") ) # 设置因子型数据sex
sex # 输出sex的值
class ( sex ) # 显示sex的数据类型
sex1 = factor ( c(1,1,0,0,1), levels=c(0,1), labels=c("female","male") ) # 调换标签(labels)的取值,得到因子型数据sex1
sex1 # 输出sex1的值
sex2 = factor (c(1,1,0,0,1), levels=c(1,0), labels=c("male","female") ) # 调换水平(levels)的取值,得到因子型数据sex2
sex2 # 输出sex2的值
num = factor ( c("a","b","c","d") ) # 设置因子型变量num
as.numeric ( num ) # 将因子型数据num转换为数值型数据
num1 = factor ( c("b","a","d","c") ) # 调换num中元素顺序,构造因子型变量num1
as.numeric ( num1 ) # 将因子型数据num1转换为数值型数据
num + 1 # 因子型数据不可进行数值运算
as.numeric ( num ) + 1 # 转换为数值型数据后可参与运算
library ( MASS ) # 加载含有数据集的软件包MASS
data ( Insurance ) # 获取数据集Insurance
dim ( Insurance ) # 获取数据集的维度
dim ( Insurance[1:10, ] ) # 获取数据集前10条数据的维度
dim ( Insurance[ ,2:4] ) # 获取数据集仅含第2、3、4个变量部分的维度
dim ( Insurance ) [1] # 获取数据集维度向量的第一个元素,即行数
dim ( Insurance ) [2] # 获取数据集维度向量的第二个元素,即列数
vars = c ( "District", "Age" ) # 构造含有“District”和“Age”两个元素的字符向量vars
Insurance [ 20:25, vars ] # 筛选出District及Age变量的第20-25行数据
names ( Insurance ) # 输出Insurance数据集变量名
head ( names(Insurance), n=2 ) # 仅输出前2个变量名
tail ( names(Insurance), n=2 ) # 仅输出后2个变量名
head ( Insurance$Age ) # 仅输出Age变量前若干条数据
class ( Insurance$District ) # 显示District的变量类型
class ( Insurance$Age ) # 显示Age的变量类型
class ( Insurance$Holders ) # 显示Holders的变量类型
levels ( Insurance$Age ) # 显示Age变量的4个水平值
levels ( Insurance$Age) [1] # 显示Age变量的第1个水平值
levels ( Insurance$Age ) [1] = "young" # 将Age变量的第1个水平值修改为“young”
head ( Insurance$Age ) # 回看修改后Age变量前若干个取值
is.character ( Insurance$Age ) # 判断Age是否为字符型变量
class ( Insurance$Claims ) # 显示Claims的变量类型
class ( as.numeric (Insurance$Claims) ) # 将Claims的数据类型强制转换为数值型
# 抽样技术 #
#这一章节的分层抽样有问题,可采用下面的分层抽样来
######
install.packages("sampling")
library(sampling)
##本例子使用的是R自带的数据集iris
irisData=iris
##重命名列
names(irisData)=c("萼长","萼宽","瓣长","瓣宽","种类")
##处理后的数据格式如下所示:
head(irisData, 3)
## 划分训练集与测试集用分层抽样函数Strata,在3类型鸢尾花数据中各抽取80%作为训练集,保存在变量TrainingSet中;
## 余下的20%作为测试集,保存在变量TestSet中。过程如下所示:
##加载
library(sampling)
nLevel=round(nrow(irisData)*0.8/3,-1)
trainingSamp = strata(irisData,stratanames="种类",size = rep(nLevel, 3), method="srswor")
#以Species变量作为分层变量
# 分层抽取训练样本,每层nPerLevel个
trainingSet = getdata(irisData, trainingSamp$ID_unit)
# 训练集
testSet = getdata(irisData,-trainingSamp$ID_unit)
#####
#随机有放回的抽取10个元素
sub1=sample(nrow(Insurance),100,replace=T)
Insurance[sub1,]
#随机抽样时附加了权重值,除了最后一个权重为1,其他均为0
sub2=sample(nrow(Insurance),10,replace=T,prob=c(rep(0,nrow(Insurance)-1),1))
Insurance[sub2,]
#默认是不放回,所以会出现错误超出了总数据元素
sub3=sample(nrow(Insurance),nrow(Insurance)+1)
#分层抽样:以District分层,抽取四个层数量为1,2,3,4,抽取的方式是系统抽样
sub4=strata(Insurance,stratanames="District",size=c(1,2,3,4),method="srswor")
sub4
#显示所有数据
getdata(Insurance,sub4)
#description描述各层的信息
sub5=strata(Insurance,stratanames="District",size=c(1,2,3,4),description=TRUE)
sub5
# id District ID_unit Prob Stratum
# 16 1 16 0.0625 1
#表示序号16被抽出来,第一层,总量为16,抽中的概率为0.0625 = 1/16,
getdata(Insurance,sub5)
# id District Group Age Holders Claims
# 1 1 <1l <25 197 38
#数据的特征中根据Claims的大小来系统抽样,Claims大,抽中的概率就大
sub6=strata(Insurance,stratanames="District",size=c(1,2,3,4),method="systematic",pik=Insurance$Claims)
sub6
getdata(Insurance,sub6)
#整群抽样,抽取其中size两个群,两个群数据全部取出,使用群间特征小,群中特征大的数据抽取
sub7=cluster(Insurance,clustername="District",size=2,method="srswor",description=TRUE)
sub7
#每个群抽中的概率为Prob = 0.5
#sub8出现的概率很少,也运行不了
sub8=mstage(Insurance, stage = c("stratified","stratified"), varnames=c("District","Group"), size=list(c(16,16,16,16),2),description=TRUE)
sub8
getdata(Insurance,sub8)
#随机无放回的抽样,抽取75%的数据,其中训练集和测试集3:1,并显示维度
train_sub=sample(nrow(Insurance),3/4*nrow(Insurance))
train_data=Insurance[train_sub,]
test_data=Insurance[-train_sub,]
dim(train_data);dim(test_data)
#建立一个数据集T,从T中随机抽取数字作为每层的个体总数
#建立四个层,每层抽取n个样本(本次方案中去n=20)
#假定第1层为均值11,方差为1的正态分布
#假定第2层为均值12,方差为2的正态分布
#假定第3层为均值13,方差为3的正态分布
#假定第4层为均值14,方差为4的正态分布
T<-c(517,814,925,1728,405,512,139,126)
#确定每层样本总量
N1<-sample(T,1)
N2<-sample(T,1)
N3<-sample(T,1)
N4<-sample(T,1)
#确定层权
N<-N1+N2+N3+N4
w1<-N1/N
w2<-N2/N
w3<-N3/N
w4<-N4/N
#确定每层样本数量
n<-20
#开始抽样
y1<-sample(rnorm(N1,11,1),n)
y2<-sample(rnorm(N2,12,2),n)
y3<-sample(rnorm(N3,13,3),n)
y4<-sample(rnorm(N4,14,4),n)
#计算每层平均值
y1bar<-mean(y1)
y2bar<-mean(y2)
y3bar<-mean(y3)
y4bar<-mean(y4)
#——————参数的分层抽样估计
Y1bar<-w1*y1bar+w2*y2bar+w3*y3bar+w4*y4bar;Y1bar
a<-N*N
varY1<-(N1*(N1-n)*var(y1)/n+N2*(N2-n)*var(y2)/n+N3*(N3-n)*var(y3)/n+N4*(N4-n)*var(y4)/n)/a;varY1
#——————参数的简单随机抽样估计
Y2<-c(y1,y2,y3,y4)
f<-(4*n)/N
Y2bar<-mean(Y2);Y2bar
varY2<-(1-f)*var(Y2)/(4*n);varY2