lmList - 丢失群组信息

时间:2014-12-03 12:35:13

标签: r lm

我正在使用lmList在数据框的许多子集上进行线性模型:

res <- lmList(Rds.on.fwd~Length | Wafer, data=sub, na.action=na.omit, pool=F)

这很好用,我得到了所需的输出(完整输出未显示):

         (Intercept)   Length
    2492    5816.726 1571.260
    2493    2520.311 1361.317
    2494    3058.408 1286.516
    2502    4727.328 1344.728
    2564    3790.942 1576.223
    2567    2350.296 1290.396

我已经通过“Wafer”(上面的第一列)进行了子集化。但是,在我的数据框(“sub”)中,数据按另一个因素“ERF”分组(还有很多其他因素,但我只关注“ERF”):

head(sub):

    ERF Wafer Device Row Col Width Length             Date  Von.fwd Vth.fwd  STS.fwd On.Off.fwd  Ion.fwd Ioff.fwd Rds.on.fwd
 1  474  2492 11.06E  11   6   100      5 09/10/2014 12:05 0.596747 3.05655 0.295971    7874420 0.000104 1.32e-11    9626.54
 3  474  2492 11.08E  11   8   100      5 09/10/2014 12:05 0.581131 3.08380 0.299050    7890780 0.000109 1.38e-11    9193.62
 5  474  2492 11.09E  11   9   100      5 09/10/2014 12:05 0.578171 3.06713 0.298509    8299740 0.000107 1.29e-11    9337.86
 7  474  2492 11.10E  11  10   100      5 09/10/2014 12:05 0.565504 2.95532 0.298349    8138320 0.000109 1.34e-11    9173.15
 9  474  2492 11.11E  11  11   100      5 09/10/2014 12:05 0.581289 2.97091 0.297885    8463620 0.000109 1.29e-11    9178.50
 11 474  2492 11.12E  11  12   100      5 09/10/2014 12:05 0.578003 3.05802 0.294260    9326360 0.000112 1.20e-11    8955.51

我不希望ERF包含在我的lm中,但我确实希望将因子“ERF”与lm结果保持一致,以便稍后着色图,即我想要这样:

    ERF   Wafer    (Intercept)   Length
    474   2492    5816.726     1571.260
    474   2493    2520.311     1361.317
    474   2494    3058.408     1286.516
    475   2502    4727.328     1344.728
    475   2564    3790.942     1576.223
    476   2567    2350.296     1290.396

我知道我可以稍后手动执行此操作,只需在结果中添加一列,其中包含正确的ERF序列。但是,我经常将数据添加到集合中,并且不希望每次都这样做。我确定有更优雅的方式吗?

由于

编辑 - 为解决方案添加的数据:

res <- ddply(sub, c("ERF", "Wafer"), function(x) coefficients(lm(Rds.on.fwd~Length,x)))

head(res)

    ERF Wafer (Intercept)   Length
  1 474  2492    5816.726 1571.260
  2 474  2493    2520.311 1361.317
  3 474  2494    3058.408 1286.516
  4 474  2502    4727.328 1344.728
  5 479  2564    3790.942 1576.223
  6 479  2567    2350.296 1290.396

如果我放弃ERF:

res <- ddply(sub, c("Wafer"), function(x) coefficients(lm(Rds.on.fwd~Length,x)))

head(res)

    Wafer (Intercept)   Length
 1  2492    5816.726 1571.260
 2  2493    2520.311 1361.317
 3  2494    3058.408 1286.516
 4  2502    4727.328 1344.728
 5  2564    3790.942 1576.223
 6  2567    2350.296 1290.396

这有意义吗?我问错了吗?

1 个答案:

答案 0 :(得分:0)

啊,通过更多的研究,我根据这个答案回答了我自己的问题:

Regression on subset of data set

下次必须看起来更难。我使用ddply而不是lmList(让我想知道为什么有人使用lmList ...也许我应该问另一个问题?):

res1 <- ddply(sub, c("ERF", "Wafer"), function(x) coefficients(lm(Rds.on.fwd~Length,x)))