Почему диапазон моего контурного сюжета такой маленький? - PullRequest
2 голосов
/ 10 апреля 2020

Я пытался очертить график плотности множественного нормального распределения в R, мой код выглядит следующим образом

set.seed(123)
x<-seq(-20,20,by=0.1)
y<-seq(-20,20,by=0.1)
n=length(x)
zz<-matrix(0,n,n)
for(i in 1:n){
  for(j in 1:n){
  zz[i,j]=exp(-x[i]^2/10-y[j]^2/5-2*0.3*x[i]*y[j]/(50^0.5))
  }
}
contour(x,y,zz,nlevels =10)

И график выглядит так: enter image description here

Мой вопрос таков: почему диапазон выглядит таким маленьким, большая часть области пуста. Я хочу, чтобы контурная область покрывала более дикую область, такую ​​как диапазон, который я установил для xlim и ylim.

1 Ответ

2 голосов
/ 10 апреля 2020

Уровни определяют диапазон для построения графика. В вашем примере значения z очень малы при удалении от центра:

barplot(colMeans(zz))

enter image description here

И если вы посмотрите на уровни, созданные по умолчанию:

pretty(range(zz), 20)
 [1] 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70
[16] 0.75 0.80 0.85 0.90 0.95 1.00

Я не совсем знаком с тем, для чего вам нужен этот график, поэтому надеюсь, что нижеприведенное имеет смысл.

Чтобы охватить более широкую область, вам необходимо расширить уровни, чтобы охватить более низкие значения:

RN = quantile(zz,prob=c(0.5,1))
N = 10

contour(x,y,zz,nlevels=N,
levels=exp(pretty(log(RN), 10)))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...