2013-01-01 57 views
0

我正在運行變量之間的相關性,其中一些數據缺失,因此每個相關性的樣本量可能不同。我嘗試了打印和總結,但這些都沒有顯示出我每個關聯的n值有多大。這是一個相當簡單的問題,我無法在任何地方找到答案。如何找到用於計算r的樣本大小?

+1

您是否在使用'cor(...,use =「pairwise .complete.obs「))'...? –

+0

進一步@ BenBolker的評論,你可能想看到http://tinyurl.com/afcglqv –

回答

3

想要這樣..?

x <- c(1:100,NA) 
length(x) 
length(x[!is.na(x)]) 

,你還可以得到度這樣自由的......

y <- c(1:100,NA) 
x <- c(1:100,NA) 

cor.test(x,y)$parameter 

但我認爲,如果你表現出你是如何估算確切的幫助相關的代碼,這將是最好的。

+0

..並不會樣本大小隻是(自由度)+2這個? :)所以答案是......'cor.test(x,y)$ parameter + 2' –

+0

是的,估計兩個參數,所以'df'在我的情況下是'N-2',我認爲這個解決方案是隱含的 –

+0

對於'method =「spearman」'或'「kendall」''cor.test(x,y)$參數'將返回NULL –

-1

如果你的變量是名爲ab的載體,會像sum(is.na(a) | is.na(b))幫助你嗎?

0

下面是如何在矩陣列中查找成對樣本大小的示例。如果要將其應用於數據框的(某些)數字列,請相應地合併它們,將生成的對象強制爲矩陣並應用該函數。

# Example matrix: 
xx <- rnorm(3000) 
# Generate some NAs 
vv <- sample(3000, 200) 
xx[vv] <- NA 
# reshape to a matrix 
dd <- matrix(xx, ncol = 3) 
# find the number of NAs per column 
apply(dd, 2, function(x) sum(is.na(x))) 
# tack on some column names 
colnames(dd) <- paste0("x", seq(3)) 

# Function to find the number of pairwise complete observations 
# among all pairs of columns in a matrix. It returns a data frame 
# whose first two columns comprise all column pairs 

pairwiseN <- function(mat) 
{ 
    u <- if(is.null(colnames(mat))) paste0("x", seq_len(ncol(mat))) else colnames(mat) 
    h <- expand.grid(x = u, y = u) 

    f <- function(x, y) 
      sum(apply(mat[, c(x, y)], 1, function(z) !any(is.na(z)))) 
    h$n <- mapply(f, h[, 1], h[, 2]) 
    h 
} 

# Call it 
pairwiseN(dd) 

該功能可以很容易地改進;例如,您可以設置h <- expand.grid(x = u[-1], y = u[-length(u)])以減少計算次數,您可以返回一個nxn矩陣而不是三列數據幀等。