好吧,我挥舞着我的白旗。

我正在尝试在数据集中计算黄土回归。

我希望黄土计算一组不同的点,将其绘制成每组的一条平滑线。

问题在于,黄土计算转义了dplyr::group_by函数,因此对整个数据集计算了黄土回归。

互联网搜索使我相信这是因为dplyr::group_by并非以这种方式工作。

我只是想不出如何按小组进行这项工作。

这是我尝试失败的一些示例。

test2 <- test %>%
  group_by(CpG) %>%
  dplyr::arrange(AVGMOrder) %>%
  do(broom::tidy(predict(loess(Meth ~ AVGMOrder, span = .85, data=.))))

> test2
# A tibble: 136 x 2
# Groups:   CpG [4]
   CpG            x
   <chr>      <dbl>
 1 cg01003813 0.781
 2 cg01003813 0.793
 3 cg01003813 0.805
 4 cg01003813 0.816
 5 cg01003813 0.829
 6 cg01003813 0.841
 7 cg01003813 0.854
 8 cg01003813 0.866
 9 cg01003813 0.878
10 cg01003813 0.893

这是可行的,但是我不知道如何将结果应用于原始数据框中的一列。我想要的结果是列x。如果我在单独的一行中将x用作列,则会遇到问题,因为我早先调用了dplyr::arrange
test2 <- test %>%
  group_by(CpG) %>%
  dplyr::arrange(AVGMOrder) %>%
  dplyr::do({
    predict(loess(Meth ~ AVGMOrder, span = .85, data=.))
  })

此错误仅因以下错误而失败。



而且它仍然没有被应用为带有dplyr::mutate的新列
fems <- fems %>%
  group_by(CpG) %>%
  dplyr::arrange(AVGMOrder) %>%
  dplyr::mutate(Loess = predict(loess(Meth ~ AVGMOrder, span = .5, data=.)))

这是我的拳头尝试,与我想做的大部分相似。问题在于,这是在整个数据帧而不是在每个CpG组上执行黄土预测的。

我真的被困在这里。我在网上阅读了purr软件包可能会有所帮助,但是我在弄清楚它时遇到了麻烦。

数据如下所示:
> head(test)
    X geneID        CpG                                        CellLine       Meth AVGMOrder neworder Group SmoothMeth
1  40     XG cg25296477 iPS__HDF51IPS14_passage27_Female____165.592.1.2 0.81107210         1        1     5  0.7808767
2  94     XG cg01003813 iPS__HDF51IPS14_passage27_Female____165.592.1.2 0.97052120         1        1     5  0.7927130
3 148     XG cg13176022 iPS__HDF51IPS14_passage27_Female____165.592.1.2 0.06900448         1        1     5  0.8045080
4 202     XG cg26484667 iPS__HDF51IPS14_passage27_Female____165.592.1.2 0.84077890         1        1     5  0.8163997
5  27     XG cg25296477  iPS__HDF51IPS6_passage33_Female____157.647.1.2 0.81623880         2        2     3  0.8285259
6  81     XG cg01003813  iPS__HDF51IPS6_passage33_Female____157.647.1.2 0.95569240         2        2     3  0.8409501



因此,很明显,我想对数据框中的每个唯一CpG进行黄土回归,将所得的“回归y轴值”应用于与原始y轴值(Meth)匹配的列。

我的实际数据集中有数千个CpG,而不仅仅是四个。

https://docs.google.com/spreadsheets/d/1-Wluc9NDFSnOeTwgBw4n0pdPuSlMSTfUVM0GJTiEn_Y/edit?usp=sharing

最佳答案

您可能已经知道了这一点-但如果没有,这里有一些帮助。

基本上,您需要向预测函数提供要预测的值的data.frame(向量也可以工作,但我没有尝试过)。

因此,对于您的情况:

fems <- fems %>%
  group_by(CpG) %>%
  arrange(CpG, AVGMOrder) %>%
  mutate(Loess = predict(loess(Meth ~ AVGMOrder, span = .5, data=.),
    data.frame(AVGMOrder = seq(min(AVGMOrder), max(AVGMOrder), 1))))

请注意,黄土需要最少数量的观测值才能运行(〜4?我记不清了)。此外,这将需要一段时间才能运行,因此请对您的部分数据进行测试以确保其正常运行。

关于r - 使用dplyr::group_by()在每个组上进行黄土回归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50163106/

10-12 13:54