Tengo un 2396x34 double matrix
llamado y
donde cada fila (2396) representa una situación separada que consta de 34 segmentos de tiempo consecutivos.¿Correlación ponderada de Pearson?
También tengo un numeric[34]
llamado x
que representa una única situación de 34 segmentos de tiempo consecutivos.
Actualmente estoy calculando la correlación entre cada fila de y
y x
así:
crs[,2] <- cor(t(y),x)
Lo que necesito ahora es reemplazar la función cor
en la declaración anterior con un correlación ponderada . El vector de peso xy.wt
tiene 34 elementos de longitud, por lo que se puede asignar un peso diferente a cada uno de los 34 segmentos de tiempo consecutivos.
Encontré la función Weighted Covariance Matrix
cov.wt
y pensé que si primero scale
los datos debería funcionar como la función cor
. De hecho, puede especificar que la función también devuelva una matriz de correlación. Lamentablemente, no parece que pueda usarlo de la misma manera porque no puedo suministrar mis dos variables (x
y y
) por separado.
¿Alguien sabe de una manera en que puedo obtener una correlación ponderada de la manera que describí sin sacrificar mucha velocidad?
Editar: Quizá alguna función matemática se podría aplicar a y
antes de la función cor
con el fin de obtener los mismos resultados que yo estoy buscando. ¿Tal vez si multiplico cada elemento por xy.wt/sum(xy.wt)
?
Edición # 2 me encontré con otra función corr
en el paquete boot
.
corr(d, w = rep(1, nrow(d))/nrow(d))
d
A matrix with two columns corresponding to the two variables whose correlation we wish to calculate.
w
A vector of weights to be applied to each pair of observations. The default is equal weights for each pair. Normalization takes place within the function so sum(w) need not equal 1.
Esto tampoco es lo que necesito, pero está más cerca.
Edición # 3 Aquí hay un código para generar el tipo de datos que estoy trabajando con:
x<-cumsum(rnorm(34))
y<- t(sapply(1:2396,function(u) cumsum(rnorm(34))))
xy.wt<-1/(34:1)
crs<-cor(t(y),x) #this works but I want to use xy.wt as weight
¡Excelente! Eso lo hizo. ¡Gracias de nuevo! Pensé que las funciones escritas en R serían sustancialmente más lentas que las integradas en R ... pero supongo que no? –