全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 经管文库(原现金交易版)
336 0
2024-04-19
《大数据探索性分析》程序代码 吴翌琳、房祥忠 人大出版社

第二章第二节

一、 确定样本容量

x=seq(6,20,by =0.1)

y=2^(x)

plot(x,y)

samp = round(y)[-c(1:51)][-c(69:90)]

n <- length(samp)

二、确定样本质量:

######  读取数据

mydata <- read.csv("D:/lending club/LoanStats3c.csv",header=T,skip=1)

#读入数据,第一行有标题,所以要跳过第一行从第二行读起

data0 <- na.omit(mydata[,'annual_inc'])#删除annual_inc列的缺失值

N <- length(data0)

####  对数据进行分段,变成因子型数据

data1 <- cut(data0,breaks=c(0,10000*(1:10),150000,100000*(2:5),max(data0)))#数据分成15

PD <- table(data1)/N

x=seq(6,20,by =0.1)

y=2^(x)

plot(x,y)

samp = round(y)[-c(1:51)][-c(69:90)]

n <- length(samp)

Q <- rep(0,n)

J <- NULL

##set.seed(1) 随机数种子

########简单随机抽样

## 选出68个样本量,求每个样本量里面的具体样本数都放在一个矩阵里,以备之后的apply使用

fun1 <- function(i) {

    #set.seed(1)

    p <- sample(data0, i)

    p <- c(p,matrix(NA, 1, samp[n]-length(p))) #将抽样变量统一长度

##function里面能少用参数就少用

    return(p)

}

samp <- as.matrix(samp)

ma <- apply(samp, 1, fun1)

##求样本质量

fun2 <- function(datasam1) {

   datasam11 <- cut(na.omit(datasam1),breaks=c(0,10000*(1:10),150000,100000*(2:5),max(data0)))

   PS <- table(datasam11)/length(na.omit(datasam1))+0.0000000001  ##出现频数为0

   J <- sum((PS-PD)*(log(PS/PD)))

   q <- exp(-J)

   return(q)

}

Q1 <- apply(ma, 2, fun2)

plot(samp,Q1)

########分层随机抽样

##首先求出样本矩阵

str <- length(levels(data1))

data2 <- cbind(data0,data1)

fun3 <- function(s){

    p <- NULL

    for(j in 1:str){

    samp2 <- NULL

    samp2 <- sample((1:N)[data2[,2] == j],round(s*PD[j]))

    p <- c(p,samp2)

    }

    res <- c(data0[p],matrix(NA, 1, samp[n]+5-length(p)))

    return(res)

}

mb <- apply(samp, 1, fun3)

Q2 <- apply(mb, 2, fun2)

plot(samp, Q2)




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群