Generieren von Daten mit R

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

Moderatoren: EDi, jogo

Antworten
g.nimmerfall

Generieren von Daten mit R

Beitrag von g.nimmerfall »

Liebe Forumsmitglieder,
ich bin leider totaler Neuling in R, habe bis dato lediglich ein wenig mit SPSS "herumgespielt".

Ich möchte für beide Werkzeuge gerne einen Datensatz generieren, bei dem verschiedene Variablen in Abhängigkeit zueinander stehen.
Ich habe bei meiner Google-Recherche einen Blogbeitrag von Jerimi Ann Walker gefunden, die folgende Formel vorschlägt:

make_data_corr = function(corr, n){
x = rnorm(n,0,1)
y = rnorm(n,0,1)
a = corr/(1-corr^2)^0.5
z=a*x+y
the_data = data.frame(x,z)
return(the_data)
}

Diese Formel funktioniert grundsätzlich sehr gut. Mein Problem ist allerdings, dass ich ordinalskalierten Daten brauche, die korrelieren. Beispiel: Merkmalsausprägung 2 von Variable x korreliert mit Merkmalsausprägung 3 von Variable y.

Vielleicht bin ich auch völlig am Holzweg, bin aber auch in diesem Fall dankbar für ein kritisches Feedback.

Lg,
Günter
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Generieren von Daten mit R

Beitrag von bigben »

Hallo Günter,

was verstehst Du unter der "Merkmalsausprägung a von Variable b"?

Das bemerkenswerte an der von Dir zitierten Funktion ist ja, dass man r vorgeben kann. Brauchst Du das für deine ordinalskalierten auch, dass man da ein Spearman's r vorgeben kann, oder darf das zufällig passieren?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Generieren von Daten mit R

Beitrag von bigben »

Anderer Antwortversuch: Hilft Dir diese Funktion?

Code: Alles auswählen

corr_ord_data <- function(n=50, m=3, tune=2){
  a <- as.ordered(sample(1:m, n, replace=TRUE))
  b <- sapply(a, function(x) sample(c(1:m, rep(x, tune*m)), 1, replace=TRUE))
  b <- factor(b, , levels=levels(a), ordered=TRUE)
  return(data.frame(a=a, b=b))
}

result <- corr_ord_data(25, 5)
print(result)
table(result)
print(str(result))

a streut zufällig, b ist aber häufiger gleich a als zufällig zu erwarten wäre. Die Stärke dieses Effekts kannst Du über das Argument tune steuern. Beispiele:

Code: Alles auswählen

> result <- corr_ord_data(100, 2, tune=0)
> table(result)
   b
a    1  2
  1 27 23
  2 26 24
> 
> result <- corr_ord_data(100, 2, tune=3)
> table(result)
   b
a    1  2
  1 44  6
  2  5 45
> 
> result <- corr_ord_data(100, 2, tune=10)
> table(result)
   b
a    1  2
  1 52  0
  2  4 44
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten