построить график результатов в пределах интервала in в R

#r #graph #linear-interpolation

#r #График #линейная интерполяция

Вопрос:

 n=50
p=0.32
P=matrix( c(p, 1-p, 0, 0, 0, 0,
p, 0, 1-p, 0, 0, 0,
p, 0, 0, 1-p, 0, 0,
0, p, 0, 0, 1-p, 0,
0, 0, p, 0, 0, 1-p,
0, 0, 0, p, 0, 1-p),
ncol=6, nrow=6, byrow = T)    

X=2  
for(j in 1:n)
{Y=runif(1)      
k=P[X[j],]      
k=cumsum(k)   
if(Y<=k[1])     
{X[j 1]=1}
else if (Y<=k[2])
{X[j 1]=2}
else if (Y<=k[3])
{X[j 1]=3}
else if (Y<=k[4])
{X[j 1]=4}
else if (Y<=k[5])
{X[j 1]=5}
else {X[j 1]=6}}

mean(X)

x=c(1,2,3,4,5,6)
y=c(0.1,0.15,0.22,0.29,0.38,0.45)
approx(x,y,xout=mean(X))
  

Я использовал приведенный выше код, чтобы получить среднее значение (y) путем линейной интерполяции с фиксированным p.
Но теперь, как изменить код, чтобы построить график среднего значения (y) относительно p [0: 1]???
Я продолжал получать только одно среднее значение (y), помогите мне, пожалуйста.
p.s.Мне нужно всего около $ y, вот где я застрял:(

Ответ №1:

Я думаю, было бы лучше изменить ваш код на function() и использовать его с sapply(p.vector, ...) .

функция

 func <- function(p) {
  P = matrix( c(p, 1-p, 0, 0, 0, 0,
                p, 0, 1-p, 0, 0, 0,
                p, 0, 0, 1-p, 0, 0,
                0, p, 0, 0, 1-p, 0,
                0, 0, p, 0, 0, 1-p,
                0, 0, 0, p, 0, 1-p),
              ncol=6, nrow=6, byrow = T)
  X = 2
  for(j in 1:n)
    {Y=runif(1)      
    k=P[X[j],]      
    k=cumsum(k)   
    if(Y<=k[1])     
    {X[j 1]=1}
    else if (Y<=k[2])
    {X[j 1]=2}
    else if (Y<=k[3])
    {X[j 1]=3}
    else if (Y<=k[4])
    {X[j 1]=4}
    else if (Y<=k[5])
    {X[j 1]=5}
    else {X[j 1]=6}}
  return(approx(x, y, xout = mean(X))$y)
}
  

используйте функцию с p[0:1]

 p.vec <- seq(0, 1, 0.01)                     # preparation of p[0:1] as a vector
n = 50                                       # defining other paramaters
x = c(1, 2, 3, 4, 5, 6)
y = c(0.1, 0.15, 0.22, 0.29, 0.38, 0.45)

y.vec <- sapply(p.vec, func)                 # calculation of the y about p[0:1]

plot(p.vec, y.vec, type="o")   # for example
  

введите описание изображения здесь