在箱线图上绘制visreg(具有二项式预测器的GLM)

时间:2017-09-22 12:23:14

标签: r boxplot glm

我为一些GLM配备了一个二项式预测器,并希望用visreg绘制它们。我通常使用par(new=T)绘制原始数据,以便更清晰。我真的不喜欢这里的正常结果(x轴0-1在0.2步中,很多数据点只在0和1)并且考虑在箱线图上绘制visreg,因为它们看起来比二进制数据好得多。但是,我无法将这两个图对齐,因为图中总有两个不同的“开始”和“结束”。我怎样才能使visreg线从“No”开始并以boxplot的“Yes”结束?

fit <- glm (Cov.herb ~ Fire, family=gaussian, data=data)   
boxplot(data$Cov.herb ~ data$Fire, ylim=c(0,100), axes=F, ylab="Herb cover [%]", xlab="Fire")
axis(1, xaxp=c(1,2,1), xaxt="n")
mtext(text=c("No","Yes"),side=1,line=0.5,at=c(1,2))
axis(2, las=1)
box()
par(new=T)
visreg(fit, scale = "response", type="conditional",line=list(col="red", lwd=1), ylim=c(0,100), xlim=c(0,1), rug=F, axes=F, ann=F)

example plot

干杯, 亚历

数据:

structure(list(Cov.herb = c(40L, 80L, 30L, 2L, 40L, 8L, 5L, 5L, 
20L, 45L, 55L, 55L, 35L, 40L, 65L, 70L, 2L, 15L, 1L, 1L, 1L, 
25L, 10L, 1L, 10L, 5L, 5L, 15L, 10L, 5L, 15L, 5L, 5L, 35L, 1L, 
1L, 35L, 1L, 10L, 5L, 5L, 10L, 5L, 10L, 10L, 20L, 10L, 0L, 3L, 
1L, 2L, 4L, 1L, 10L, 30L, 10L, 1L, 2L, 0L, 15L, 25L, 50L, 15L, 
35L, 30L, 5L, 5L, 1L, 1L, 1L, 10L, 0L, 0L, 5L, 2L, 1L, 10L, 0L, 
2L, 1L, 1L, 5L, 1L, 15L, 1L, 1L, 1L, 0L, 5L, 25L, 3L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 3L, 1L, 1L, 0L, 5L, 1L, 1L, 1L, 1L, 7L, 1L, 
1L, 1L, 1L, 5L, 0L, 2L, 3L, 5L, 3L, 1L, 1L, 2L, 0L, 2L, 0L, 10L, 
1L, 20L, 3L, 5L, 20L, 3L, 20L, 5L, 10L, 15L, 30L, 0L, 20L, 45L, 
1L, 1L, 2L, 1L, 3L, 0L, 5L, 0L, 35L, 1L, 5L, 25L, 0L, 0L, 40L, 
3L, 15L, 10L, 3L, 50L, 30L, 10L, 1L, 0L, 5L, 10L, 10L, 2L, 2L, 
5L, 1L, 2L, 1L, 1L, 0L, 0L, 1L, 2L, 5L, 15L, 0L, 1L, 1L, 1L, 
1L, 0L, 1L, 5L, 1L, 5L, 35L, 1L, 0L, 1L, 0L, 5L, 1L, 1L, 3L, 
15L, 1L, 3L, 1L, 0L, 0L, 0L, 15L, 0L, 1L, 1L, 3L, 35L, 80L, 10L, 
2L, 10L, 3L, 3L, 2L, 10L, 50L, 20L, 40L, 2L, 40L, 45L, 25L, 5L, 
25L, 50L, 35L, 15L, 45L, 10L, 5L, 15L, 2L, 30L, 2L, 3L, 15L, 
5L, 45L, 35L, 20L, 70L, 20L, 10L, 30L, 25L, 8L, 4L, 45L, 60L, 
35L, 5L, 40L, 30L, 0L, 30L, 3L, 4L, 25L, 15L, 10L, 15L, 25L, 
20L, 7L, 25L, 25L, 40L, 35L, 30L, 40L, 25L, 50L, 30L, 25L, 60L, 
15L, 25L, 25L, 50L, 30L, 20L, 2L, 3L, 20L, 25L, 35L, 30L, 10L, 
15L, 65L, 10L, 20L, 20L, 2L, 7L, 20L, 25L, 30L, 30L, 9L, 20L, 
40L, 7L, 20L, 15L, 15L, 30L, 20L, 35L, 8L, 40L, 20L, 3L, 55L, 
35L, 10L, 10L, 65L, 20L, 35L, 60L, 45L, 20L, 10L, 35L, 15L, 20L, 
15L, 40L, 10L, 10L, 60L, 60L, 40L, 10L, 10L, 25L, 8L, 20L, 40L, 
15L, 25L, 5L, 20L, 20L, 20L, 25L, 30L, 35L, 20L, 110L, 50L, 20L, 
20L, 10L, 45L, 25L, 20L, 55L, 10L, 5L, 15L, 15L, 1L, 10L, 15L, 
15L, 10L, 30L, 20L, 40L, 55L, 55L, 20L, 30L, 10L, 50L, 40L, 5L, 
15L, 10L, 30L, 15L, 20L, 5L, 45L, 50L, 25L, 45L, 30L, 7L, 25L, 
30L, 5L, 7L, 50L, 60L, 50L, 10L, 30L, 50L, 15L, 15L, 30L, 15L, 
25L, 40L, 10L, 2L, 60L, 20L, 65L, 5L, 15L, 3L, 15L, 40L, 50L, 
45L, 30L, 5L, 45L, 15L, 25L, 65L, 15L, 50L, 55L, 30L, 10L, 35L, 
15L, 20L, 20L, 10L, 20L, 15L, 45L, 40L, 10L, 7L, 25L, 20L, 60L, 
4L, 7L, 40L, 60L, 50L, 50L, 10L, 50L, 5L, 10L, 50L, 20L, 40L, 
20L, 25L, 25L, 35L, 10L, 2L, 15L, 60L, 25L, 30L, 20L, 25L, 10L, 
10L, 20L, 40L, 40L, 45L, 10L, 35L, 60L, 50L, 10L, 40L, 50L, 25L, 
20L, 25L, 25L, 45L, 20L, 30L, 65L, 30L, 35L, 40L, 25L, 15L, 10L, 
50L, 25L, 45L, 40L, 20L, 5L, 65L, 5L, 10L, 15L, 7L, 20L, 45L, 
15L, 5L, 20L, 20L, 20L, 50L, 15L, 20L, 30L, 25L, 45L, 45L, 35L, 
40L, 45L, 4L, 10L, 20L, 20L, 30L, 15L, 30L, 50L, 35L, 45L, 25L, 
25L, 10L, 5L, 30L, 30L, 10L, 70L, 25L, 25L, 7L, 20L, 5L, 20L, 
8L, 15L, 10L, 20L, 10L, 7L, 15L, 15L, 40L, 50L, 15L, 20L, 8L, 
45L, 40L, 15L, 25L, 40L, 20L, 35L, 40L, 70L, 20L, 20L, 40L, 5L, 
20L, 7L, 40L, 10L, 5L, 45L, 20L, 10L, 20L, 20L, 45L, 15L, 7L, 
30L, 30L, 35L, 10L, 20L, 5L, 15L, 35L, 40L, 40L, 10L, 5L, 15L, 
70L, 20L, 85L, 15L, 7L, 55L, 55L, 5L, 20L, 25L, 5L, 30L, 20L, 
8L, 30L, 40L, 25L, 10L, 5L, 30L, 10L, 5L, 10L, 35L, 2L, 10L, 
10L, 10L, 90L, 45L, 60L, 7L, 1L, 15L), Fire = c(0L, 1L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 
1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 
0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 
1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 
1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 
1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 
1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 
1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("Cov.herb", 
"Fire"), class = "data.frame", row.names = c(2L, 3L, 4L, 6L, 
7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 
20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 29L, 30L, 31L, 32L, 33L, 
34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 43L, 44L, 45L, 46L, 47L, 
48L, 49L, 50L, 51L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 
63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 74L, 75L, 76L, 
77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 87L, 88L, 89L, 90L, 
91L, 92L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 101L, 102L, 
103L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 112L, 113L, 
114L, 115L, 116L, 117L, 118L, 119L, 120L, 121L, 122L, 123L, 124L, 
125L, 126L, 153L, 154L, 155L, 161L, 162L, 163L, 164L, 165L, 166L, 
167L, 169L, 170L, 171L, 173L, 174L, 175L, 176L, 177L, 178L, 179L, 
180L, 181L, 182L, 183L, 184L, 185L, 186L, 187L, 188L, 189L, 190L, 
191L, 192L, 193L, 194L, 195L, 196L, 197L, 198L, 199L, 200L, 201L, 
202L, 203L, 204L, 205L, 206L, 207L, 209L, 211L, 213L, 214L, 215L, 
216L, 217L, 218L, 219L, 220L, 221L, 222L, 223L, 224L, 225L, 226L, 
227L, 228L, 229L, 230L, 231L, 232L, 233L, 234L, 235L, 236L, 237L, 
238L, 239L, 240L, 241L, 242L, 243L, 244L, 245L, 246L, 247L, 248L, 
249L, 250L, 251L, 252L, 253L, 254L, 255L, 256L, 257L, 258L, 259L, 
260L, 261L, 262L, 263L, 269L, 270L, 274L, 275L, 276L, 277L, 279L, 
280L, 281L, 282L, 283L, 284L, 285L, 286L, 287L, 288L, 289L, 290L, 
291L, 292L, 293L, 294L, 295L, 296L, 297L, 298L, 299L, 300L, 301L, 
302L, 303L, 304L, 305L, 306L, 307L, 308L, 309L, 310L, 311L, 312L, 
313L, 314L, 315L, 316L, 317L, 318L, 319L, 320L, 321L, 322L, 323L, 
324L, 325L, 326L, 327L, 328L, 329L, 330L, 331L, 332L, 333L, 334L, 
335L, 336L, 337L, 338L, 339L, 340L, 341L, 342L, 343L, 344L, 345L, 
346L, 347L, 349L, 350L, 351L, 352L, 353L, 354L, 355L, 356L, 357L, 
358L, 359L, 360L, 361L, 362L, 363L, 364L, 365L, 366L, 367L, 368L, 
369L, 370L, 371L, 372L, 373L, 374L, 375L, 376L, 377L, 378L, 380L, 
381L, 382L, 383L, 384L, 385L, 386L, 387L, 388L, 389L, 390L, 391L, 
392L, 393L, 394L, 395L, 396L, 397L, 398L, 399L, 400L, 401L, 402L, 
403L, 404L, 405L, 406L, 407L, 408L, 409L, 410L, 411L, 412L, 413L, 
414L, 415L, 416L, 417L, 418L, 419L, 420L, 421L, 422L, 423L, 424L, 
425L, 426L, 427L, 428L, 429L, 430L, 431L, 432L, 433L, 434L, 435L, 
436L, 437L, 438L, 439L, 440L, 441L, 443L, 444L, 445L, 446L, 447L, 
448L, 449L, 450L, 451L, 453L, 454L, 455L, 457L, 458L, 459L, 460L, 
461L, 463L, 464L, 465L, 466L, 467L, 468L, 469L, 470L, 471L, 472L, 
473L, 474L, 475L, 476L, 477L, 478L, 479L, 480L, 481L, 482L, 483L, 
484L, 485L, 486L, 487L, 488L, 489L, 490L, 491L, 492L, 493L, 494L, 
495L, 496L, 497L, 498L, 499L, 500L, 501L, 502L, 503L, 504L, 505L, 
506L, 507L, 508L, 509L, 510L, 511L, 512L, 513L, 514L, 515L, 516L, 
517L, 518L, 519L, 520L, 521L, 522L, 523L, 524L, 525L, 526L, 527L, 
528L, 529L, 530L, 531L, 532L, 533L, 534L, 535L, 536L, 537L, 538L, 
539L, 540L, 541L, 542L, 543L, 544L, 545L, 546L, 547L, 548L, 549L, 
551L, 552L, 553L, 554L, 555L, 556L, 557L, 558L, 559L, 560L, 561L, 
562L, 563L, 564L, 565L, 566L, 567L, 568L, 569L, 570L, 571L, 572L, 
573L, 574L, 575L, 576L, 577L, 578L, 579L, 580L, 581L, 582L, 583L, 
584L, 585L, 587L, 588L, 589L, 590L, 591L, 592L, 593L, 594L, 595L, 
596L, 597L, 598L, 599L, 600L, 601L, 602L, 603L, 604L, 605L, 606L, 
607L, 608L, 609L, 610L, 611L, 612L, 613L, 614L, 615L, 616L, 617L, 
618L, 619L, 620L, 621L, 622L, 623L, 624L, 625L, 626L, 628L, 629L, 
631L, 632L, 633L, 634L, 635L, 636L, 637L, 638L, 639L, 640L, 641L, 
642L, 643L, 644L, 645L, 646L, 648L, 649L, 650L, 651L, 652L, 653L, 
654L, 655L, 656L, 657L, 658L, 659L, 660L, 661L, 662L, 663L, 664L, 
665L, 666L, 667L, 668L, 669L, 670L, 671L, 672L, 673L, 674L, 675L, 
676L, 677L, 678L, 679L, 680L, 682L, 683L, 684L, 685L, 686L, 687L, 
689L, 690L, 691L, 692L, 693L, 694L, 697L, 698L, 699L, 700L, 701L, 
702L, 704L, 705L, 706L, 707L))

1 个答案:

答案 0 :(得分:0)

所以,我的观点是,这样做会让你在绘图方面有更大的灵活性。例如,

# Fit model
fit <- glm (Cov.herb ~ Fire, family=gaussian, data=data)   

# Get model data for plotting
vis.out <- visreg(fit, scale = "response", plot = FALSE)

# Load library
library(ggplot2)

# Create plot
p <- ggplot(data = data) 
p <- p + geom_boxplot(aes(x = as.factor(Fire), y = Cov.herb, fill = as.factor(Fire)), alpha = 0.3, outlier.alpha = 1)
p <- p + xlab("Fire") + ylab("Herb cover [%]")
p <- p + geom_ribbon(data = vis.out$fit, aes(x = Fire + 1, ymin = visregLwr, ymax = visregUpr), fill = "lightgrey")
p <- p + geom_line(data = vis.out$fit, aes(x = Fire + 1, y = visregFit), colour = "salmon", size = 1.25)
p <- p + scale_x_discrete(labels = c("No", "Yes"))
p <- p + theme(legend.position = "none")
print(p)

给出,

enter image description here

这是你正在寻找的那种东西吗? (您还可以使用geom_point添加所有数据点,以便在框顶部绘图。我认为通常看起来很酷。)