2013-04-19 13 views
12

Mam data, które zawierają 54 próbki dla każdego warunku (x i y). mam obliczone korelacje następujący sposób:Jak obliczyć wartość P i standardowy błąd z analizy korelacji R cor()

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

istnieje natywny sposób wytwarzania SE korelacji w KR-R w() funkcje powyższe i p-wartości z testu T?

Jak wyjaśniono w tym web (strona 14.6)

+4

Może szukasz 'cor .test' zamiast tego. – A5C1D2H2I1M1N2O1R2T1

Odpowiedz

20

myślę, że to, co szukasz jest po prostu funkcja cor.test(), który powróci wszystko szukasz wyjątkiem błędu standardowego korelacji. Jednak, jak widać, wzór na to jest bardzo prosty, a jeśli używasz cor.test, masz wszystkie dane wejściowe wymagane do obliczenia.

Wykorzystując dane z przykładu (dzięki czemu można go porównywać się z wyników na stronie 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 

jeśli chcesz, możesz również utworzyć funkcję jak na poniższym obejmuje standard błąd współczynnika korelacji.

Dla wygody, tutaj równanie:

enter image description here

R = oszacowanie korelacji i n - 2 = stopnie swobody, z których oba są z łatwością dostępne na wyjściu powyżej. Zatem prosta czynność może być:

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

i używać go w sposób następujący:

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

tutaj "mydf" jest zdefiniowany jako:

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

nie można po prostu wziąć statystyki testu z wartości zwracanej? Oczywiście statystyka badania jest oszacowanie/se tak można oblicz se z tylko dzieląc oszacowanie przez tstat:

Korzystanie mydf odpowiedź powyżej:

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

     cor 
-0.8492663 
     t 
-5.086732 
Powiązane problemy