5
나는 95 % "정확한"신뢰 타원으로 이변 량 정규 분포의 산점도를 만들고 싶습니다. ggplot2에서 stat_ellipse() 미세 조정
library(mvtnorm)
library(ggplot2)
set.seed(1)
n <- 1e3
c95 <- qchisq(.95, df=2)
rho <- 0.8 #correlation
Sigma <- matrix(c(1, rho, rho, 1), 2, 2) # Covariance matrix
나는 우리가
stat_ellipse
를 사용하여 쉽게 생성 된 데이터의 산점도의 상단에 95 % 신뢰 타원을 그릴 수 평균 제로 분산이 이변 량 정상에서 1000 명 관찰 =
Sigma
x <- rmvnorm(n, mean=c(0, 0), Sigma)
z <- p95 <- rep(NA, n)
for(i in 1:n){
z[i] <- x[i, ] %*% solve(Sigma, x[i, ])
p95[i] <- (z[i] < c95)
}
를 생성합니다. 결과 숫자는 빨간색 포인트 중 몇 개가 신뢰 타원 안에 있다는 것을 알기 전까지는 완전히 만족 스럽습니다. 이 불일치는 일부 매개 변수의 추정에서 비롯된 것으로 추측되며 샘플 크기가 커짐에 따라 사라집니다. "손으로 만든"ellips
기능을 사용하여 생성 된 아래의 그림과 같이
data <- data.frame(x, z, p95)
p <- ggplot(data, aes(X1, X2)) + geom_point(aes(colour = p95))
p + stat_ellipse(type = "norm")
미세 조정는 "정확한"신뢰 타원을 묘사 그래서 stat_ellipse()
수있는 방법이 있습니까?
ellips <- function(center = c(0,0), c=c95, rho=-0.8, npoints = 100){
t <- seq(0, 2*pi, len=npoints)
Sigma <- matrix(c(1, rho, rho, 1), 2, 2)
a <- sqrt(c*eigen(Sigma)$values[2])
b <- sqrt(c*eigen(Sigma)$values[1])
x <- center[1] + a*cos(t)
y <- center[2] + b*sin(t)
X <- cbind(x, y)
R <- eigen(Sigma)$vectors
data.frame(X%*%R)
}
dat <- ellips(center=c(0, 0), c=c95, rho, npoints=100)
p + geom_path(data=dat, aes(x=X1, y=X2), colour='blue')
랜덤 샘플에 생성 할 때 사용 된 것과 동일한 매개 변수를 사용한다고 기대하지 않습니까? –
아니요, 아니요, 이변 량 일반 생성에 대한 깁스 샘플링의 정확도를 평가하기 위해 정확한 신뢰도가 필요했습니다. – Khashaa
"x"와 "y"값에 중심을 너무 일찍 추가했다고 생각합니다. 그들은 0이 아닌 경우 고유 벡터와 함께 곱해집니다. –