with spearman create coefficient chart array r multidimensional-array matrix warnings correlation

spearman - R-Mensaje de advertencia: "En cor(...): la desviación estándar es cero"



correlation variables in r (2)

Tengo un solo vector de datos de flujo (29 datos) y datos de matriz 3D (360 * 180 * 29)

Quiero encontrar la correlación entre un solo vector y un vector 3D. La matriz de correlación tendrá un tamaño de 360 ​​* 180.

> str(ScottsCk_flow_1981_2010_JJA) num [1:29] 0.151 0.644 0.996 0.658 1.702 ... > str(ssta_winter) num [1:360, 1:180, 1:29] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... > summary(ssta_winter) Min. 1st Qu. Median Mean 3rd Qu. Max. NA''s -2.8 -0.2 0.1 0.2 0.6 6.0 596849.0

Lo anterior es la estructura del vector y la matriz 3D. La matriz 3D tiene muchos valores como Null.

> for (i in 1:360) { + for(j in 1:180){ + cor_ScottsCk_SF_SST_JJA[i,j] = cor(ScottsCk_flow_1981_2010_JJA,ssta_winter[i,j,]) + } + } There were 50 or more warnings (use warnings() to see the first 50)

Esta parte del código anterior es el código para encontrar la correlación. Pero da waring como

> warnings() Warning messages: 1: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j, ... : the standard deviation is zero 2: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j, ... : the standard deviation is zero 3: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j, ... : the standard deviation is zero 4: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j, ... : the standard deviation is zero 5: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j, ... : the standard deviation is zero

Además, el resultado de la matriz de correlación es todo NULO. ¿Cómo pasó esto?

> str(cor_ScottsCk_SF_SST_JJA) num [1:360, 1:180] NA NA NA NA NA NA NA NA NA NA ...

He utilizado exactamente el mismo código bfr con 350 vectores de flujo y 360 * 180 * 350 matrices. Este código funciona perfectamente.


Algunos pensamientos.

Primero, utilizando apply() , puedes reemplazar ese bucle anidado con algo como esto:

cor_ScottsCk_SF_SST_JJA <- apply(ssta_winter, MARGIN = 1:2, FUN = cor, ScottsCk_flow_1981_2010_JJA)

En segundo lugar, parece que> 31% ( 596849/(360*180*29) ) de los puntos en ssta_winter son NaN o (posiblemente) NA_real_ . Dado el valor de retorno de una correlación calculada en vectores que contienen incluso un solo NaN ,

cor(c(1:3, NaN), c(1:4)) # [1] NA

¿no es probable que todos esos NaN causen que cor_ScottsCk_SF_SST_JJA se llene con NA s?

Tercero, como los mensajes de advertencia le dicen claramente, algunos de los vectores que está pasando a cor() tienen una variación cero. No tienen nada que ver con los NaN s: como se muestra a continuación, R no se queja de las desviaciones estándar de 0 cuando se trata de NaN . (También con bastante sensatez, ya que no puede calcular las desviaciones estándar para números no definidos):

cor(c(NaN, NaN, NaN, NaN), c(1,1,1,1)) # [1] NA cor(c(1,1,1,1), c(1,2,3,4)) # [1] NA # Warning message: # In cor(c(1, 1, 1, 1), c(1, 2, 3, 4)) : the standard deviation is zero


La siguiente utiliza la library("psych")

partial.r(sd,c("GPA","SAT"),"GRADE1",use = "complete.obs") Warning Message: In cor(data, use = use, method = method) : the standard deviation is zero

sd contiene NA para SAT.

partial.r(subset,c("GPA","SAT"),"GRADE1", use = "complete.obs") no warnings

subconjunto ha eliminado las NA