Frage

Ich habe folgendes Setup zu analysieren: Wir haben über 150 Themen und für jeden Probanden führten wir ein Paar Tests (unter verschiedenen Bedingungen) 18-mal. Die 18 verschiedenen Bedingungen des Tests ergänzen, in eine solche Art und Weise, so dass, wenn wir wo man Durchschnitt der Tests (für jedes Thema), würden wir keine Korrelation zwischen den Tests (zwischen Probanden) erhalten. Was wir wissen wollen, ist die Korrelation (und P-Wert) zwischen den Tests, in innerhalb von Themen, aber über alle Themen.

So wie ich dies jetzt tat, war die Korrelation für jedes Thema durchzuführen, und dann Blick auf der Verteilung des so erhaltenen Korrelationen zu sehen, ob es Mittel anders ist dann 0. Aber ich vermute, es könnte eine bessere Möglichkeit, die gleiche Frage zu beantworten (jemand sagte mir etwas über „geografische Korrelation“, sondern eine flache Suche hat nicht geholfen).

ps:. Ich verstehe, dass es vielleicht ein Ort, hier eine Art Mischmodell zu tun, aber ich würde es vorziehen, eine „Korrelation“ zu präsentieren, und ich bin nicht sicher, wie aus einem gemischten Modell so eine Ausgabe zu extrahieren

Auch hier ist ein kurzer Code dummy eine Vorstellung von dem, was ich rede zu geben:

attach(longley)
N <- length(Unemployed)
block <- c(
        rep( "a", N),
        rep( "b", N),
        rep( "c", N)
        )

Unemployed.3 <- c(Unemployed + rnorm(1),
                    Unemployed + rnorm(1),
                    Unemployed + rnorm(1))

GNP.deflator.3 <- c(GNP.deflator + rnorm(1),
                    GNP.deflator + rnorm(1),
                    GNP.deflator + rnorm(1))

cor(Unemployed, GNP.deflator)
cor(Unemployed.3, GNP.deflator.3)
cor(Unemployed.3[block == "a"], GNP.deflator.3[block == "a"])
cor(Unemployed.3[block == "b"], GNP.deflator.3[block == "b"])
cor(Unemployed.3[block == "c"], GNP.deflator.3[block == "c"])
(I would like to somehow combine the last three correlations...)

wird Irgendwelche Ideen begrüßt werden.

Best, Tal

War es hilfreich?

Lösung

Ich bin mit Tristan - Sie ICC suchen. Der einzige Unterschied zu Standard-Implementierungen ist, daß die zwei Beurteilern (Tests) jedes Thema wiederholt auszuwerten. Es könnte eine Implementierung, die das erlaubt. In der Zwischenzeit hier ist ein weiterer Ansatz, um die Korrelation zu erhalten.

Sie können die „allgemeine lineare Modelle“ verwenden, die Verallgemeinerungen von linearen Modelle sind, die explizit Korrelation ermöglichen, zwischen Residuen. Der folgende Code implementiert diese die gls Funktion des nlme Paket. Ich bin sicher, es gibt auch andere Möglichkeiten, wie gut. Um diese Funktion nutzen wir die Daten in eine „long“ -Format zum ersten reshape haben. Ich habe auch die Variablennamen zu x und y der Einfachheit halber geändert. Ich auch +rnorm(N) statt +rnorm(1) in Ihrem Code verwendet wird, denn das ist, was ich denke, Sie meinen.

library(reshape)
library(nlme)
dd <- data.frame(x=Unemployed.3, y=GNP.deflator.3, block=factor(block))
dd$occasion <- factor(rep(1:N, 3))  # variable denoting measurement occasions
dd2 <- melt(dd, id=c("block","occasion"))  # reshape

# fit model with the values within a measurement occasion correlated
#   and different variances allowed for the two variables
mod <- gls(value ~ variable + block, data=dd2, 
           cor=corSymm(form=~1|block/occasion), 
           weights=varIdent(form=~1|variable))  
# extract correlation
mod$modelStruct$corStruct

In dem Modellierungsrahmen können Sie einen Wahrscheinlichkeitsverhältnis-Test verwenden, um einen p-Wert zu erhalten. nlme können Sie auch ein Konfidenzintervall geben:

mod2 <- gls(value ~ variable + block, data=dd2, 
           weights=varIdent(form=~1|variable))  
anova(mod, mod2)   # likelihood-ratio test for corr=0

intervals(mod)$corStruct  # confidence interval for the correlation

Andere Tipps

Wenn ich das richtig verstehe Ihre Frage, sind Sie bei der Berechnung der interessiert Intra Korrelation zwischen mehreren Tests. Es ist eine Implementierung in dem psy Paket, obwohl ich nicht verwendet wird.

Wenn Sie auf die Korrelationsschätzung auszuführen Inferenz möchten, können Sie die Themen Bootstrap. So stellen Sie sicher, um die Tests zusammen zu halten für jede Probe.

Ich bin kein Experte, aber das sieht mir wie das, was Sie wollen. Es ist automatisiert, kurz, um Code, über die gleich Korrelationen wie Ihr Beispiel gibt, und erzeugt p-Werte.

> df = data.frame(block=block, Unemployed=Unemployed.3,
+ GNP.deflator=GNP.deflator.3)
> require(plyr)
Loading required package: plyr
> ddply(df, "block", function(x){
+   as.data.frame(
+     with(x,cor.test(Unemployed, GNP.deflator))[c("p.value","estimate")]
+ )})
  block    p.value  estimate
1     a 0.01030636 0.6206334
2     b 0.01030636 0.6206334
3     c 0.01030636 0.6206334

Um alle Details zu sehen, dies zu tun:

> dlply(df, "block", function(x){with(x,cor.test(Unemployed, GNP.deflator))})
$a

    Pearson's product-moment correlation

data:  Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval:
 0.1804410 0.8536976 
sample estimates:
      cor 
0.6206334 


$b

    Pearson's product-moment correlation

data:  Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval:
 0.1804410 0.8536976 
sample estimates:
      cor 
0.6206334 


$c

    Pearson's product-moment correlation

data:  Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval:
 0.1804410 0.8536976 
sample estimates:
      cor 
0.6206334 


attr(,"split_type")
[1] "data.frame"
attr(,"split_labels")
  block
1     a
2     b
3     c
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top