使用preProcess转换R中的数据会忽略列

时间:2018-06-07 12:15:13

标签: r r-caret

我有一个包含5列的数据框。我想使用yeo-johnson变换将这些变量中的每一个变换为正态分布,因为一些变量具有负值。数据框如下:

df<-data.frame(a=rnorm(1:20,10,3),b=rnorm(20,32,2),c=rnorm(20,19,1),d=rnorm(20,60,6),e=rnorm(20,35,5))

每个变量在数据框的某处都有NA值,但也在前几行中有NA值,如下所示:

df[1:5,]<-NA

现在,我想估算每个变量的转换能力,我正在使用prePrecess包中的caret函数(因为它允许缺少值)。然后我使用predict函数将转换后的值转换为数据框。

pall<-preProcess(df, method = "YeoJohnson", na.remove = FALSE)

transformed_df<-predict(pall,df,na.action=na.pass)

效果很好,但是我的回归模型预测了一些负值,这些负值在反向变换期间会导致问题,因为它会为负值产生NaN。为此,我尝试在变量'd'中添加一些常量,模型给出负值。

df$d<-df$d+30

当我再次对修改后的数据帧使用preProcess函数时,该函数会删除列'd'并仅为4个变量提供幂lambda的估计值。我没有收到任何错误或任何警告,但是当我打印pall的值时,我会收到以下信息:

> pall
Created from 8288 samples and 4 variables

Pre-processing:
  - ignored (0)
  - Yeo-Johnson transformation (4)

Lambda estimates for Yeo-Johnson transformation:
0.61, 0.93, 1.06, 0.17

这种行为可能会或可能不会与其他数据重现,因为我有许多不同的文件具有相似的数据,这种方式(添加常量)适用于其中一些但不是全部。我检查了每列的数字类,因此变量类也没有问题。我不明白为什么preProcess函数会忽略通过添加常量修改的列。任何帮助将不胜感激! 类似的问题已经被问到here但尚未得到答复。

0 个答案:

没有答案