HILFE Hausaufgabe

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
saskiasal47

HILFE Hausaufgabe

Beitrag von saskiasal47 »

Hallo ihr Lieben,

ich habe letzte Woche schon ein Mal um Hilfe gebeten, bin jedoch immer noch völlig hilflos. Ich habe eine Hausaufgabe in der Uni aufbekommen, in die ich schon seit einer Woche etliche Stunden investiert habe und trotzdem auf keinen grünen Zweig komme. Ich glaube mir fehlt für die Programmierung einfach das Verständnis, denn entweder verstehe ich nur die Hälfte der Aufgabe, meine Befehle funktionieren nicht bzw. weiß ich manchmal garnicht welchen Befehl ich anwenden soll oder oder oder... :cry:
Langsam bin ich wirklich am verzweifeln, da ich ungern 0 Punkte kassieren würde :cry:

Vllt kann mir ja jemand Tipps für den richtigen Lösungsweg geben bzw. mir beim Verständis helfen.
Ich wäre euch unglaublich dankbar!!!

Also hier die Aufgaben:

Schreiben Sie ein funktionsfähiges R-Programm, das die nachfolgend aufgeführten Aufgaben fehlerfrei durchführt. Speichern Sie dieses Programm unter folgenden Dateinamen Aufgabe3a_<Name1>_<Name2>.r Ersetzen Sie dabei <…> durch die jeweiligen Nachnamen der beteiligten Gruppenmitglieder.
Teil 1

1. Wählen Sie aus dem Wertebereich [1,50] drei Werte für den Freiheitsgrad ν der Student- (t-) Verteilung aus, für die sich die Verteilungsfunktionen sichtbar voneinander unterscheiden. Stellen Sie für diese drei ν-Werte den Verlauf der Wahrscheinlichkeitsdichtefunktion in einem gemeinsamen Diagramm dar. Den Bereich der x-Werte, für den Sie die Kurven darstellen, wählen Sie so, dass mindestens das Fünffache der Standardabweichung σ um den Mittelwert herum mit einer ansprechenden Auflösung abgebildet wird. Speichern Sie das Diagramm unter dem Namen Aufgabe3a_Dichtefunktion_<Name1>_<Name2>.jpg in einer Datei.
x<-(1:50)
V1<-pt(x,df=30)
V2<-pt(x,df=5)
V3<-pt(x,df=1)
-> hab jetzt für die Verteilungsfunktion die Freieitsgrade 1,5 und 30 benutzt

D1<-dt(x,df=30)
D2<-dt(x,df=5)
D3<-dt(x,df=1)
-> das müssten ja die Befehle für die Dichtefunktion sein

dann habe ich mich an dem Befehl für das Diagramm versucht:
plot(x,type=1,main=Name des Diagramms oder?,xlab="x-Werte",ylab="y-Werte",xlim=c(Limit bis wann die Achse geht oder?),ylim=c(..siehe xlim),col=farbe[1],lty=strich[1],lwd=2,las=1)

->ist das so korrekt? ich verstehe nicht die Aufgabe mit der Standartabweichung und dem Mittelwert, muss ich das für xlim dann einsetzen?
->und wie lass ich alle Kurven in einem Diagramm verlaufen?

2. Fertigen Sie für die gleichen drei ν-Werte und die gleichen x-Werte ein Diagramm an, in dem die entsprechenden Verteilungsfunktionen als Linienplots dargestellt sind. Speichern Sie das Diagramm unter dem Namen Aufgabe3a_Verteilungsfunktionfunktion_<Name1>_<Name2>.jpg

-> das würde ich denke ich hinbekommen, wenn ich erst Mal wüsste, wie ich das Diagramm von 1 anfertige, bin jedoch natürlich für Tipps offen und freue mich über jede Hilfe :D
3. Berechnen Sie in Abhängigkeit der gewählten ν-Werte die x-Werte, für die die Verteilungsfunktion die Werte 0.001, 0.01, 0.025, 0.05, 0.1, 0.9, 0.95, 0.975, 0.99 und 0.999 annimmt. Stellen Sie diese Werte (aus dem R-Programm heraus) in einer Tabelle zusammen, deren Spalten die unterschiedlichen ν-Werte und die Zeilen die 10 unterschiedlichen Wahrscheinlichkeiten repräsentieren. Benennen sie die jeweiligen Zeilen (rownames()) und Spalten (colnames()) mit den entsprechenden Werten und speichern sie die Tabelle (Matrix) formatiert in einer Datei mit dem Namen Aufgabe3a_P-Werte_<Name1>_<Name2>.txt ab.

-> hier hab ich garkeine Ahnung wie ich das mache :cry:

Schreiben Sie ein weiteres funktionsfähiges R-Programm, das die nachfolgend aufgeführten Aufgaben fehlerfrei durchführt. Speichern Sie dieses Programm unter folgenden Dateinamen Aufgabe3b_<Name1>_<Name2>.r
Teil 2

1. Erzeugen sie 1000 zufällige Stichproben mit zunächst jeweils n=10 Werten aus einer Lognormal-verteilung mit den Parametern μ=0 und σ=1. Bilden Sie von jeder Stichprobe Mittelwert und Standardabweichung und speichern diese Werte sukzessive auf einem passenden Datenvektor.

x<-rnorm(1000,10)
y<-sample(x,10)
-> das kommt bei mir immer was komisches raus, glaube nicht das, das so richtig ist :?
k<-plnorm(x,meanlog=0, sdlog=1) -> da habe ich die oben genannten Parameter eingesetzt

2. Erzeugen Sie ein Histogramm, dass die relative Häufigkeitsverteilung der 1000 Mittelwerte wiedergibt. Speichern Sie das Diagramm unter dem Namen. Aufgabe3b_Histogramm_<Name1>_<Name2>.jpg in einer Datei. Achten Sie darauf, dass das Diagramm alle für den Betrachter notwendigen Informationen enthält

-> das würde ich denke ich auch noch hinbekommen, wenn ich Aufgabe 1 erstmal richtig verstehen würde

3. Berechnen Sie nun den Mittelwert der 1000 Stichprobenmittel, die Standardabweichung der 1000 Stichprobenmittel, und den Mittelwerte der zuvor berechneten 1000 Stichproben-Standardabweichungen.
-> das würde ich ebenfalls denke ich hinbekommen

4. Geben Sie am Bildschirm folgende fünf Werte mit einer entsprechenden textlichen Identifizierung aus: (1) Mittelwert der Stichprobenmittelwerte, (2) Standardabweichung der Stichprobenmittelwerte, (3) Mittelwert der Stichproben-Standardabweichungen, (4) den unter (3) berechnete Wert dividiert durch Wurzel(n) und die Differenz zwischen (4) und (2).
5. Wiederholen Sie die Schritte (1) bis (4) für die Stichprobenumfänge n=20, 30, 50, 100, 150, 200, 250, 300, 400 und beobachten Sie die Veränderungen. Hinweis: ein guter Programmierer setzt die Wiederholungen mit größer werdenden Stichproben über eine weitere Schleife im Programm um, anstatt das Programm 10 Mal hintereinander auszuführen. Bedenken Sie auch, dass Sie für jeden Stichprobenumfang ein separates Histogramm erzeugen und speichern müssen.
-> mit 4 und 5 tu ich mich auch ein wenig schwer:(

ich wäre so unglaublich dankbar, wenn sich jemand erbarmen würde und mir hilft :oops: :oops: :oops:

Ich Danke schon tausend Mal im voraus!!!
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: HILFE Hausaufgabe

Beitrag von EDi »

Hier mal was zu 1.

Code: Alles auswählen

# dfs
dfs <- c(30, 10, 3)

# calc sd from t
sds <- sqrt(dfs / (dfs-2))

# limit for plotting as 5 * sds / 2
lim <- max(sds) * 5 / 2

curve(dt(x, 30), from = -lim, to = lim)
curve(dt(x, 10), from = -lim, to = lim, add = TRUE, col = 'red')
curve(dt(x, 3), from = -lim, to = lim, add = TRUE, col = 'blue')
legend('topleft', 
       col = c('black', 'red', 'blue'),
       lty = 1,
       legend = c('t(30)', 't(10)', 't(3)')
       )
2. ist analog.

3. ich denke hier ist qt() gefragt. q steht für quantile

Teil 2:

1. rlnorm() zieht dir Werte aus der log-normal verteilung. replicate() ist auch nützlich. genauso wie apply() und mean() und sd()
2. hist()
3. mean(), sd(9
4. print()?
5. alles wie oben, nur in eine Schleife, also ungefähr so:
for(n in c(20, 30, 40)) {
rlnorm(n, 0, 10)
}

ich würde anstatt ne Schleife lapply nehmen...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
saskiasal47

Re: HILFE Hausaufgabe

Beitrag von saskiasal47 »

Ein riesen Dankeschön für die schnelle Antwort und die Hilfe! das hat mich schon deutlich voran gebracht!

Das habe ich jetzt für 1.3
ist das einigermaßen korrekt? die Tabelle sieht mir ein wenig merkwürdig aus :(

Code: Alles auswählen

Q1<-quantile(30, probs = c(0.001,0.01,0.025,0.05,0.1,0.9,0.95,0.975,0.99,0.999) )
Q2<-quantile(10, probs = c(0.001,0.01,0.025,0.05,0.1,0.9,0.95,0.975,0.99,0.999) )
Q3<-quantile(3, probs = c(0.001,0.01,0.025,0.05,0.1,0.9,0.95,0.975,0.99,0.999) )
data.frame(Q1,Q2,Q3)
saskiasal47

Re: HILFE Hausaufgabe

Beitrag von saskiasal47 »

und das habe ich zu 2.1

Code: Alles auswählen

rlnorm(1000,meanlog = 0, sdlog = 1)
aber das kann doch nicht richtig sein... wie gebe ich denn den Befehl ein, dass ich 1000 Stichproben mit jeweil 10 Werten möchte? dazu finde ich bei google usw. einfach nichts... oder stehe ich auf dem Schlauch und verstehe die Aufgabe falsch?
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: HILFE Hausaufgabe

Beitrag von jogo »

Code: Alles auswählen

replicate(1000, rlnorm(10, meanlog = 0, sdlog = 1))
Für den Teil 2 könnte es so aussehen:

Code: Alles auswählen

### Teil 2

set.seed(42)

n <- 10
Proben <- replicate(1000, rlnorm(n, meanlog = 0, sdlog = 1))
m <- colMeans(Proben)      # Mittelwerte
s <- apply(Proben, 2, sd)  # Standardabweichungen

hist(m, freq=FALSE) # noch Infos anbringen: "rel. Häufigk. der 1000 Mittelwerte"

paste0("(1) Mittelwert der Stichprobenmittelwerte: ", mean(m))
paste0("(2) Standardabweichung der Stichprobenmittelwerte: ", sd(m))
paste0("(3) Mittelwert der Stichproben-Standardabweichungen: ", mean(s))
paste0("(4) den unter (3) berechnete Wert dividiert durch Wurzel(n): ", mean(s)/sqrt(1000), 
       " und die Differenz zwischen (4) und (2): ", mean(s)/sqrt(n) - sd(m))
Für die letzte Aufgabe im Teil 2 muss man alles noch schön einpacken:

Code: Alles auswählen

### Teil 2

set.seed(42)

# Stichprobenumfänge 
N <- c(10, 20, 30, 50, 100, 150, 200, 250, 300, 400)

par(mfrow=c(5,2))
for (n in N) {
  Proben <- replicate(1000, rlnorm(n, meanlog = 0, sdlog = 1))
  m <- colMeans(Proben)      # Mittelwerte
  s <- apply(Proben, 2, sd)  # Standardabweichungen
  
  hist(m, freq=FALSE, main=paste0("n=", n, ", rel. Häufigk. der Mittelw."))
  
  print(paste0("### n= ", n))
  print(paste0("(1) Mittelwert der Stichprobenmittelwerte: ", mean(m)))
  print(paste0("(2) Standardabweichung der Stichprobenmittelwerte: ", sd(m)))
  print(paste0("(3) Mittelwert der Stichproben-Standardabweichungen: ", mean(s)))
  print(paste0("(4) den unter (3) berechnete Wert dividiert durch Wurzel(n): ", mean(s)/sqrt(1000), 
               " und die Differenz zwischen (4) und (2): ", mean(s)/sqrt(n) - sd(m)))
}
Beim Abspeichern der Grafiken habe ich es mir besonders einfach gemacht, indem ich die Grafiken alle auf ein Blatt gesetzt habe.

Gruß, Jörg
saskiasal47

Re: HILFE Hausaufgabe

Beitrag von saskiasal47 »

erst mal ein riesen großes dankeschön für dich hilfe :D

aber was muss ich verändern, damit ich nicht alle Diagramme auf einem Blatt habe sondern seperat?
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: HILFE Hausaufgabe

Beitrag von jogo »

dann hilft nur das Ablegen in jeweils einzelnen Dateien:

Code: Alles auswählen

png(filename=sprintf("Histo%03d.png", n), width = 800, height = 800)
hist(m, freq=FALSE, main=paste0("n=", n, ", rel. Häufigk. der Mittelw."))
dev.off()
in der Schleife.
saskiasal47

Re: HILFE Hausaufgabe

Beitrag von saskiasal47 »

die Diagramme durchlaufen quasi nur ein Mal die Schleife aber werden mir danach nicht mehr angezeigt,damit ich sie abspeichern kann:(
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: HILFE Hausaufgabe

Beitrag von bigben »

Jörg ist Dir einen Schritt voraus: Du brauchst die Diagramme nicht mehr speichern - sie sind nach dieser Schleife bereits gespeichert. Eigentlich müsstest Du die ganzen Bilddateien im Ordner Deines Programms finden, wenn Du Jörgs letzten Code in die for-Schleife eingebaut hast.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: HILFE Hausaufgabe

Beitrag von jogo »

hier nochmal komplett:

Code: Alles auswählen

### Teil 2

set.seed(42)

# Stichprobenumfänge 
N <- c(10, 20, 30, 50, 100, 150, 200, 250, 300, 400)

for (n in N) {
  Proben <- replicate(1000, rlnorm(n, meanlog = 0, sdlog = 1))
  m <- colMeans(Proben)      # Mittelwerte
  s <- apply(Proben, 2, sd)  # Standardabweichungen
  
  png(filename=sprintf("Histo%03d.png", n), width = 800, height = 800)
  hist(m, freq=FALSE, main=paste0("n=", n, ", rel. Häufigk. der Mittelw."))
  dev.off()
  
  print(paste0("### n= ", n))
  print(paste0("(1) Mittelwert der Stichprobenmittelwerte: ", mean(m)))
  print(paste0("(2) Standardabweichung der Stichprobenmittelwerte: ", sd(m)))
  print(paste0("(3) Mittelwert der Stichproben-Standardabweichungen: ", mean(s)))
  print(paste0("(4) den unter (3) berechnete Wert dividiert durch Wurzel(n): ", mean(s)/sqrt(1000), 
               " und die Differenz zwischen (4) und (2): ", mean(s)/sqrt(n) - sd(m)))
}
und bevor Du lange nach den Dateien suchen musst:

Code: Alles auswählen

# In welchem Verzeichnis finde ich die Grafikdateien?
getwd()
Gruß, Jörg
Antworten