Преобразование вектора в матрицу на основе значений x, y - PullRequest
0 голосов
/ 07 августа 2020

У меня есть фрейм данных с тремя столбцами: x, y и z. Значения x и y представляют собой случайные координаты xy, а значения z - это отношение правдоподобия связанных значений xy для двух гауссиан с центрами (2, 2) и (-2, -2). Я хочу построить контуры z-значений, чтобы получить график, который выглядит следующим образом:

enter image description here

But I want it to be prettier, smoother, and made with ggplot or plot.ly. It would look kind of like this style введите описание изображения здесь

Код для первого сюжета

k1 <- 2
k2 <- 2
mu1 <- rbind(2, 2)
mu2 <- rbind(-2, -2)
sigma1 <- rbind(c(.6, 0), c(0, .6))
sigma2 <- rbind(c(.3, 0), c(0, .3))
det1 <- det(sigma1)
det2 <- det(sigma2)
inv1 <- solve(sigma1)
inv2 <- solve(sigma2)
x <- runif(700, -5, 5)
y <- runif(700, -5, 5)
w <- rbind(x, y)
ratio <- function(v){
  quotient <- log((2*pi)^(-k1/2)*det1^(-1/2)*(exp((-1/2)*t(v-mu1)%*%inv1%*%(v-mu1))))/log((2*pi)^(-k2/2)*det2^(-1/2)*(exp((-1/2)*t(v-mu2)%*%inv2%*%(v-mu2))))
  return(quotient)
}

z <- apply(w, 2, ratio)
round.z <- round(z, digits=0)
nround.z <- round(z, digits=1)
df <- cbind(x, y, z, round.z, nround.z)
df <- as.data.frame(df)

grid <- with(df, interp(x, y, z))
contour(grid, levels=c((0:10)/10, 2:10), asp=1)

И код для второго сюжета

v <- reshape2::melt(volcano)
g <- ggplot(v, aes(Var1, Var2)) +
       geom_contour(aes(z = value))
g + geom_text_contour(aes(z = value))

Проблема, с которой я сталкиваюсь, это получение моего Значения z в матрицу того же типа, что и «вулкан». Кажется, это некая матрица, организованная как плоскость xy; где значение в первой строке, первый столбец присваивается (0, 60) на координатной плоскости, а второй строке, первый столбец - (0, 59), et c. Если бы кто-то мог помочь мне преобразовать матрицу или заставить работать контурный график, это было бы здорово!

...