[R] Fwd: User defined panel functions in lattice
ilai
keren at math.montana.edu
Sat Apr 21 03:14:42 CEST 2012
Oops - that is "reply all"
On Fri, Apr 20, 2012 at 5:29 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>
> I'm a bit puzzled by this exchange. I know there is a 'panel.locfit', but
> you two are spelling it differently. Can you explain why you are doing so?
>
Hi David,
Thanks for stepping in. panel.Locfit is the OP's local function (or
just a wrapper ?) which I believe is here
http://www.mail-archive.com/r-help@r-project.org/msg167164.html
Note the two errors OP encountered (solved down the thread) were
caused by the way he called the function in xyplot, not by
panel.Locfit itself, which I did not modify. I guess now the issue is
how to generalize panel.Locfit somehow, but I am not sure how. I
suspect the problem is not my understanding but that there really
isn't any one specific problem here for the list to solve, though,
again, I am known for misinterpreting OP requests... :)
>> ?panel.locfit
As I said, I am unfamiliar with the package - but this doesn't
surprise me. Thank you for pointing it out, wish you've noticed the
exchange sooner...
Cheers
>> ?panel.Locfit
> No documentation for ‘panel.Locfit’ in specified packages and libraries:
> you could try ‘??panel.Locfit’
>
>> ?panel.locfit
>
> {locfit} R Documentation
> Locfit panel function
>
> Description
>
> This panel function can be used to add locfit fits to plots generated by
> trellis.
>
>
>
>> I am trying to construct a function/s to cover as many of the normal
>> situations as possible.
>> Usually I have to amend colours lines etc to distinguish the data.
>>
>> I want to cover a number of situations
>> 1 Conditioned by panel no groups
>> 2 Conditioned by panel and groups.
>> 3 Multiple values for above - to show colleagues (EDA)
>> 4 Conditioned by panel and groups + an overall fit for all the data within
>> a panel
>> 5 Several y values in a panel eg Y1+Y2 and outer = FALSE with a fit for
>> each of Y1 and Y2
>>
>> I am trying to cover as many of the above situations in 1 function before
>> resulting to trellis.focus or
>> overlaying. The graphs that I normally create are not simple, generally
>> involving useOuterStrips
>> which may have different y scales for panel rows (combindeLimits/manual)
>> and different panel row heights.
>>
>> locfit is like loess but 2 arguments for smoothing; the degree of
>> smoothing produced by the defaults
>> is approximately that of loess but I normally need less smoothing (the
>> same would be apply for loess).
>>
>> Most of the questions to Rhelp are for 1 with just a small number for 5
>> and they are not applicable here
>> and understanding the requirements for passing arguments in these
>> different situations I find difficult.
>> I would like to reduce the number of panel functions to the minimum to
>> cover the general situaltions because
>> my graphs are usually not normal and then add to them for a particular
>> situation.
>>
>> Regards
>>
>> Duncan
>>
>>
>> At 01:38 21/04/2012, you wrote:
>>>
>>> Duncan,
>>> First off, I admit it is not clear to me what you are trying to
>>> achieve and more importantly, why? by "why" I mean 1) I don't see the
>>> advantage of writing one general panel function for completely
>>> different situations (one/multiple smoothers, grouping levels etc.) 2)
>>> your intended result as I understand it seems rather cluttered, google
>>> <chartjunk>. 3) I am unfamiliar with locfit package, but are we
>>> reinventing the wheel here ? i.e. will modifying settings in xyplot(y
>>> ~x, xx, groups = Farm, type=c('p','smooth')) achieve the same ?
>>>
>>> With your initial reproducible example (thank you) it was easy to
>>> eliminate the errors, but clearly the resulting plots are not what you
>>> intended (continue inline):
>>>
>>> On Thu, Apr 19, 2012 at 4:23 PM, Duncan Mackay <mackay at northnet.com.au>
>>> wrote:
>>> <snip>
>>> > 3. What I want to be able to add in the above is extra lines with
>>> > different
>>> > values of nn.
>>> > I think I will have to modify panel.Locfit so that it goes through
>>> > different values of nn in each of the panels and groups if I want
>>> > different
>>> > colours for extra lines with different nn values
>>>
>>> Yes you could. There are several options:
>>> add group.number to the arguments of panel.locfit and use it to make
>>> nn a vector, along the lines of
>>> panel.foo <- function(x,y,group.number,theta,...){
>>> smpar <- theta[group.number]
>>> panel.loess(x,y,smpar,...)
>>> panel.xyplot(x,y,...)
>>> }
>>>
>>> xyplot(y~x,xx,group=Farm,theta=c(4,1,.4),panel=panel.superpose,panel.groups=panel.foo)
>>>
>>> # or
>>> xyplot(y~x|Farm,xx,group=Padd,theta=c(.6,1),
>>> panel=panel.superpose,panel.groups=panel.foo)
>>>
>>> Here you will need to modify the Farm group to 6 levels - 3*two
>>> smoothers.
>>>
>>> You could make nn a list and loop over it inside the panel function.
>>> Looks like you tried something like that with specifying 2
>>> panel.Locfit, one suggestion to your code:
>>>
>>> panel.Locfit(x,y,...) # default 0.7
>>> panel.Locfit(x,y,nn=0.9) # i.e. remove the
>>> ... to avoid clashes
>>>
>>> Finally, use ?trellis.focus to plot the second smoother "post-hoc".
>>> also the latticeExtra package has many useful tools to create layers
>>> of the same (or different) plot with different settings.
>>>
>>> > 4 Produce an extra line for a fit for all the groups in 1/2+ panels.
>>> > As for 3 but I do not know how to group all the x and y's for each
>>> > of the
>>> > panes using panel.groups
>>>
>>> Why does it matter ? seems you have failed to learn the lesson from
>>> the first post - the same functionality applies to 1 as to multiple
>>> panels. Does each panel have a different grouping structure ? use
>>> packet.number() for panels similar to group.number idea.
>>>
>>> > I need to do this and then scale up for a panel function to include
>>> > confidence bands
>>>
>>> than expand the xlim,ylim or scales in ?xyplot
>>>
>>> >
>>> > For the record making Farm and Padd factors. With 1 panel and groups =
>>> > Farm
>>> > works with the extra line the same colour for its group
>>> > a similar situation for the three panels when conditioned by Farm and
>>> > groups
>>> > = Pad
>>>
>>> ????
>>>
>>> Like I said I am a little lost on this problem but I hope this helps
>>> giving some direction.
>>> Cheers
>>>
>>>
>>> >
>>> > xyplot(y ~x, xx,
>>> > groups = Farm,
>>> >
>>> > par.settings = list(strip.background = list(col =
>>> > "transparent"),
>>> > superpose.line = list(col =
>>> > c("black","grey"),
>>> > lwd =
>>> > c(1,2,3),
>>> > lty =
>>> > c(2,1,3)),
>>> > superpose.symbol = list(cex = c(0.8,
>>> > 0.7,0.7),
>>> > col =
>>> > c("red","black","blue"),
>>> > pch = c(20,4,16))
>>> > ),
>>> > auto.key=list(lines=T,points = T,rectangles=F),
>>> >
>>> > panel = panel.superpose,
>>> > panel.groups=function(x,y, ...){
>>> >
>>> > panel.xyplot(x,y,...)
>>> > panel.Locfit(x,y,...) # default 0.7
>>> > panel.Locfit(x,y,nn=0.9,...)
>>> >
>>> > }
>>> > ) ## xyplot
>>> >
>>> >
>>> > Regards
>>> >
>>> > Duncan
>>> >
>>> >
>>> > At 02:12 20/04/2012, you wrote:
>>> >>
>>> >> On Thu, Apr 19, 2012 at 2:30 AM, Duncan Mackay
>>> >> <mackay at northnet.com.au>
>>> >> wrote:
>>> >> > Hi
>>> >> >
>>> >> > xyplot(y ~x|Farm,xx,
>>> >> > groups = Padd,
>>> >> > panel = panel.superpose,
>>> >> > panel.groups=function(x,y, ...){
>>> >> > panel.Locfit(x,y,...)
>>> >> > panel.xyplot(x,y,...)
>>> >> > }
>>> >> > ) ## xyplot
>>> >> >
>>> >> > The above works nicely and also without par.setting giving lattice
>>> >> > defaults.
>>> >> > The par.setting is handy for a lot of graphs that I do.
>>> >> >
>>> >> > But when I tried a 1 panel plot I get the error message.
>>> >> >
>>> >> > xyplot(y ~x,xx,
>>> >> > groups = Farm,
>>> >> > auto.key=TRUE,
>>> >> > panel = function(x,y, ...){
>>> >> >
>>> >> > panel.Locfit(x,y,...)
>>> >> > panel.xyplot(x,y,...)
>>> >> > }
>>> >> > )
>>> >> >
>>> >>
>>> >> These two plots are NOT THE SAME. Did you want the same as the first
>>> >> but with groups being Farm and Padd ignored ? in that case you (again)
>>> >> need a panel.groups:
>>> >>
>>> >> xyplot(y ~x,xx,
>>> >> groups = Farm,
>>> >> auto.key=TRUE,
>>> >> panel = panel.superpose,panel.groups=function(x,y,...){
>>> >> panel.Locfit(x,y,...)
>>> >> panel.xyplot(x,y,...)
>>> >> }
>>> >> )
>>> >>
>>> >>
>>> >> > If I want to plot another curve with different smoothing
>>> >> > but gives an error message without par.settings if i want to add
>>> >> > panel.Locfit(x,y,nn= 0.9,lwd = c(1,2,3), ...)
>>> >> >
>>> >> > Error using packet 1
>>> >> > formal argument "Iwd" matched by multiple actual arguments
>>> >>
>>> >> It is all in the way you initially specified how to pass the arguments
>>> >> for panel.Locfit. This works without error:
>>> >>
>>> >> xyplot(y ~x,xx,
>>> >> groups = Farm,
>>> >> auto.key=TRUE,lwd=1:3,
>>> >> panel = panel.superpose,panel.groups=function(x,y,nn,...){
>>> >> panel.Locfit(x,y,nn=.9,...)
>>> >> panel.xyplot(x,y,...)
>>> >> }
>>> >> )
>>> >>
>>> >>
>>> >> HTH
>>> >>
>>> >>
>>> >>
>>> >> > I also need to plot a smoothed line for all groups trying groups,
>>> >> > subscripts
>>> >> > and panel.groups as arguments without success
>>> >> >
>>> >> > Any solutions to solve the above will be gratefully received and
>>> >> > faithfully
>>> >> > applied.
>>> >> >
>>> >> > Duncan
>>> >> >
>>> >> > sessionInfo()
>>> >> > R version 2.15.0 (2012-03-30)
>>> >> > Platform: i386-pc-mingw32/i386 (32-bit)
>>> >> >
>>> >> > locale:
>>> >> > [1] LC_COLLATE=English_Australia.1252
>>> >> > LC_CTYPE=English_Australia.1252
>>> >> > LC_MONETARY=English_Australia.1252 LC_NUMERIC=C
>>> >> > LC_TIME=English_Australia.1252
>>> >> >
>>> >> > attached base packages:
>>> >> > [1] datasets utils stats graphics grDevices grid
>>> >> > methods
>>> >> > base
>>> >> >
>>> >> > other attached packages:
>>> >> > [1] locfit_1.5-7 R.oo_1.9.3 R.methodsS3_1.2.2
>>> >> > foreign_0.8-49
>>> >> > chron_2.3-42 MASS_7.3-17 latticeExtra_0.6-19
>>> >> > RColorBrewer_1.0-5
>>> >> > [9] lattice_0.20-6
>>> >> >
>>> >> > loaded via a namespace (and not attached):
>>> >> > [1] tools_2.15.0
>>> >> >
>>> >> >
>>> >> >
>
>
>>
>
> David Winsemius, MD
> West Hartford, CT
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list