0

我正在尝试通过使用 nlme 包中的 lmList() 为不同级别的因子生成箱线图。虽然它适用于帮助页面中的示例,但我的数据返回以下错误:

 library(nlme)
 ##dataframe used (simplified):
   **data.1**
   IDf x.var.1   y.var.1
1    1       1  1.856491
2    1       2  2.999224
3    1       3  3.943896
4    1       4  4.903249
5    1       5  6.034319
6    2       6  6.986847
7    2       7  8.024806
8    2       8  9.139255
9    2       9  9.986437
10   2      10 10.760508

##creating the lmlist file fm1
fm2 <- lmList(y.var.1 ~ x.var.1 | IDf, data.1, na.action = na.exclude) 

##plotting fm2
Call:
    Model: y.var.1 ~ x.var.1 | IDf 
       Data: data.1 
Coefficients:
(Intercept)   x.var.1
1   0.8695317 1.0259681
2   1.3724091 0.9508952

Degrees of freedom: 10 total; 6 residual
Residual standard error: 0.1042786

##plotting boxplots ##(or any kinds of plots really)
> plot(fm2, IDf ~ resid(.))

##returning error:
Error in plot.lmList(fm2, IDf ~ resid(.)) : object 'cF' not found

现在我已经搜索和搜索,但我似乎无法弄清楚这个对象'cF'应该是什么意思,任何帮助将不胜感激!

##EDIT:
> dput(data.1)
structure(list(IDf = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2), x.var.1 = 1:10, 
y.var.1 = c(1.85649137285461, 2.99922390104585, 3.94389558063648, 
4.90324945760581, 6.03431888678115, 6.98684730318977, 8.0248061251629, 
9.13925481513909, 9.98643662828079, 10.7605079666861)), .Names = c("IDf", 
"x.var.1", "y.var.1"), row.names = c(NA, -10L), class = "data.frame")
4

1 回答 1

1

试试这个:

library(nlme)
fm2 <- lmList(y.var.1 ~ x.var.1 | IDf, data.1, na.action = na.exclude)
lapply(fm2 ,  function(lmob) plot(lmob$model$x.var.1, lmob$residuals) )

nlme::lmList 中的 lmList 函数不返回 S4 对象,而是一个更传统的带有编号条目的列表(对应于“IDf”中的数字。

由于 nlme 中的 lmList 与 lme4::lmList 完全不同,早期的注释和代码(有点)偏离目标:

我猜测您使用的软件包lmList是 lme4。我无法plot.lmList在 lme4 中找到帮助页面,但我确实看到该功能存在。我希望找到是否有文档支持以下形式:plot(lmList-object, formula)。使用 showMethods 我看到应该有这样的支持。

showMethods("plot")
#-------
Function: plot (package graphics)
...snipped
x="lmList.confint", y="ANY"
x="lmList", y="formula"
    (inherited from: x="ANY", y="ANY")
...snipped...

我不确定函数调用resid在 RHS 上工作的可能性有多大,或者分组参数在 LHS 上工作的可能性有多大。我最终无法让 plot.lmList 工作。我所做的是这个黑客:

lapply(fm2@.Data, function(lmob) plot(seq_along(lmob$residuals), lmob$residuals) )

我也得到了这个工作:

 lapply(fm2@.Data, function(lmob) plot(lmob$model$x.var.1, lmob$residuals) )
于 2013-02-28T17:30:27.110 回答