Seite 1 von 1

Rejection Sampling und multiples Rezeption Sampling

BeitragVerfasst: Fr 10. Aug 2018, 16:46
von Heumann
Guten Tag an alle Foren Mitglieder,

ich habe dieses Semester an der Uni ein Programmierkurs belegt und bin somit neu in der Materie. Meine Aufgabe bestand darin ein Rejection Sampling zu programmieren. Die genaue Aufgabe lautet: Ermitteln Sie (Konfidenzniveau = 0.95) jeweils die Konfidenzintervalle (für den Erwartungswert) für Ihre Stichproben und überprüfen Sie, wie oft der tatsächliche Erwartungswert in den ermittelten Intervallen enthalten ist.
Hinweis: erstellen Sie Ihre Funktionen so, dass beliebige Paramater (z.B. bei der Normalverteilung μ und σ2) eingegeben werden können, bei der Bearbeitung Ihrer Aufgabe sollen diese Parameter dann selbsgewählt festgelegt werden (z.B.μ=1undσ2 =0.5).

Meine Funktion lautet: X ∼ Exp(λ) (Exponentialverteilung) und χ2 (Chi Quadrat) −Anpassungstest
Beim Ploten meines Programms bilden die Zufallszahlen die Kurve anstatt das sie die Fläche um und in der Kurve ausfüllen. Sieht von euch jemand den Fehler, den ich beim programmieren gemacht habe?

LG und ich bedanke mich schon mal im voraus. :)


# erzeugen vonn 100 Zufallszahlen mittels rejection sampling
rejsampling = function(data, lambda)
{
data=100
lambda = 1
erg <- vector(length = data)
n<-1
# Rejection Sampling
for (i in 1:data)
{
fx <-0
u<-1
while (fx < u)
{
x = runif(1,min=0,max=1)
u = runif(1,min=0,max=max(fx))
fx =lambda*exp(1)^(-lambda*x)
}
erg[i]=x
}

return(erg)
}
lambda=2
erg = rejsampling(100,lambda)
plot(erg)
curve(sort(rexp(x,rate=lambda)),add=TRUE,col="red")


# erzeugen von 100 Datens?ten (mit L?nge 100) und ?berpr?fen wie oft der Ewartungswert
# der Exp.-Verteilung innerhalb des Konfidenzintervalls (alpha=0,05) liegt

#Ausgabe entspricht Anzahl Erwartungswert im Konfidenzintervall
multiplerejsampling = function(n, data, lambda)
{

i<-1
erg<-matrix(nrow=data,ncol=n)

for (i in 1:n){

erg[i,]<- rejsampling(data, lambda)

next
}
return(erg)
}


#zusammenfassen der Intervale bis Wahrscheinlichkeit > 0.05
zusfintv=function(anzinnerhalb,p)
{
x=(choose(1,anzinnerhalb)*p^anzinnerhalb)*(choose(1,1-anzinnerhalb)*(1-p)^(100-anzinnerhalb))
h<-0
n<-1
pintv<-0
i<-1
while (n <= 100)
{
while(pintv<0.05 && i <= 100)
{
pintv=pintv + x[i]
#intv[]=i
i=i+1
}
h[n]=pintv
n=n+1
pintv=0
}
return(h)
}



# Z?hlen wie oft der Erwartungswert einer Exponentialverteilungen
#anzinnerhalb des Konfidenzinterfalls, um den Erwartungswert
#der selbst erzeugten Zahlen liegt
anzinnerhalb=function(erwWertexp=1/lambda,Vu,Vo,n=100)
{
anzinnerhalb=1:n
for (l in 1:n) {
if ( (Vu[l] < erwWertexp) && (erwWertexp < Vo[l]) )
{
anzinnerhalb[l]=1
}
else{
anzinnerhalb[l]=0
}
l=l+1
}
return (anzinnerhalb)
}