##Definition der Dichtefunktion als R-Funktion dichte<-function(x) { y<-rep(0,length(x)) for(i in 1:length(x)) { if(x[i]<0){ y[i]=0} if(x[i]>=0 && x[i]<=1){ y[i]=x[i]} if(x[i]>1 && x[i]<=2){ y[i]=-x[i]+2} if(x[i]>2){y[i]=0} } return(y) } ##Nach einer Berechnung per Hand kann auch die Verteilungsfunktion in R definiert werden #VFkt (Berechnung per Hand) VFkt<-function(x) { y<-rep(0,length(x)) for(i in 1:length(x)) { if(x[i]<0){y[i]=0} if(x[i]>=0 && x[i]<=1){y[i]=(1/2)*x[i]^2} if(x[i]>1 && x[i]<=2){y[i]=-(1/2)*x[i]^2+2*x[i]-1} if(x[i]>2){y[i]=1} } return(y) } ##Plotten der Dichte und der Verteilungsfunktion par(mfrow=c(1,2)) x<-seq(-2,4,0.1) plot(x,dichte(x),type="l",main="Dichte",xlab="x",ylab="f(x)") plot(x,VFkt(x),type="l",main="VFkt",xlab="x",ylab="F(x)") ##Berechnung des Erwartungswertes #Erzeuge dazu eine Funktion x*f(x), um diese zu integrieren f_e<-function(x) return(x*dichte(x)) #Berechne den Erwartungswert als Integral EW_f<-integrate(f_e,lower=-Inf,upper=Inf) #Ausgabe des Ergebnises EW_f ##Berechnung der Varianz #Erzeuge dazu eine Funktion (x-E[X])^2*f(x), um diese zu integrieren f_v<-function(x) { EW_f<-integrate(f_e,lower=-Inf,upper=Inf) return(((x-EW_f$value)^2)*dichte(x)) } #Berechne die Varianz als Integral V_f<-integrate(f_v,lower=-Inf,upper=Inf) #Ausgabe des Ergebnises V_f ##Berechnung der Quantile ##Drei Verfahren zur Bestimmung ### (1) Ausgabe der Verteilungsfunktion zur Bestimmung per Hand #Definiere x-Werte x<-seq(0,2,0.01) #Erstelle Tabelle mit x-Werten und Werten der Verteilungsfunktion cbind(x,VFkt(x)) #Man erkennt, dass unteres Quartil bei etwa 0.7 und oberes bei etwa 1.29 liegt #Man kann berechnen, dass exakte Quartile sqrt(1/2) und 1-sqrt(1/2) sind #Diese werden aufgrund der stetigen Dichte und Verteilung durch die Lösungen von #F(x1)=0.25 und F(x2)=0.75 gegeben ### (2) Approximation durch Definition eines Quantils (17.1.1) ##Genauer kann man in unserem Fall für das untere Quartile auch maximale x bestimmen, für welches VFkt(x) < 0.25 ist max(x[VFkt(x)<0.25]) ##Und für das obere Quartil das maximale x, so dass VFkt(x)<=0.75 max(x[VFkt(x)<0.75]) ##Wählt man x sehr fein, so kommt man nah an die wahren Werte heran x<-seq(0,2,0.00001) max(x[VFkt(x)<0.25]) sqrt(1/2) max(x[VFkt(x)<0.75]) 2-sqrt(1/2) ##Bemerkung: #Das geht nur so leicht, weil wir eine stetige Dichte betrachten! ### (3) Exakte Lösung durch Gleichung F(x)=q (Bem. 17.1.2 - 3) #Definiere eine Funktion F(x)-q und suche deren Nullstellen NQ<-function(x,q) return(VFkt(x)-q) #Suche Nullstelle von F(x)-0.25 #Uniroot ist Funktion, die auf einem gegebenen Intervall die Nullstelle einer Funktuion sucht uniroot(NQ,c(0,2),q=0.25)$root->uQ uQ sqrt(1/2) #Suche Nullstelle von F(x)-0.75 uniroot(NQ,c(0,2),q=0.75)$root->oQ oQ 2-sqrt(1/2) ###Prüfen der wahren Lösung VFkt(sqrt(1/2)) VFkt(2-sqrt(1/2)) #Also sind sqrt(1/2) und 2-sqrt(1/2) die wahren Quartile