在 gratia::draw(parametric_effects()) 中获取参数项的正确顺序。

huangapple go评论145阅读模式
英文:

Getting the correct order of factors for parametric terms in gratia::draw(parametric_effects())

问题

我有一个数据集:

  1. df <- structure(list(Depth = c(6.84, 8.56, 4.65, 8.84, 6.56, 8.65, 12.21, 11.82, 5.41, 11.63, 9.41, 11.26, 8.96, 10.81, 10.68, 12.74, 14.06, 8.16, 12.31, 10.76, 10.74, 1, 9.38, 5, 4, 12, 6.71, 8.56, 14.65, 16.71, 12.56, 18.65, 20.21, 11.82, 13.41, 13.63, 13.41, 13.26, 22.96, 14.81, 20.74, 30.06, 30.16, 32.31, 32.21, 14.76, 14.74, 4.66, 10, 4, 15, 8.71, 32.65, 26.21, 29.82, 29.41, 5.63, 23.41, 29.26, 2.96, 2.81, 2.68, 2.74, 2.06, 2.16, 2.31, 4.21, 8.76, 2.74, 18.66, 3, 4, 20, 6.84, 1, 6.65, 6.21, 1.82, 1.41, 3.63, 3.41, 5.26, 2.96, 2.81, 1, 2.74, 4.06, 4.16, 4.31, 4.21, 2.76, 2.74, 1, 5, 3, 4.71, 2.56, 2.65, 10.21, 7.82), NEAR_DIST = c(18.78, 18.3, 61.36, 179.28, 10.43, 17.92, 46.21, 31.99, 10.43, 26.72, 24.48, 33.09, 27.27, 43.42, 46.07, 50.12, 47.4, 64.44, 49.67, 12.13, 15.13, 25.02, 10.46, 13.46, 16.89, 13.52, 32.51, 38.24, 38.55, 82.06, 49.57, 90.64, 83.62, 49.74, 397.27, 53.49, 68.02, 59.66, 130.75, 67.27, 111.3, 347.36, 220.52, 268.56, 194.92, 84.49, 57.13, 24.36, 54.84, 18.74, 66.64, 203.71, 829.38, 309.42, 395.5, 326.77, 35.65, 264.24, 307.03, 23.02, 26.37, 22.93, 25.28, 15.5, 14.6, 13.37, 11.95, 152.75, 11.3, 74.37, 3.77, 6.83, 79.4, 38.85, 3.85, 34.87, 38.03, 21.06, 20.76, 37.61, 25.72, 41.95, 26.17, 26.17, 16.49, 29.13, 29.13, 25.21, 27.63, 25.21, 21.06, 18.6, 11.09, 19.93, 16.25, 18.53, 5.58, 10.12, 56.3, 36.03), Season2 = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L), levels = c("Winter", "Spring", "Summer", "Fall"), class = c("ordered", "factor"))), row.names = c(NA, -100L), class = c("tbl_df", "tbl", "data.frame"))
  2. 并且正在使用数据运行一个 gam 模型:
  3. ```R
  4. library(mgcv)
  5. library(gratia)
  6. gam <- gam(Depth ~ s(NEAR_DIST) + Season2, data = df)

尽管 Season2 变量是有序的:

  1. unique(df$Season2)
  2. [1] Summer Fall Winter Spring
  3. Levels: Winter < Spring < Summer < Fall

但当我调用以下命令时:

  1. draw(parametric_effects(gam))

x轴的顺序是按字母顺序的。如何才能让x轴的顺序与我的因子一致呢?旧版本的 gratia 以前可以做到这一点。我使用的版本

英文:

I have a data set:

  1. df&lt;- structure(list(Depth = c(6.83999999999997, 8.56, 4.64999999999998,
  2. 8.83999999999997, 6.56, 8.64999999999998, 12.21, 11.82, 5.41000000000003,
  3. 11.63, 9.41000000000003, 11.26, 8.95999999999998, 10.81, 10.68,
  4. 12.74, 14.06, 8.16000000000003, 12.31, 10.76, 10.74, 1, 9.38,
  5. 5, 4, 12, 6.70999999999998, 8.56, 14.65, 16.71, 12.56, 18.65,
  6. 20.21, 11.82, 13.41, 13.63, 13.41, 13.26, 22.96, 14.81, 20.74,
  7. 30.06, 30.16, 32.31, 32.21, 14.76, 14.74, 4.66000000000003, 10,
  8. 4, 15, 8.70999999999998, 32.65, 26.21, 29.82, 29.41, 5.63, 23.41,
  9. 29.26, 2.95999999999998, 2.81, 2.68000000000001, 2.74000000000001,
  10. 2.06, 2.16000000000003, 2.31, 4.20999999999998, 8.75999999999999,
  11. 2.74000000000001, 18.66, 3, 4, 20, 6.83999999999997, 1, 6.64999999999998,
  12. 6.20999999999998, 1.81999999999999, 1.41000000000003, 3.63, 3.41000000000003,
  13. 5.25999999999999, 2.95999999999998, 2.81, 1, 2.74000000000001,
  14. 4.06, 4.16000000000003, 4.31, 4.20999999999998, 2.75999999999999,
  15. 2.74000000000001, 1, 5, 3, 4.70999999999998, 2.56, 2.64999999999998,
  16. 10.21, 7.81999999999999), NEAR_DIST = c(18.77925552, 18.30180262,
  17. 61.36019078, 179.2770495, 10.43166516, 17.9171804, 46.20571245,
  18. 31.99340507, 10.43166516, 26.7170903, 24.47782541, 33.08965222,
  19. 27.27138524, 43.4212158, 46.0670014, 50.11661352, 47.39692573,
  20. 64.4374351, 49.66872737, 12.12884673, 15.13068812, 25.02246826,
  21. 10.46189005, 13.46373164, 16.89230952, 13.51981867, 32.50661183,
  22. 38.24201162, 38.5502434, 82.06185032, 49.57486607, 90.64395203,
  23. 83.61730031, 49.74483449, 397.2686612, 53.49338859, 68.02475678,
  24. 59.6583949, 130.7528811, 67.27058895, 111.2988217, 347.3593823,
  25. 220.5169227, 268.5649787, 194.9220113, 84.48739079, 57.1344938,
  26. 24.35529161, 54.84148996, 18.74063124, 66.63864028, 203.7119682,
  27. 829.3788162, 309.4190672, 395.4959263, 326.7671063, 35.65309711,
  28. 264.2374189, 307.025746, 23.02085763, 26.3683775, 22.93486062,
  29. 25.28307029, 15.49632807, 14.59667995, 13.36925569, 11.9476145,
  30. 152.7517309, 11.30381957, 74.36911773, 3.773174432, 6.825998674,
  31. 79.40020637, 38.8451901, 3.853365482, 34.8719427, 38.02805106,
  32. 21.06138328, 20.76016614, 37.60511548, 25.71672169, 41.9543577,
  33. 26.1675823, 26.1675823, 16.49388675, 29.12695505, 29.12695505,
  34. 25.21064884, 27.6250245, 25.21064884, 21.06138328, 18.59893184,
  35. 11.08799823, 19.92747995, 16.25210115, 18.52964249, 5.582718512,
  36. 10.11944373, 56.29794875, 36.03064946), Season2 = structure(c(3L,
  37. 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 1L,
  38. 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
  39. 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
  40. 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L,
  41. 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L,
  42. 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L,
  43. 3L, 3L, 3L), levels = c(&quot;Winter&quot;, &quot;Spring&quot;, &quot;Summer&quot;, &quot;Fall&quot;), class = c(&quot;ordered&quot;,
  44. &quot;factor&quot;))), row.names = c(NA, -100L), class = c(&quot;tbl_df&quot;, &quot;tbl&quot;,
  45. &quot;data.frame&quot;))

and am running a gam with the data:

  1. library(mgcv)
  2. library(gratia)
  3. gam&lt;-gam(Depth~s(NEAR_DIST)+Season2,data=df)

even though the Season2 variable is ordered:

  1. unique(df$Season2)
  2. [1] Summer Fall Winter Spring
  3. Levels: Winter &lt; Spring &lt; Summer &lt; Fall

when I call:

  1. draw(parametric_effects(gam))

The order of the x-axis is alphabetical.
在 gratia::draw(parametric_effects()) 中获取参数项的正确顺序。

How can I get the x-axis to match the order of my factor here? The old version of gratia used to do this. I have: version 0.8.1.34

答案1

得分: 2

作为解决方法或修复问题的一种方法,您可以使用 scale_x_discretelimits 参数来设置顺序:

  1. library(mgcv)
  2. #&gt; Loading required package: nlme
  3. #&gt; This is mgcv 1.8-42. For overview type &#39;help(&quot;mgcv-package&quot;)&#39;.
  4. library(gratia)
  5. library(ggplot2)
  6. packageVersion(&quot;gratia&quot;)
  7. #&gt; [1] &#39;0.8.1.34&#39;
  8. gam &lt;- gam(Depth ~ s(NEAR_DIST) + Season2, data = df)
  9. draw(parametric_effects(gam)) +
  10. ggplot2::scale_x_discrete(limits = levels(df$Season2))

在 gratia::draw(parametric_effects()) 中获取参数项的正确顺序。<!-- -->

英文:

As a workaround or fix for your issue you could set the order using the limits argument of scale_x_discrete:

  1. library(mgcv)
  2. #&gt; Loading required package: nlme
  3. #&gt; This is mgcv 1.8-42. For overview type &#39;help(&quot;mgcv-package&quot;)&#39;.
  4. library(gratia)
  5. library(ggplot2)
  6. packageVersion(&quot;gratia&quot;)
  7. #&gt; [1] &#39;0.8.1.34&#39;
  8. gam &lt;- gam(Depth ~ s(NEAR_DIST) + Season2, data = df)
  9. draw(parametric_effects(gam)) +
  10. ggplot2::scale_x_discrete(limits = levels(df$Season2))

在 gratia::draw(parametric_effects()) 中获取参数项的正确顺序。<!-- -->

huangapple
  • 本文由 发表于 2023年6月1日 22:06:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/76382771.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定