2013-04-19 15 views
12

Ho data che contiene 54 campioni per ogni condizione (xe y). Ho calcolato la correlazione seguente modo:Come calcolare il valore P e l'errore standard dall'analisi di correlazione del cor di R()

> dat <- read.table("http://dpaste.com/1064360/plain/",header=TRUE) 
> cor(dat$x,dat$y) 
[1] 0.2870823 

C'è un modo nativo per produrre SE di correlazione in cor di R() funzioni sopra e p-value da T-test?

come spiegato in questo web (Pagina 14.6)

+4

Forse siete alla ricerca di 'cor .test' invece. – A5C1D2H2I1M1N2O1R2T1

risposta

20

Penso che quello che stai cercando è semplicemente la funzione di cor.test(), che restituirà tutto ciò che stai cercando tranne che per l'errore standard della correlazione. Tuttavia, come puoi vedere, la formula è molto semplice, e se usi cor.test, hai tutti gli input necessari per calcolarlo.

Utilizzando i dati dell'esempio (in modo da poter confrontare da soli con i risultati a pagina 14.6):

> cor.test(mydf$X, mydf$Y) 

    Pearson's product-moment correlation 

data: mydf$X and mydf$Y 
t = -5.0867, df = 10, p-value = 0.0004731 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
-0.9568189 -0.5371871 
sample estimates: 
     cor 
-0.8492663 

Se si volesse, si potrebbe anche creare una funzione come la seguente al comprende la norma errore del coefficiente di correlazione.

Per comodità, ecco l'equazione:

enter image description here

r = stima correlazione e n - 2 = gradi di libertà, entrambi i quali sono prontamente disponibili nell'output sopra. Così, una semplice funzione potrebbe essere:

cor.test.plus <- function(x) { 
    list(x, 
     Standard.Error = unname(sqrt((1 - x$estimate^2)/x$parameter))) 
} 

e usarlo come segue:

cor.test.plus(cor.test(mydf$X, mydf$Y)) 

Qui, "mydf" è definito come:

mydf <- structure(list(Neighborhood = c("Fair Oaks", "Strandwood", "Walnut Acres", 
    "Discov. Bay", "Belshaw", "Kennedy", "Cassell", "Miner", "Sedgewick", 
    "Sakamoto", "Toyon", "Lietz"), X = c(50L, 11L, 2L, 19L, 26L, 
    73L, 81L, 51L, 11L, 2L, 19L, 25L), Y = c(22.1, 35.9, 57.9, 22.2, 
    42.4, 5.8, 3.6, 21.4, 55.2, 33.3, 32.4, 38.4)), .Names = c("Neighborhood", 
    "X", "Y"), class = "data.frame", row.names = c(NA, -12L)) 
3

Non può semplicemente prendere la statistica del test dal valore di ritorno? Naturalmente la statistica test è la stima/SE in modo da poter calc se da solo dividendo la stima da parte del TSTAT:

Utilizzando mydf nella risposta di cui sopra:?

r = cor.test(mydf$X, mydf$Y) 
tstat = r$statistic 
estimate = r$estimate 
estimate; tstat 

     cor 
-0.8492663 
     t 
-5.086732 
Problemi correlati