2013-07-20 11 views
7

Мне нужно написать собственную функцию, чтобы нарисовать функцию плотности биномиального распределения и, следовательно, провести соответствующий график при n = 20 и p = 0,1,0.2, ..., 0,9. Также мне нужны комментарии на графиках.R, график биномиального распределения

Я пробовал это;

graph <- function(n,p){ 
       x <- dbinom(0:n,size=n,prob=p) 
       return(barplot(x,names.arg=0:n)) 
      } 


    graph(20,0.1) 
    graph(20,0.2) 
    graph(20,0.3) 
    graph(20,0.4) 
    graph(20,0.5) 
    graph(20,0.6) 
    graph(20,0.7) 
    graph(20,0.8) 
    graph(20,0.9) 

    #OR 
    graph(20,scan()) 

Мой первый вопрос: есть ли способ, так что мне не нужно, чтобы записать несколько раз линия graph(20,p) за исключением использования scan()?

Мой второй вопрос:

Я хочу, чтобы увидеть график в одном устройстве или хотите ударить ENTER, чтобы увидеть следующий график. Я написал

par(mfcol=c(2,5)) 
    graph(20,0.1) 
    graph(20,0.2) 
    graph(20,0.3) 
    graph(20,0.4) 
    graph(20,0.5) 
    graph(20,0.6) 
    graph(20,0.7) 
    graph(20,0.8) 
    graph(20,0.9) 

, но график слишком крошечный. Как я могу красиво представить графики с помощью строки заголовка n = 20 и p = значение, которое я использовал для рисования графика? [Хотя это можно сделать, написав mtext() после вызова функции , но при этом мне нужно написать аналогичную линии несколько раз. Поэтому я хочу сделать это, включая функцию . ]

Мой последний вопрос:

О комментариях. Графики показывают, что, как вероятность успеха, p увеличивается, график стремится вправо, т. Е. График искажается справа.

Есть ли способ прокомментировать график, используя program?

+0

Рассмотрите цикл или 'lapply', чтобы пройти через несколько значений p. – Thomas

ответ

4

Работа mapply, так как вы переходите через 2 переменные.

graph <- function(n,p){ 
    x <- dbinom(0:n,size=n,prob=p) 
    barplot(x,names.arg=0:n, 
     main=sprintf(paste('bin. dist. ',n,p,sep=':'))) 
} 
par(mfcol=c(2,5)) 
    mapply(graph,20,seq(0.1,1,0.1)) 

enter image description here

+1

'sapply (seq (0.1, 1, 0.1), graph, n = 20)' также будет работать –

2

прокладочная база графики является одним из раза вы часто хотите использовать for петли. Причина в том, что большинство функций построения объектов возвращают объект невидимо, но вас это не интересует; все, что вам нужно, это побочный эффект заговора. Цикл игнорирует возвращенные объекты, тогда как семья *apply будет тратить усилия на сбор и возврат их.

par(mfrow=c(2, 5)) 
for(p in seq(0.1, 1, len=10)) 
{ 
    x <- dbinom(0:20, size=20, p=p) 
    barplot(x, names.arg=0:20, space=0) 
} 
+0

Извините, я беспокоюсь, что это неоднозначно ... «большинство [функций построения базы] возвращают объект невидимо" ? Я считаю, что это очень вводит в заблуждение и в целом неверно. Также неверно думать, что for-loops «игнорируют возвращенные объекты» при обращении к функциям базового построения. –

+0

Контекст - использование базовой графики, поэтому я думаю, что OP нуждается в помощи при указании узких полей. –

Смежные вопросы