Я хотел бы сделать дискретное приближение к двумерному нормальному распределению. То есть я хотел бы вычислить матрицу, где каждая запись - это вероятность попадания в один из маленьких квадратов на картинке ниже.
Вот что я сделал до сих пор.
library(mvtnorm)
library(graphics)
euclide = function(x,y){sqrt(x^2+y^2)}
maxdist = 40
sigma = diag(2)
m = matrix(0,ncol=maxdist*2 + 1, nrow=maxdist*2 + 1)
for (row in -maxdist:maxdist){
for (col in -maxdist:maxdist){
if ( euclide(abs(row), abs(col)) < maxdist ){
lower = c(row-0.5, col-0.5)
upper = c(row+0.5, col+0.5)
p = pmvnorm(lower = lower , upper = upper, mean = c(0,0), sigma = sigma)
} else {
p = 0
}
m[row + maxdist + 1,col + maxdist + 1] = p
}
}
m = m[rowSums(m)!=0,colSums(m)!=0]
contour(m, levels = exp(-20:0), xlim=c(0.3,0.7), ylim=c(0.3,0.7))
Работает нормально. Однако это довольно медленно (для больших maxdist
), и я надеюсь сократить время его вычислений. Но это не моя главная проблема ...
Основная проблема заключается в том, что с помощью моего метода я не могу изменить количество маленьких квадратов рядом с центром, чтобы получить лучшее приближение, близкое к среднему. Могу только добавить квадраты по окружающему. Другими словами, я хотел бы иметь возможность установить дисперсию обеих осей двумерного нормального распределения.
N(0,1)
розыгрышей? (например, слайд 269-272 здесь) Или вы работаете на этом упражнении для другой конкретной цели? - person MichaelChirico   schedule 04.07.2015