如何按个人对样本面板数据进行采样/划分(最好使用插入符号库)?

古格姆

我想对面板数据进行分区并保留数据的面板性质:

      library(caret)
      library(mlbench)

      #example panel data where id is the persons identifier over years
      data <- read.table("http://people.stern.nyu.edu/wgreene/Econometrics/healthcare.csv",
                    header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)

      ## Here for instance the dependent variable is working
      inTrain <- createDataPartition(y = data$WORKING, p = .75,list = FALSE)

      # subset into training
      training <- data[ inTrain,]
      # subset into testing
      testing <- data[-inTrain,]
      # Here we see some intersections of identifiers 
      str(training$id[10:20])
      str(testing$id)

但是我想在对数据进行分区或采样时,避免将同一个人(id)分成两个数据集,这是他们从数据中随机采样/分区的一种方法,将个人分配给相应的分区而不是观察?

我尝试取样:

    mysample <- data[sample(unique(data$id), 1000,replace=FALSE),] 

但是,这破坏了数据的面板性质。

ie

我认为使用的采样方法中有一个小错误sample():它id像行号一样使用变量。相反,该函数需要获取属于ID的所有行:

nID <- length(unique(data$id))
p = 0.75
set.seed(123)
inTrainID <- sample(unique(data$id), round(nID * p), replace=FALSE)
training <- data[data$id %in% inTrainID, ] 
testing <- data[!data$id %in% inTrainID, ] 

head(training[, 1:5], 10)
#    id FEMALE YEAR AGE   HANDDUM
# 1   1      0 1984  54 0.0000000
# 2   1      0 1985  55 0.0000000
# 3   1      0 1986  56 0.0000000
# 8   3      1 1984  58 0.1687193
# 9   3      1 1986  60 1.0000000
# 10  3      1 1987  61 0.0000000
# 11  3      1 1988  62 1.0000000
# 12  4      1 1985  29 0.0000000
# 13  5      0 1987  27 1.0000000
# 14  5      0 1988  28 0.0000000


dim(data)
# [1] 27326    41
dim(training)
# [1] 20566    41
dim(testing)
# [1] 6760   41
20566/27326
### 75.26% were selected for training

让我们检查类余额,因为它createDataPartition将使WORKING的类余额在所有集合中均相等。

table(data$WORKING) / nrow(data)
#         0         1 
# 0.3229525 0.6770475 
#
table(training$WORKING) / nrow(training)
#         0         1 
# 0.3226685 0.6773315 
#
table(testing$WORKING) / nrow(testing)
#         0         1 
# 0.3238166 0.6761834 
### virtually equal

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用插入符号库预测GBM的概率

如何使用JavaScript在Illustrator中加载符号库?

如何在表情符号库中对表情符号进行分类?

如何最好使用 os 库从 Python 运行 bash 命令?

如何最好使用代码示例对特征进行热编码

如何使用多个目标变量(多输出)对样本数据进行上下采样?

如何将使用emcc从cpp文件编译的.bc文件与项目符号库链接?

是否最好使用AsyncTask在数据库上写数据?

如何在R中使用各种样本量进行采样?

预期数据按样本划分

如何链接项目符号库(来自 FindBullet.cmake)?

符号库设计模式

最好使用null或-1在数据库的整数列中表示“无穷大”

要离线访问数据,最好使用Room库或HTTP缓存控件?

如何对数字字符串列表进行排序?最好使用LINQ

如何在Java应用程序中显示地图数据(最好使用OpenStreetMaps)?

如何获得数据帧的简单散点图(最好使用Seaborn)

使用CTE时,最好使用join或in()进行过滤?

使用R中的样本按列和行对矩阵进行采样

最好使用str_replace(...)进行多次替换

如果仅在进行android开发,最好使用flutter?

Rails 4-最好使用PATCH或POST进行更新

最好使用数组或对象存储结构化数据?

如何从按 groupby 列加权的数据帧中进行采样

按组对数据框的子集进行采样,样本大小等于数据框的另一个子集

Python Matplotlib Colorbar科学符号库

如何在Oracle数据库中进行小时划分

如何编辑GTK + 3主题(最好使用GUI)?

如何通过标记删除Docker映像,最好使用通配符?