2013-07-20 7 views
7

Ich muss eigene Funktion schreiben, um die Dichtefunktion der Binomialverteilung zu zeichnen und daher zeichnen entsprechenden Graph, wenn n = 20 und p = 0,1,0,2, ..., 0,9. Auch ich muss Kommentare zu den Graphen machen.R, Graph der Binomialverteilung

Ich habe das versucht;

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()) 

Meine erste Frage: Gibt es eine Art und Weise, so dass ich brauche, um die Linie graph(20,p) mehrmals außer scan() mit nicht aufschreiben?

Meine zweite Frage:

Ich mag die Grafik in einem Gerät sehen oder wollen ENTER treffen die nächste Grafik zu sehen. Ich schrieb

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) 

aber das Diagramm ist zu klein. Wie kann ich die Graphen schön mit Kopfzeile n = 20 und p = der Wert, den ich verwendet habe, um die Grafik zu erstellen? [Obwohl es durch Schreiben mtext() Schreiben der Funktion getan werden kann, aber dabei muss ich eine ähnliche schreiben Linie einige Male. Also ich möchte dies auch in Funktion tun.

]

Meine letzte Frage:

über Kommentar. Die Graphen zeigen, dass mit steigender Erfolgswahrscheinlichkeit p der Graph nach rechts tendiert, das heißt, der Graph ist rechts verzerrt.

Gibt es eine Möglichkeit, das Diagramm mit program zu kommentieren?

+0

Betrachten Sie eine Schleife oder 'lapply', um mehrere Werte von p zu durchlaufen. – Thomas

Antwort

4

Hier ein Job von mapply, da Sie über 2 Variablen Schleife.

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)' würde auch funktionieren –

2

Plotten Basis Grafiken ist eine der Zeiten, die Sie oft eine for Schleife verwenden möchten. Der Grund dafür ist, dass die meisten Plotfunktionen ein Objekt unsichtbar zurückgeben, aber Sie sind nicht daran interessiert; Alles, was Sie wollen, ist der Nebeneffekt des Plottens. Eine Schleife ignoriert die zurückgegebenen Objekte, während die *apply-Familie die Erfassung und Rückgabe der Ergebnisse verschwendet.

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

Sorry, ich mache mir Sorgen, das ist mehrdeutig ... "die meisten von [den Basis-Plotfunktionen] geben ein Objekt unsichtbar zurück" ? Ich denke, das ist sehr irreführend und allgemein falsch. Es ist auch falsch zu glauben, dass for-Schleifen "die zurückgegebenen Objekte ignorieren", wenn sie sich auf Basis-Plotfunktionen beziehen. –

+0

Der Kontext ist die Verwendung von Basisgrafiken, daher denke ich, dass das OP bei der Festlegung schmaler Ränder Hilfe benötigt. –