如何在 R 中向数据集添加更强的抖动?

How do I add stronger Jitter to a dataset in R?

提问人:Antonio 提问时间:6/29/2023 更新时间:6/29/2023 访问量:42

问:

red <- apply(red, 2, jitter)

以上是我当前的代码。将它应用于我的数据框后,我注意到它的强度非常小。

如果我尝试以下操作,它不起作用:

red <- apply(red, 2, jitter(red, factor = 5))
R 数据帧 抖动

评论


答:

0赞 Hack-R 6/29/2023 #1

我认为你根本不需要这个,至少,如果我理解你的意图。下面是使用参数和一些数据的示例。apply()amountiris

从文档中,被描述为:amount

数值的;如果为正数,则用作金额(见下文),否则,如果 = 0,则默认值为 factor * z/50。

默认值 (NULL):系数 * d/5,其中 d 约为 x 值之间的最小差值。

首先,我以你为例,然后我增加了没有它的抖动。apply()

data(iris) # data (for example)

red <- iris # keeping your data.frame name
red <- red[,!colnames(red)=="Species"] 
red <- apply(red, 2, jitter)
var(red)
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    11.528025   0.1123260    2.2771584    1.085271
Sepal.Width      0.112326   9.2040367    0.8921243    0.296827
Petal.Length     2.277158   0.8921243    9.9957082    1.680199
Petal.Width      1.085271   0.2968270    1.6801995    9.194739
red <- jitter(red, amount = 5)
var(red)
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length   19.5928296   1.2155940    2.0093691   0.9365071
Sepal.Width     1.2155940  16.8435802   -0.6173289   0.4445300
Petal.Length    2.0093691  -0.6173289   16.6392921   1.7726687
Petal.Width     0.9365071   0.4445300    1.7726687  18.0234312
red <- jitter(red, amount = 500)
var(red)
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    79193.216    2570.665    6473.9229  -2702.2620
Sepal.Width      2570.665   74802.846   -5463.7883   2568.4585
Petal.Length     6473.923   -5463.788   87327.8161    865.1276
Petal.Width     -2702.262    2568.458     865.1276  87766.5185

增加也确实有效,但根据数据的分布,它可能不太明显。factor

另一种方法是利用有抖动和不有抖动的数据值的差值来获得纯抖动的分量,并将其乘以您喜欢的任何数字,然后将其加回原始数据。

head(red)
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2
6          5.4         3.9          1.7         0.4
head((red + apply(red,2,jitter))*10)
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1    101.91095    70.00209     28.03810    3.831979
2     97.93295    60.18538     27.88743    3.948451
3     93.88483    64.09243     26.13381    3.886840
4     92.19319    61.80549     29.87822    3.818302
5    100.00335    71.95687     28.09964    3.991321
6    108.03858    78.09225     34.06902    8.037211
0赞 Mark 6/29/2023 #2

您也可以将抖动应用于您绘制的数据图,而不是数据本身,如下所示:

mtcars %>% 
    as_tibble() %>%
    select(cyl, vs) %>%
    ggplot(aes(x = vs, y = cyl, fill = cyl)) +
    geom_point() + 
    geom_jitter()

plot

如果希望散射是可重现的,请包含在代码中。set.seed(123)