Berechnung Kontingenzkoeffizienten

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
Katti
Beiträge: 15
Registriert: Fr Feb 21, 2020 3:42 pm

Berechnung Kontingenzkoeffizienten

Beitrag von Katti »

Hallo Zusammen,

ich möchte einen Kontingenzkoeffizienten berechnen und komme an dieser Stelle einfach nicht weiter.

Die Codes habe ich bisher ausgeführt.

Code: Alles auswählen

> table(dataset.diseases[,"gender"],dataset.diseases[,"commute_time"])
        
           0 0.1 0.43 0.77 1.1 1.43 1.77 2.1 2.43 2.77 3.1 3.43
  female 513  49   49   38  50   54   52  50   55   24  27   14
  male   530  52   53   60  60   48   49  36   47   43  22   25
> addmargins(table(dataset.diseases[,"gender"],dataset.diseases[,"commute_time"]))
        
            0  0.1 0.43 0.77  1.1 1.43 1.77  2.1 2.43 2.77  3.1 3.43  Sum
  female  513   49   49   38   50   54   52   50   55   24   27   14  975
  male    530   52   53   60   60   48   49   36   47   43   22   25 1025
  Sum    1043  101  102   98  110  102  101   86  102   67   49   39 2000
> prop.table(table(dataset.diseases[,"gender"],dataset.diseases[,"commute_time"]),1)
        
                  0        0.1       0.43       0.77        1.1       1.43       1.77        2.1
  female 0.52615385 0.05025641 0.05025641 0.03897436 0.05128205 0.05538462 0.05333333 0.05128205
  male   0.51707317 0.05073171 0.05170732 0.05853659 0.05853659 0.04682927 0.04780488 0.03512195
        
               2.43       2.77        3.1       3.43
  female 0.05641026 0.02461538 0.02769231 0.01435897
  male   0.04585366 0.04195122 0.02146341 0.02439024
> a <- table(dataset.diseases[,"gender"],dataset.diseases[,"commute_time"])
> a
        
           0 0.1 0.43 0.77 1.1 1.43 1.77 2.1 2.43 2.77 3.1 3.43
  female 513  49   49   38  50   54   52  50   55   24  27   14
  male   530  52   53   60  60   48   49  36   47   43  22   25
> b <- matrix(NA, 2, 2)
> + for (i in 1:nrow(a))
+     + {for (j in 1:ncol(a))
+         + b[i,j]<-sum(a[i,])*sum(a[,j])/sum(a)}
Error in +b[i, j] <- sum(a[i, ]) * sum(a[, j])/sum(a) :
could not find function "+<-"


Kann mir vielleicht jemand bzgl. der Fehlermeldung wieterhelfen?
Was mache ich falsch?

Vielen lieben Dank!

Liebe Grüße Katti
Zuletzt geändert von jogo am Sa Feb 22, 2020 6:42 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert, siehe http://forum.r-statistik.de/viewtopic.php?f=20&t=29
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Berechnung Kontingenzkoeffizienten

Beitrag von jogo »

Hallo Katti,

hier stimmt etwas nicht:

Code: Alles auswählen

> + for (i in 1:nrow(a))
">" ist der command promt und dann kommt als erstes ein "+" ? Das geht nicht.

... und dann weiter:
wie stellst Du Dir die Wirkungsweise von for vor?
Willst Du das Ergebnis der for-Schleife hinzuaddieren?

Gruß, Jörg
Katti
Beiträge: 15
Registriert: Fr Feb 21, 2020 3:42 pm

Re: Berechnung Kontingenzkoeffizienten

Beitrag von Katti »

6.4.Kontingenzkoeffizient_in_R-Umsetzung in R.pdf
(130.62 KiB) 67-mal heruntergeladen
Hallo Jörg,

vielen lieben Dank für deine Antwort.

Ich kann dir deine Frage jedoch nicht beantworten, da ich gar nicht weiß für was dieser Code steht.
Wir müssen eine Hausarbeit mit R-Studio schreiben und haben uns leider nicht mit R in der Vorlesung beschäftigt und nur die Codes zur Verfügung gestellt bekommen.

Es sollte insgesamt so aussehen wie in der beigefügten Datei.

Ich bin Dankbar für jeden Tipp.

Ganz ganz lieben Dank!

Liebe Grüße Katti
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Berechnung Kontingenzkoeffizienten

Beitrag von jogo »

Hallo Katti,

dann muss der Code doch aber so aussehen:

Code: Alles auswählen

b <- matrix(NA, 2, 2)
for (i in 1:nrow(a))
{
  for (j in 1:ncol(a))
    b[i, j] <- sum(a[i, ]) * sum(a[, j]) / sum(a)
}
Das "+" ist das Zeilenfortsetzungszeichen im R-Interpreter. Es bedeutet, dass die Zeile noch nicht komplett ist.
Dieses Zeichen und auch der command promt gehören nicht zum R-Code, sondern es sind Statusanzeigen des Kommandointerpreters im interaktiven Modus.

Gruß, Jörg
p.s.: Der Code kann noch enorm verbessert werden, z.B.:

Code: Alles auswählen

a <- matrix(1:12, 3)
R <- rowSums(a)
b <- outer(R, colSums(a) / sum(R), "*") 
### oder:
R <- rowSums(a) 
b <- tcrossprod(R, colSums(a) / sum(R))
Katti
Beiträge: 15
Registriert: Fr Feb 21, 2020 3:42 pm

Re: Berechnung Kontingenzkoeffizienten

Beitrag von Katti »

Hallo Jörg,

vielen vielen lieben Dank, dass du dich so intensiv mit meinem Problem auseinandergesetzt hast. Ich bin dir so dankbar!!!

Mit deinem vorgeschlagenen Codes hat es nun endlich geklappt. Meine Ergebnisse habe ich dir unten aufgeführt.

Eine Verständnisfrage habe ich jedoch noch: Worin besteht denn der Unterschied welchen deiner beiden Codes ich nutze? Denn bei deiner 1. Variante bekomme ich als Ergebnis eine 4:3 Matrix und bei deiner 2. Variante eine 2:6 Matrix und die Zahlen sind auch unterschiedlich... Kannst du mir das vielleicht nochmal erläutern?

1.Variante: (Ergebnisse rot)

> a <- matrix(1:12, 3)
> R <- rowSums(a)
> b <- outer(R, colSums(a) / sum(R), "*")
> b
[,1] [,2] [,3] [,4]
[1,] 1.692308 4.230769 6.769231 9.307692
[2,] 2.000000 5.000000 8.000000 11.000000
[3,] 2.307692 5.769231 9.230769 12.692308


2. Variante (Ergebnisse rot)

R <- rowSums(a)
> b <- tcrossprod(R, colSums(a) / sum(R))
> b
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1.384615 3.230769 5.076923 6.923077 8.769231 10.61538
[2,] 1.615385 3.769231 5.923077 8.076923 10.230769 12.38462


Denn wenn ich danach chi berechnen will, bekomme ich auch unterschiedliche Ergebnisse...

1000 Dank dir!

LG Katti
Katti
Beiträge: 15
Registriert: Fr Feb 21, 2020 3:42 pm

Re: Berechnung Kontingenzkoeffizienten

Beitrag von Katti »

Achso und bzgl. meinem Code. Ich hatte dir den Code aus der Console geschickt, daher war das < und die + enthalten.

Wenn ich deinen Code nun eingebe, erhalte ich leider immer noch eine Fehlermeldung. hast du hier noch einen Tipp?

Zur Info vielleicht noch: Ich habe 2000 betrachtete Personen in meinem Datensatz. Die eine Variable hat 2 Ausprägungen (=Geschlecht) und die andere 12 Ausprägungen (Pendelzeit).

> b <- matrix(NA, 2, 2)
for (i in 1:nrow(a))
{
for (j in 1:ncol(a))
b[i, j] <- sum(a[i, ]) * sum(a[, j]) / sum(a)
}
Error in `[<-`(`*tmp*`, i, j, value = sum(a[i, ]) * sum(a[, j])/sum(a)) :
subscript out of bounds


Lieben Dank dir!

lg Katti
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Berechnung Kontingenzkoeffizienten

Beitrag von jogo »

Hallo Katti,

ich verstehe nicht, was Du meinst. Denn folgender Code:

Code: Alles auswählen

a <- matrix(1:12, 3)
b <- matrix(NA, 3, 4)
for (i in 1:nrow(a))
{
  for (j in 1:ncol(a))
    b[i, j] <- sum(a[i, ]) * sum(a[, j]) / sum(a)
}
b

R <- rowSums(a)
outer(R, colSums(a) / sum(R), "*") 
tcrossprod(R, colSums(a) / sum(R))
liefert:

Code: Alles auswählen

> b
         [,1]     [,2]     [,3]      [,4]
[1,] 1.692308 4.230769 6.769231  9.307692
[2,] 2.000000 5.000000 8.000000 11.000000
[3,] 2.307692 5.769231 9.230769 12.692308
> R <- rowSums(a)
> outer(R, colSums(a) / sum(R), "*") 
         [,1]     [,2]     [,3]      [,4]
[1,] 1.692308 4.230769 6.769231  9.307692
[2,] 2.000000 5.000000 8.000000 11.000000
[3,] 2.307692 5.769231 9.230769 12.692308
> tcrossprod(R, colSums(a) / sum(R))
         [,1]     [,2]     [,3]      [,4]
[1,] 1.692308 4.230769 6.769231  9.307692
[2,] 2.000000 5.000000 8.000000 11.000000
[3,] 2.307692 5.769231 9.230769 12.692308
Das ist dreimal das gleiche Ergebnis. Woher Du eine 2*6-Matrix bekommst, weiß ich nicht. Vorstellbar ist, dass Du dafür ganz andere Daten als input verwendest.
Katti hat geschrieben: So Feb 23, 2020 5:45 pm Zur Info vielleicht noch: Ich habe 2000 betrachtete Personen in meinem Datensatz. Die eine Variable hat 2 Ausprägungen (=Geschlecht) und die andere 12 Ausprägungen (Pendelzeit).
Kopier einfach das Ergebnis von

Code: Alles auswählen

str(DeinDataframe)   #### (... oder von welcher Datenstruktur auch immer)
in Deine nächste Nachricht.

Code: Alles auswählen

> b <- matrix(NA, 2, 2)
Bedenke, dass ich ein etwas größeres Beispiel gewählt habe (3 Zeilen, 4 Spalten). Für die Initialisierung von b musst Du dann

Code: Alles auswählen

b <- matrix(NA, 3, 4)
schreiben (siehe oben).

Gruß, Jörg
Katti
Beiträge: 15
Registriert: Fr Feb 21, 2020 3:42 pm

Re: Berechnung Kontingenzkoeffizienten

Beitrag von Katti »

Danke dir Jörg!

Es hat funktioniert :D
Antworten