Ho un 2396x34 double matrix
chiamato y
cui ciascuna riga (2396) rappresenta una situazione separata costituita da 34 segmenti di tempo consecutivi.Correlazione di Pearson ponderata?
Ho anche un numeric[34]
denominato x
che rappresenta una singola situazione di 34 segmenti di tempo consecutivi.
Attualmente sto calcolando la correlazione tra ciascuna riga y
e x
simili:
crs[,2] <- cor(t(y),x)
cosa devo ora è quello di sostituire la funzione cor
nell'istruzione sopra con un ponderato correlazione . Il peso vettore xy.wt
è lungo 34 elementi in modo che sia possibile assegnare un peso diverso a ciascuno dei 34 segmenti di tempo consecutivi.
Ho trovato la funzione Weighted Covariance Matrix
cov.wt
e ho pensato che se prima i dati di scale
dovessero funzionare come la funzione cor
. In effetti è possibile specificare che la funzione restituisca anche una matrice di correlazione. Sfortunatamente non sembra che io possa usarlo allo stesso modo perché non posso fornire separatamente le mie due variabili (x
e).
Qualcuno sa di un modo per ottenere una correlazione ponderata nel modo che ho descritto senza sacrificare la velocità?
Edit: Forse qualche funzione matematica potrebbe essere applicato a y
prima della funzione di cor
al fine di ottenere gli stessi risultati che sto cercando. Forse se moltiplico ciascun elemento per xy.wt/sum(xy.wt)
?
Modifica n. 2 Ho trovato un'altra funzione corr
nel pacchetto 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.
Anche questo non è quello che mi serve ma è più vicino.
Modifica # 3 Ecco il codice per generare il tipo di dati che sto lavorando 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
Eccellente! Questo è stato. Grazie ancora! Pensavo che le funzioni scritte in R sarebbero state sostanzialmente più lente di quelle incorporate in R ... ma immagino di no? –