Qui è il mio problema (i dati fittizi al fine di essere riproducibile):usare un argomento pesi in un elenco di lm lapply chiama
set.seed(42)
df<-data.frame("x"=rnorm(1000),"y"=rnorm(1000),"z"=rnorm(1000))
df2<-data.frame("x"=rnorm(100),"y"=rnorm(100),"z"=rnorm(100))
breaks<-c(-1000,-0.68,-0.01315,0.664,1000)
divider<-cut(df$x,breaks)
divider2<-cut(df2$x,breaks)
subDF<-by(df,INDICES=divider,data.frame)
subDF2<-by(df2,INDICES=divider2,data.frame)
reg<-lapply(subDF,lm,formula=x~.)
pre<-lapply(1:4,function(x){predict(reg[[x]],subDF2[[x]])})
lapply(1:4,function(x){summary(reg[[x]])$r.squared})
Il codice sopra funziona bene. Quello che sto facendo è il seguente: in base ai valori di x
, ho diviso lo df
in 4 frame di dati e ho eseguito una regressione su ciascuno di questi dataframes, in modo da poter prevedere i valori per un altro set di dati. La suddivisione del dataframe è per consentire una previsione migliore in quanto l'intervallo di x
ha un grande impatto per i dati effettivi.
Quello che sto cercando di fare è aggiungere un argomento di pesi per la regressione per dare maggiore importanza ai dati più recenti. L'argomento I miei pesi è: weights<-0.999^seq(250,1,by=-1)
se ci sono 250 dati. Con un seme di 42 e le pause precedenti, tutte le 4 dimensioni sono 250.
Quando provo a fare reg<-lapply(subDF,lm,formula=x~.,weights=0.999^seq(250,1,by=-1))
, ho ottenuto questo errore:
Error in eval(expr, envir, enclos) :
..2 used in an incorrect context, no ... to look in
che è abbastanza strano come lapply
ha un ...
argomento, usato qui per il formula
ma non accetta lo weights
.
Quindi davvero non so cosa fare per aggiungere quei pesi. Cosa dovrei correggere nel mio codice o dovrei (quasi) cambiare completamente per poter usare i pesi?
Per l'esempio e per renderlo (forse) più semplice, ho tagliato le interruzioni in modo che i 4 sottoinsiemi abbiano la stessa dimensione ma idealmente la risposta funzionerebbe anche se i 4 sottoinsiemi non hanno la stessa dimensione (quindi per esempio nell'intervallo
This post su CrossValidated ha lo stesso problema, ma senza una soluzione funzionante, quindi non mi ha aiutato.
è davvero fantastico! Forse qualcuno saprà qual è il problema ma la tua risposta è quella che stavo cercando – etienne
Prego! Nota che i tuoi pesi correnti sono basati sull'ordine del tuo dataframe. Questo mi rende sempre un po 'nervoso, potrebbe essere più sicuro fare qualcosa come "pesi <- pesi [ordine (dati $ tempo, diminuendo = T)] o simili. – Heroka