4

我有一个“长”数据框定义为:

q <- data.frame(Indicator.Code=factor(),Year=numeric(),Value=numeric())

并尝试在单个 xyplot 中绘制作为年份函数的值,对于每个不同的值Indicator.Code,如下所示

xyplot( Value~Year,data=q,group=Indicator.Code)

到目前为止,一切都很好。现在我正在尝试添加与线性回归相对应的线

rlm(q$Value[q$Indicator.Code==a]~q$Year[q$Indicator.Code==a])

对于 的所有值Indicator.Code

我不知道怎么做。添加回归线的常用方法,即

xyplot( Value~Year,data=q,group=Indicator.Code),
panel = function(x, y) {
  panel.xyplot(x, y)
  panel.abline(rlm(y ~ x))
}))

不能正常工作(它计算单个回归,并为整个数据集添加一条回归线)。此外,我已经计算了回归(除了图形我也需要它们),并且讨厌必须重新计算它们的想法。

新手可以遵循的任何提示?

4

2 回答 2

2

对于为每个 绘制单独符号的自定义面板函数group,lattice 要求您将实际面板函数包装在对panel.superpose(). 这是一个示例,使用mtcarsdata.frame 中的数据。

library(lattice)
library(MASS)

myPanel <- function(x,y,...) {
    panel.xyplot(x,y,...)
    panel.abline(rlm(y~x), ...)
}

xyplot(mpg~disp, group = cyl, data = mtcars,
       panel = function(...) panel.superpose(panel.groups = myPanel, ...))

## Or, equivalently:
xyplot(mpg~disp, group = cyl, data = mtcars, 
       panel = panel.superpose, panel.groups = myPanel)

在此处输入图像描述

于 2013-05-03T15:15:52.137 回答
2

我是个ggplot2瘾君子:)。in 的等价物ggplot2可以满足您的期望:

library(ggplot2)
ggplot(q, aes(x = Year, y = Value, color = Indicator.Code)) + 
   geom_point() + stat_smooth(method = "rlm")

请注意,我相信您将任何函数传递为method,但如果没有可重现的示例,则很难检查。

于 2013-05-03T15:05:02.427 回答