## The next step is to think of this in the analysis of covariance setting.

## this example is based on

library(HH)

demo("ancova", package="HH", ask=FALSE)

item<-rep(letters[1:8], each=18)
day<-rep((0:5)*100, 24)
set<-rep(rep(1:3, each=6), 8)
test<-data.frame(item, day, set)
set.seed(111)
test$value<-(test$day/100+1)+rnorm(144)
test$value<-test$value+(as.numeric(test$item)*1.3)
test$dayf <- factor(test$day)


Fitalphabeta <- aov(value ~ day, data=test)
AB <- xyplot(value ~ day | item, data=test, layout=c(8,1),
scales=list(alternating=1),
             main="regression, ignoring item\ncommon slope, common intercept") +
               layer(panel.abline(coef(Fitalphabeta)))
AB

Fitalphabeta0 <- aov(value ~ 0 + item, data=test)
AB0 <- xyplot(value ~ day | item, data=test, layout=c(8,1),
scales=list(alternating=1),
              main="anova, ignoring day\nzero slope, variable intercept") +
                layer(panel.abline(a=coef(Fitalphabeta0)[panel.number()], b=0))
AB0

Fitalphaibeta <- aov(value ~ 0 + item + day, data=test)
AiB <- xyplot(value ~ day | item, data=test, layout=c(8,1),
scales=list(alternating=1),
              main="ancova\ncommon slope, variable intercept") +

layer(panel.abline(a=coef(Fitalphaibeta)[panel.number()],
b=rev(coef(Fitalphaibeta))[1]))
AiB

Fitalphaibetaj <- aov(value ~ 0 + item / day, data=test)
AiBj <- xyplot(value ~ day | item, data=test, layout=c(8,1),
scales=list(alternating=1),
               main="ancova with interaction\nvariable slope, variable
intercept") +

layer(panel.abline(a=coef(Fitalphaibetaj)[panel.number()],
b=coef(Fitalphaibetaj)[8 + panel.number()]))
AiBj

## this is very tight on the standard 7x7 plotting surface.
## it will look ok with 10in wide and 7in high
## pdf("AB2x2.pdf", height=7, width=10)
print(AB,   split=c(1, 1, 2, 2), more=TRUE)
print(AB0,  split=c(1, 2, 2, 2), more=TRUE)
print(AiB,  split=c(2, 1, 2, 2), more=TRUE)
print(AiBj, split=c(2, 2, 2, 2), more=FALSE)
## dev.off()

## this arrangement matches the arrangement in demo("ancova")
## this too is very tight on the standard 7x7 plotting surface.
## it will look ok with 10in wide and 10in high
## pdf("AB2x3.pdf", height=10, width=10)
print(AB,   split=c(1, 2, 2, 3), more=TRUE)
print(AB0,  split=c(2, 3, 2, 3), more=TRUE)
print(AiB,  split=c(2, 2, 2, 3), more=TRUE)
print(AiBj, split=c(2, 1, 2, 3), more=FALSE)
## dev.off()


On Thu, Feb 12, 2015 at 9:48 AM, PIKAL Petr <petr.pi...@precheza.cz> wrote:
> Hi Rich
>
>> -----Original Message-----
>> From: Richard M. Heiberger [mailto:r...@temple.edu]
>> Sent: Wednesday, February 11, 2015 10:53 PM
>> To: PIKAL Petr
>> Cc: r-help@r-project.org
>> Subject: Re: [R] suggestion for optimal plotting to show significant
>> differences
>>
>> Petr,
>>
>> My first attempt is to use the simple=TRUE argument to interaction2wt.
>>
>> Then the bwplots in the item|item panel show the behavior of value over
>> day for each item.  You get a plot similar to this panel with the
>> growth curve plots from nlme, for example,
>>     bwplot(value ~ day | item, data=test, horizontal=FALSE) I am
>> treating set as a replication and each box is cumulated over the three
>> sets.
>
> Yes, that is the point - set is actually replication of result.
>
>>
>> My analysis question is about day.  You have it as numeric.  My
>> inclination would be to make day factor.  Then you could model the
>> interaction of day and item.
>
> Hm. I hoped I can do
>
> fit<-lm(value~day*item, data=test)
> summary(fit)
>
> in which case I can compare differences in intercepts and/or slopes for each 
> item.
>
> However I am rather lost in aov
>
> test$dayf <- factor(test$day)
>
> fit1 <- aov(value~item+dayf, data=test)
> summary(fit)
> fit2 <- aov(value~item/dayf, data=test)
> summary(fit)
> and
> fit3 <- aov(value~item*dayf, data=test)
> summary(fit)
> which gives bascally the same result as fit2
>
>> anova(fit1, fit2)
> Analysis of Variance Table
>
> Model 1: value ~ item + dayf
> Model 2: value ~ item/dayf
>   Res.Df    RSS Df Sum of Sq      F Pr(>F)
> 1    131 160.59
> 2     96 128.60 35    31.993 0.6824 0.8993
>
> TukeyHSD(fit1, which="item")
> TukeyHSD(fit2, which="item")
>
> Both models seems to give quite similar results and I am not sure what 
> actually differs in those models. I believe that model2 tests each item 
> within particular day (but I am not sure about it).
>
> However this discussion is probably deviating more to the statistics issue 
> than to R itself.
>
> I just thought that somebody helps me with a method for comparison of item 
> performance in case that relation of value to day is not simple linear (as in 
> my example) and cannot be expressed by some formula (like examples in nlme).
>
> So far the best options are either your bwplot or my ggplots.
>
> p<-ggplot(test, aes(x=day, y=value, colour=item))
> p+geom_point()+stat_smooth(method="lm", formula= y~poly(x,2))
>
> p<-ggplot(test, aes(x=dayf, y=value, colour=item))
> p+geom_boxplot()
>
> p<-ggplot(test, aes(x=item, y=value))
> p+geom_boxplot()+facet_wrap(~day)
>
> Thank you for your suggestions which directed me to interaction plots which I 
> was not aware of.
>
> Best regards
> Petr
>
>
>>
>> Rich
>>
>> On Mon, Feb 9, 2015 at 6:01 AM, PIKAL Petr <petr.pi...@precheza.cz>
>> wrote:
>> > Hallo Richard.
>> >
>> > I tried your suggestion but it seems to be no better than simple
>> ggplot. Let me extend the example a bit to 8 items which is more
>> realistic.
>> >
>> > item<-rep(letters[1:8], each=18)
>> > day<-rep((0:5)*100, 24)
>> > set<-rep(rep(1:3, each=6), 8)
>> > test<-data.frame(item, day, set)
>> > set.seed(111)
>> > test$value<-(test$day/100+1)+rnorm(144)
>> > test$value<-test$value+(as.numeric(test$item)*1.3)
>> >
>> > Value is increasing during time (day) for each tested subject (item),
>> each item is measured 3 times (set) each day.
>> >
>> > Here is some graph
>> > p<-ggplot(test, aes(x=day, y=value, colour=item))
>> > p+geom_point()+stat_smooth(method="lm", formula= y~poly(x,2))
>> >
>> > I can do lm or aov, however I am not sure about proper formula.
>> >
>> > fit<-lm(value~day, data=test)
>> > summary(fit)
>> > # this shows that value is increasing with day
>> >
>> > fit<-lm(value~day/item, data=test)
>> > summary(fit)
>> > # this suggests that value is decreasing with day (which is wrong)
>> >
>> > fit<-lm(value~day*item, data=test)
>> > summary(fit)
>> > # and this tells me that value is increasing with day and items have
>> different intercepts but the same rate of growth (I hope I got it
>> right).
>> >
>> > I do not have your book available but I went through help pages.
>> >
>> > Your interaction graph is not much better than ggplot.
>> > I can do
>> >
>> > interaction2wt(value ~ item * day, data=test)
>> >
>> > which probably is closer to actual problem.
>> >
>> > The basic problem is that increase of value with days is in fact not
>> linear and actually it can increase in the beginning and then stagnate
>> or it can stagnate in beginning and then increase. I am not aware of
>> any way how to compare time behaviour of different items in such
>> situations if I cannot state some common formula in which case I would
>> use probably nlme.
>> >
>> > Thank for your insight, I try to go through it more deeply.
>> >
>> > Best regards
>> > Petr
>> >
>> >
>> >> -----Original Message-----
>> >> From: Richard M. Heiberger [mailto:r...@temple.edu]
>> >> Sent: Friday, February 06, 2015 6:14 PM
>> >> To: PIKAL Petr
>> >> Cc: r-help@r-project.org
>> >> Subject: Re: [R] suggestion for optimal plotting to show significant
>> >> differences
>> >>
>> >> I would try one of these illustrations for starts.
>> >> interaction2wt (two-way tables) is designed to be used with aov()
>> for
>> >> testing.
>> >> interaction2wt shows all main effects and all two-way interactions
>> >> for many factors.
>> >>
>> >>
>> >>
>> >> test <-
>> >> structure(list(item = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
>> 1L,
>> >> 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
>> >> 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"), class
>> >> = "factor"), day = c(0L, 100L, 200L, 300L, 400L, 500L, 0L, 100L,
>> >> 200L, 300L, 400L, 500L, 0L, 100L, 200L, 300L, 400L, 500L, 0L, 100L,
>> >> 200L, 300L, 400L, 500L, 0L, 100L, 200L, 300L, 400L, 500L, 0L, 100L,
>> >> 200L, 300L, 400L, 500L), set = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
>> >> 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
>> >> 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), value = c(1.08163365169503,
>> >> 2.61998412608805, 3.07820466606394, 4.44993419381934,
>> >> 5.29163171545805, 6.29155990999293, -0.123163011367676,
>> >> 2.07767236834003, 2.32537052874901, 3.09372794501084,
>> >> 6.65273721166635, 5.92304962329131, 1.50504697705548,
>> >> 2.66253728086866, 2.63420157418685, 2.78195098580416,
>> >> 6.47578642973288, 5.89587443775143, 0.848864231485078,
>> >> 1.27549677119713, 2.19573089053609, 2.45659926134292,
>> >> 5.15424403414103, 5.4813151140983, 1.25731482647214,
>> >> 2.09662105167973, 1.75954023316977, 4.81624002288939,
>> >> 4.65029189325307, 6.39946904227214, 0.944996929887344,
>> >> 1.74667265331284, 2.42956264345558, 5.17852980415141,
>> >> 3.5453435965834, 6.9011238437191)), .Names = c("item", "day", "set",
>> >> "value"), row.names = c(NA, -36L), class =
>> >> "data.frame")
>> >>
>> >>
>> >>
>> >> library(HH)
>> >>
>> >> test$set <- factor(test$set)
>> >> test$day <- factor(test$day)
>> >> test$item <- factor(test$item)
>> >>
>> >> interaction2wt(value ~ item * day * set, data=test)
>> >>
>> >> test$item.day <- interaction(test$item, test$day)
>> >> position(test$item.day) <- outer(c(-10,10),
>> >> as.numeric(levels(test$day)), `+`)
>> >>
>> >> xyplot(value ~ as.position(item.day) | set, groups=item,
>> >>         data=test, horizontal=FALSE, pch=c(17,16),
>> >>         xlab="day",
>> >>         scales=list(
>> >>           x=list(
>> >>             alternating=1,
>> >>             at=levels(test$day), ## placement of tick labels and
>> marks
>> >>             tck=1)),
>> >>         key=list(
>> >>           text=list(c("A","B"), col=c("blue","red")),
>> >>           points=list(pch=c(17, 16), col=c("blue","red")),
>> >>        space="top", columns=2, border=TRUE),
>> >>        layout=c(3,1))
>> >>
>> >>
>> >> ## see also the examples in
>> >> demo(package="HH", bwplot.examples)
>> >>
>> >> On Fri, Feb 6, 2015 at 6:09 AM, PIKAL Petr <petr.pi...@precheza.cz>
>> >> wrote:
>> >> > Dear all
>> >> >
>> >> > I would like to ask for your opinion about possible graphical
>> >> representation of such data.
>> >> >
>> >> >> dput(test)
>> >> > structure(list(item = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
>> >> > 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
>> 2L,
>> >> > 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"),
>> >> > class
>> >> =
>> >> > "factor"), day = c(0L, 100L, 200L, 300L, 400L, 500L, 0L, 100L,
>> >> > 200L, 300L, 400L, 500L, 0L, 100L, 200L, 300L, 400L, 500L, 0L,
>> 100L,
>> >> > 200L, 300L, 400L, 500L, 0L, 100L, 200L, 300L, 400L, 500L, 0L,
>> 100L,
>> >> > 200L, 300L, 400L, 500L), set = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
>> >> > 2L, 2L,
>> >> 2L,
>> >> > 2L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
>> 2L,
>> >> > 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), value = c(1.08163365169503,
>> >> > 2.61998412608805, 3.07820466606394, 4.44993419381934,
>> >> > 5.29163171545805, 6.29155990999293, -0.123163011367676,
>> >> > 2.07767236834003, 2.32537052874901, 3.09372794501084,
>> >> > 6.65273721166635, 5.92304962329131, 1.50504697705548,
>> >> > 2.66253728086866, 2.63420157418685, 2.78195098580416,
>> >> > 6.47578642973288, 5.89587443775143, 0.848864231485078,
>> >> > 1.27549677119713, 2.19573089053609, 2.45659926134292,
>> >> > 5.15424403414103, 5.4813151140983, 1.25731482647214,
>> >> 2.09662105167973,
>> >> > 1.75954023316977, 4.81624002288939, 4.65029189325307,
>> >> > 6.39946904227214, 0.944996929887344, 1.74667265331284,
>> >> > 2.42956264345558, 5.17852980415141, 3.5453435965834,
>> >> > 6.9011238437191)), .Names = c("item", "day", "set", "value"),
>> >> > row.names = c(NA, -36L), class = "data.frame")
>> >> >>
>> >> >
>> >> > One option I came with is
>> >> >
>> >> > library(ggplot2)
>> >> > p<-ggplot(test, aes(x=day, y=value, colour=item))
>> >> > p+geom_point()+stat_smooth(method="lm", formula= y~poly(x,2))
>> >> >
>> >> > but -
>> >> > I have more items (around 5-10), and I want to show if the
>> >> > difference
>> >> between items is or is not significant. The actual development of
>> >> value with day is usually not linear nor growing steadily and
>> >> actually I cannot usually evaluate some analytical equation for my
>> >> data to compare equation parameters.
>> >> >
>> >> > I thought about boxplots, but there is not many repetitions and
>> >> actually 5+ boxplots can be quite messy.
>> >> >
>> >> > I can plot only mean for each set and item but in that case I lose
>> >> information if the difference is or is not significant.
>> >> >
>> >> > I appreciate any suggestion.
>> >> >
>> >> > Best regards
>> >> > Petr
>> >> >
>
> ________________________________
> Tento e-mail a jakékoliv k němu připojené dokumenty jsou důvěrné a jsou 
> určeny pouze jeho adresátům.
> Jestliže jste obdržel(a) tento e-mail omylem, informujte laskavě neprodleně 
> jeho odesílatele. Obsah tohoto emailu i s přílohami a jeho kopie vymažte ze 
> svého systému.
> Nejste-li zamýšleným adresátem tohoto emailu, nejste oprávněni tento email 
> jakkoliv užívat, rozšiřovat, kopírovat či zveřejňovat.
> Odesílatel e-mailu neodpovídá za eventuální škodu způsobenou modifikacemi či 
> zpožděním přenosu e-mailu.
>
> V případě, že je tento e-mail součástí obchodního jednání:
> - vyhrazuje si odesílatel právo ukončit kdykoliv jednání o uzavření smlouvy, 
> a to z jakéhokoliv důvodu i bez uvedení důvodu.
> - a obsahuje-li nabídku, je adresát oprávněn nabídku bezodkladně přijmout; 
> Odesílatel tohoto e-mailu (nabídky) vylučuje přijetí nabídky ze strany 
> příjemce s dodatkem či odchylkou.
> - trvá odesílatel na tom, že příslušná smlouva je uzavřena teprve výslovným 
> dosažením shody na všech jejích náležitostech.
> - odesílatel tohoto emailu informuje, že není oprávněn uzavírat za společnost 
> žádné smlouvy s výjimkou případů, kdy k tomu byl písemně zmocněn nebo písemně 
> pověřen a takové pověření nebo plná moc byly adresátovi tohoto emailu 
> případně osobě, kterou adresát zastupuje, předloženy nebo jejich existence je 
> adresátovi či osobě jím zastoupené známá.
>
> This e-mail and any documents attached to it may be confidential and are 
> intended only for its intended recipients.
> If you received this e-mail by mistake, please immediately inform its sender. 
> Delete the contents of this e-mail with all attachments and its copies from 
> your system.
> If you are not the intended recipient of this e-mail, you are not authorized 
> to use, disseminate, copy or disclose this e-mail in any manner.
> The sender of this e-mail shall not be liable for any possible damage caused 
> by modifications of the e-mail or by delay with transfer of the email.
>
> In case that this e-mail forms part of business dealings:
> - the sender reserves the right to end negotiations about entering into a 
> contract in any time, for any reason, and without stating any reasoning.
> - if the e-mail contains an offer, the recipient is entitled to immediately 
> accept such offer; The sender of this e-mail (offer) excludes any acceptance 
> of the offer on the part of the recipient containing any amendment or 
> variation.
> - the sender insists on that the respective contract is concluded only upon 
> an express mutual agreement on all its aspects.
> - the sender of this e-mail informs that he/she is not authorized to enter 
> into any contracts on behalf of the company except for cases in which he/she 
> is expressly authorized to do so in writing, and such authorization or power 
> of attorney is submitted to the recipient or the person represented by the 
> recipient, or the existence of such authorization is known to the recipient 
> of the person represented by the recipient.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

Reply via email to