對于 X 列,所有圖都需要擬合為線性回歸,而對于 Y,則需要擬合線性回歸和二次回歸。但是,在圖中,所有擬合都是二次的。在某些情況下也沒有擬合線。對調整代碼有什么建議嗎?
set.seed(14)
df <- data.frame(
var.test = rep(c("X","Y"),each = 40),
var.test2 = rep(c("A","B","C","D"), times = 20),
val.test = rnorm(80,4,5),
x = c(1:80)
)
my.formula <- c(y~x,y~x,y~x,y~x,y~x I(x^2), y~x I(x^2),y~x I(x^2), y ~x)
ggplot(df, aes(x = x, y = val.test))
geom_point()
mapply(function(x, z) {
data <- subset(df, var.test == z)
list(
geom_smooth(
method = "glm", data = data, formula = x,
method.args = list(family = "poisson"), color = "black"
),
stat_poly_eq(formula = x, aes(label = ..eq.label..),
parse = TRUE, size = 2.5, col = "black", data = data, vjust = -0.1),
stat_poly_eq(formula = x, aes(label = ..rr.label..),
parse = TRUE, size = 2.5, col = "black", data = data, vjust = 1.1)
)
}, my.formula, c("A", "B", "C","D","X","Y"))
facet_grid(var.test2~var.test)

uj5u.com熱心網友回復:
據我所知,有兩個問題。首先,您的回歸是泊松回歸,但您的資料不是計數資料 - 它包含負值,因此有時會完全失敗,即使沒有負值也是不合適的。我很欣賞這只是示例資料,因此它可能與您的實際用例無關。
其次,對于您的實際用例而言,更重要的是,您的映射功能并不完全正確。您需要通過兩個構面變數進行子集化,以便您擁有 8 組獨特的層 - 一個用于var.test和的每次互動var.test2。
ggplot(df, aes(x = x, y = val.test))
geom_point()
mapply(function(x, z, v) {
data <- subset(df, var.test2 == z & var.test == v)
list(
geom_smooth(
method = "glm", data = data, formula = x,
method.args = list(family = "gaussian"), color = "black"
),
stat_poly_eq(formula = x, aes(label = ..eq.label..),
parse = TRUE, size = 2.5, col = "black",
data = data, vjust = -0.1),
stat_poly_eq(formula = x, aes(label = ..rr.label..),
parse = TRUE, size = 2.5, col = "black",
data = data, vjust = 1.1)
)
},
x = my.formula,
z = rep(c("A", "B", "C","D"), 2),
v = rep(c("X", "Y"), each = 4))
facet_grid(var.test2~var.test)

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466737.html
