0

我想制作一个三角形图,表示所有可能组合的响应面XY以及Z因子和三角形内的梯度区域表示响应变量的预测分布Gi

# Here are the data:
X <- rep(c(45,40,55,40,43,50,43,50,43,48), each = 3)
Y <- rep(c(15, 12,22,14,14,19,12,17,17,12 ), each = 3)
Z <- rep(c(15,22,12,12,19,14,14,17,12,17), each = 3)
Gi <- c(353,381,320,312,335,265,394,350,374,320,299,316,300,304,295,360,331,395,
351,280,342,299,303,279,374,364,419,306,290,315)
Ft <- data.frame (X, Y, Z)
# Fitted model:
require (compositions) # package "compositions"
model = lm(Gi ~ ilr (Ft) + I (ilr (Ft)^2) + I (ilr (Ft)^3) )
# Generate random compositional data of the factors X, Y, and Z
library(tmvtnorm)
corMat <- var(Ft)
dt3 <- rtmvnorm (n=500, mean = c(45.2, 15.4, 15.4), sigma = corMat, lower = c(10,5,5), upper = c(80,60,60))
# Predict Gi using the model
pGi <- predict (model, list (Ft = dt3) )
pdt <- cbind (dt3, pGi) %>% as.data.frame() %>%
  rename (X = V1, Y = V2, Z = V3)

使用模型和预测数据,是否可以将估计值表示pGi为三角形中的梯度表面以得到像所附示例一样的输出?我在ggtern下面尝试过,但输出三元图不是我想要的。

ggtern(data = pdt, aes(x = X, y = Y, z = Z, value = pGi)) +
  stat_interpolate_tern(geom="polygon",
                        formula = value ~ x+y, 
                        method = lm,
                        aes(fill = ..level..), expand = 1) +
  scale_fill_gradient(low="green", high="blue") +
  theme_gray () +
  theme ( tern.axis.arrow.show = T)

在此处输入图像描述

4

0 回答 0