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

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

Moderatoren: EDi, jogo

Antworten
PlayStat

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

Beitrag 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
Dateianhänge
XOM.csv
(51.52 KiB) 65-mal heruntergeladen
BP.csv
(51.15 KiB) 63-mal heruntergeladen
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

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

Beitrag 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
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.
PlayStat

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

Beitrag 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!
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

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

Beitrag von EDi »

Hast du die Funktion auch aufgerufen wie in meinem Beitrag?
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.
PlayStat

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

Beitrag von PlayStat »

Ich habe alles mögliche ausprobiert. Ich verstehe es nicht. Meinst du das mit den Umgebungen?
> MyFunction = function() {}
> environment( MyFunction )
Das?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

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

Beitrag 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
PlayStat

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

Beitrag 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.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

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

Beitrag 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
Antworten