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
Generieren von Daten mit R
Re: Generieren von Daten mit R
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
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
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Generieren von Daten mit R
Anderer Antwortversuch: Hilft Dir diese Funktion?
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:
LG,
Bernhard
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
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte