我想从数据集(14个变量,200个观察值)中推算值,然后将其分成70%的训练数据集和30%的测试数据集。
每次我使用Amelia
进行估算时,我都会得到不同类型的错误消息。我正在寻找最简单的方法来让Amelia
输入整个数据集。
colnames(mydata) <- c("age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal", "num")
mydata <- subset(mydata, select=-c(ca,thal))
我也得到这个错误,我不确定这是什么意思:
Amelia错误码:36
名义变量"chol"中的类别数大于观测值的三分之一。
警告消息:
1: In amcheck(x = x, m = m, idvars = numopts$idvars, priors = priors,:
标记为标称的变量中的一个的类别数大于10个类别。检查标称规格
Amelia检查一个变量中是否有太多的类别。这是通过计算变量的唯一出现次数并将其与三分之一的行进行比较来实现的。
例如,如果您有300行数据,并且您的列中有超过100个唯一值(不包括NA), amelia将返回此错误。在这么少的记录上计算这么多不同的值几乎是不可能的,您还不如填充随机值。要么考虑是否需要这个列,获取更多的数据,要么看看是否能找到一种方法,根据领域知识来填补缺失的数据。
有关Amelia的更多信息,请查看小插图,但如果您想通读代码,请查看github页面。你可以在这里找到。特别是错误代码可以方便地通读(amcheck.r)。
将数据分成70/30可以通过多种方式完成。我使用的两个是:
library(caTools)
# set.seed for reproducibility.
set.seed(144)
split <- sample.split(dataframe$"Variable to split on", SplitRatio = 0.7)
train <- subset(dataframe, split == TRUE)
test <- subset(dataframe, split == FALSE)
或
library(caret)
# set.seed for reproducibility.
set.seed(42)
split <- createDataPartition(y = dataframe$"Variable to split on", p=0.7, list=FALSE)
train <- dataframe[subtrain,]
test <- dataframe[-subtrain,]