Seite 1 von 1

Zweistichproben T-Test - Ausgabe von p-value mit if-else Bedingung

Verfasst: So Nov 26, 2017 8:48 pm
von PlayStat
Hallo,

ich benötige mal wieder eure Hilfe. Ich muss einen Code schreiben, der mir den P-Wert ausgibt. Das ganze soll ich mit einer If-Else Bedingung durchzuführen.

Zur Zeit habe ich folgendes:


xom<- read.csv("XOM.csv", header=TRUE, sep=",")
bp<- read.csv("BP.csv", header=TRUE, sep=",")

xomclose<- as.numeric(xom[,6])
date<- as.Date(xom[,1],"%y-%m-%d")

bpclose<- as.numeric(bp[,6])
date1<- as.Date(bp[,1],"%y-%m-%d")

alpha<- 0.1
mytest <- function(xomclose, bpclose, alpha){
TestValue <- var.test(xomclose, bpclose, ratio = 1, alternative = "two.sided")
if(TestValue$p.value < alpha) {
t.test <- t.test(xomclose, bpclose, alternative = "two.sided", paired = F, var.equal = F, conf.level = 1-alpha)
return(t.test$p.value)
}
else{
t.test1 <- t.test(xomclose, bpclose, alternative = "two.sided", paired = F, var.equal = T, conf.level = 1-alpha)
return(t.test$p.value)
}
}
Leider wird mir kein P-Wert ausgegeben. Müsste die Funktion "return(t.test$p.value)" nicht genau das machen? Hoffe ihr könnt mir weiterhelfen.

Grüße

Re: Zweistichproben T-Test - Ausgabe von p-value mit if-else Bedingung

Verfasst: So Nov 26, 2017 10:21 pm
von EDi
Einpaar Tipps:

* Objekte nach Funktionen zu benennen ist "gefährlich". Suchpfade sind schwer und die meisten R-User wissen nicht wie der Suchpfad in R aussieht (http://blog.obeautifulcode.com/R/How-R- ... nds-Stuff/) :

Code: Alles auswählen

t.test <- t.test(xomclose, bpclose, alternative = "two.sided", paired = F, var.equal = F, conf.level = 1-alpha)
Was ist t.test nach dieser Zeile? Das Objekt mit dem Ergebnis, oder die Funktion? [Lösung: beides ;) nur an einer anderen Stelle im Suchpfad. Das Objekt mit dem Ergebnis kommt zuerst, deshalb bekommt man das auch zurück]


*

Code: Alles auswählen

 t.test1 <- t.test(xomclose, bpclose, alternative = "two.sided", paired = F, var.equal = T, conf.level = 1-alpha)
return(t.test$p.value)
Hier ist copy-paste/Tipfehler drin.

BTW: Bei mir funktionierts (auch mit tippfehler)?!

Code: Alles auswählen

> mytest(xomclose, bpclose, 0.05)
[1] 0

Re: Zweistichproben T-Test - Ausgabe von p-value mit if-else Bedingung

Verfasst: Mo Nov 27, 2017 12:18 am
von PlayStat
Ich bin echt verwirrt... Ich sehe den Tippfehler nicht und bei mir taucht das Ergebnis nach wie vor nicht auf... Hab mir den Link auch durchgelesen, aber konnte nicht soviel entnehmen, da ich gerade erst mit R angefangen habe.. Wieso taucht bei dir eine Ausgabe aus und bei mir nicht? Vielleicht kannst du es nochmal so erklären, als würdest du mit einem kleinen Kind reden :oops:

Trotzdem schonmal ein Dank für deine Mühe!

Re: Zweistichproben T-Test - Ausgabe von p-value mit if-else Bedingung

Verfasst: Mo Nov 27, 2017 7:47 am
von EDi
Hast du die Funktion auch aufgerufen wie in meinem Beitrag?

Re: Zweistichproben T-Test - Ausgabe von p-value mit if-else Bedingung

Verfasst: Mo Nov 27, 2017 10:35 am
von PlayStat
Ich habe alles mögliche ausprobiert. Ich verstehe es nicht. Meinst du das mit den Umgebungen?
> MyFunction = function() {}
> environment( MyFunction )
Das?

Re: Zweistichproben T-Test - Ausgabe von p-value mit if-else Bedingung

Verfasst: Di Nov 28, 2017 10:23 am
von jogo
Hallo PlayStat,

bei mir sieht das Gesamtkunstwerk derzeit so aus:

Code: Alles auswählen

xom <- read.csv(file="http://forum.r-statistik.de/download/file.php?id=176", header=TRUE, sep=",")
bp  <- read.csv("http://forum.r-statistik.de/download/file.php?id=175", header=TRUE, sep=",")

# xomclose<- as.numeric(xom[,6]) # ... ist schon numerisch
xom$Date <- as.Date(xom$Date,"%Y-%m-%d")

# bpclose<- as.numeric(bp[,6]) # ... ist schon numerisch
bp$Date <- as.Date(bp$Date,"%Y-%m-%d")

mytest <- function(xomclose, bpclose, alpha) {
  TestValue <- var.test(xomclose, bpclose, ratio = 1, alternative = "two.sided")
  if(TestValue$p.value < alpha) {
    t.test1 <- t.test(xomclose, bpclose, conf.level = 1-alpha)
    return(t.test1$p.value)
  }
  else{
    t.test2 <- t.test(xomclose, bpclose, conf.level = 1-alpha, var.equal = TRUE)
    return(t.test2$p.value)
  } 
}


mytest(xom$Adj.Close, bp$Adj.Close, alpha=0.1)
Bei den Aufrufen von t.test() habe ich die Parameter entfernt, denen die default-Werte mitgegeben werden (z.B. var.equal = FALSE).

Hier noch eine Kurzform Deiner Funktion:

Code: Alles auswählen

mytest <- function(xomclose, bpclose, alpha) {
  varEQ <- !(var.test(xomclose, bpclose)$p.value < alpha)
  t.test(xomclose, bpclose, conf.level = 1-alpha, var.equal = varEQ)$p.value
}
Gruß, Jörg

Re: Zweistichproben T-Test - Ausgabe von p-value mit if-else Bedingung

Verfasst: Di Nov 28, 2017 11:20 am
von PlayStat
Hallo Jörg,

danke für deine Antwort!

in der Zeile
TestValue <- var.test(xomclose, bpclose, ratio = 1, alternative = "two.sided")
gibt es einen unexpected token. Woran liegt das? Er makiert den Bereich zwischen den Anführungsstrichen und der geschlossenen Klammer nach "two.sided".

Und mir ist immernoch nicht ganz klar, wo der p-value ist.. Die Ausgabe habe ich vor ein paar Tagen auch schonmal hinbekommen, aber ich kann den P-Wert nicht erkennen.

Re: Zweistichproben T-Test - Ausgabe von p-value mit if-else Bedingung

Verfasst: Di Nov 28, 2017 11:35 am
von jogo
PlayStat hat geschrieben: Di Nov 28, 2017 11:20 am in der Zeile
TestValue <- var.test(xomclose, bpclose, ratio = 1, alternative = "two.sided")
gibt es einen unexpected token. Woran liegt das? Er makiert den Bereich zwischen den Anführungsstrichen und der geschlossenen Klammer nach "two.sided".
bei mir läuft alles problemlos durch. Du kannst den Teil alternative = "two.sided" auch weglassen - ist Standardwert für den Parameter.
Und mir ist immernoch nicht ganz klar, wo der p-value ist.. Die Ausgabe habe ich vor ein paar Tagen auch schonmal hinbekommen, aber ich kann den P-Wert nicht erkennen.
Der p-value ist sehr klein (angezeigt wird 0). Ich habe die Berechnung nochmal ohne die Funktionsdefinition durchgeführt:

Code: Alles auswählen

> t.test(xom$Adj.Close, bp$Adj.Close, alternative = "two.sided", conf.level = 1-0.1)

Welch Two Sample t-test

data:  xom$Adj.Close and bp$Adj.Close
t = 227.25, df = 1301.6, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
90 percent confidence interval:
  47.15882 47.84697
sample estimates:
  mean of x mean of y 
   79.37572  31.87282 
Da steht dann: "p-value < 2.2e-16".

Gruß, Jörg