Sto lavorando con il linguaggio di programmazione R. Ho il seguente codice che crea 100 insiemi di dati (contenente una componente fissa e una componente casuale):
a = rnorm(300,10,5)
b = rnorm(300,3,1)
c = rnorm(300,12,1)
e = "original"
d = data.frame(a,b,c,e)
results <- list()
for (i in 1:100){
a = rnorm(100,10,10)
b = rnorm(100,10,10)
c = rnorm(100,10,10)
e = "simulated"
d_i = data.frame(a,b,c,e)
data_i = rbind(d, d_i)
data_i$iteration = i
results[[i]] <- data_i
}
results_df <- do.call(rbind.data.frame, results)
Al momento, questi 100 set di dati sono stati inseriti nello stesso file ("results_df"). Ora, io voglio rompere il "results_df" file in ciascuna di queste 100 set di dati (utilizzando il "iterazione" colonna di indice):
results_df$iteration = as.factor(results_df$iteration)
X<-split(results_df, results_df$iteration)
Questo "X" file sembra essere un "elenco" con ciascuno dei 100 set di dati elencati come segue:
Posso accedere a ciascuno di questi file chiamando l ' "indice" che utilizza i
ad es.
> head(X$`1`)
a b c e iteration
1 2.141495 3.984072 12.73344 original 1
2 8.769269 4.267464 11.32566 original 1
3 5.413573 2.823608 12.06713 original 1
4 11.710470 3.710500 12.20715 original 1
5 14.423155 2.944178 10.56673 original 1
6 6.886629 2.843195 12.43074 original 1
> head(X$`2`)
a b c e iteration
401 2.141495 3.984072 12.73344 original 2
402 8.769269 4.267464 11.32566 original 2
403 5.413573 2.823608 12.06713 original 2
404 11.710470 3.710500 12.20715 original 2
405 14.423155 2.944178 10.56673 original 2
406 6.886629 2.843195 12.43074 original 2
> head(X$`98`)
a b c e iteration
38801 2.141495 3.984072 12.73344 original 98
38802 8.769269 4.267464 11.32566 original 98
38803 5.413573 2.823608 12.06713 original 98
38804 11.710470 3.710500 12.20715 original 98
38805 14.423155 2.944178 10.56673 original 98
38806 6.886629 2.843195 12.43074 original 98
La mia Domanda e: ora voglio scrivere un'altra funzione che esegue la regressione lineare su ognuno di questi 100 set di dati, consente di risparmiare i coefficienti di regressione, e li inserisce in un singolo file. Ho provato a scrivere il codice per questo:
results_1 <- list()
for (i in 1:100){
model_i <- lm(a ~ b +c, data = X$`i`)
coeff_i = model_i$coefficients
results_1[[i]] <- coeff_i
}
results_df_1 <- do.call(rbind.data.frame, results_1)
A prima vista, questo sembra aver funzionato, ma questa è la visualizzazione di tutti i coefficienti di regressione come lo stesso. Questo è impossibile, visto che il modello di regressione è stato eseguito 100 volte su diversi set di dati :
#for some reason, the column names have been corrupted
hist(results_df_1$c.14.5741211250235..14.5741211250235..14.5741211250235..14.5741211250235.., main = "first coeff")
hist(results_df_1$c..0.105285805666629...0.105285805666629...0.105285805666629.., main = "second coeff")
hist(results_df_1$c..0.236548691738492...0.236548691738492...0.236548691738492.., main = "third coeff")
Qualcuno può aiutarmi a risolvere questo problema? Quando si utilizza il "split()" la funzione in R, è questo il modo corretto per "chiamare" i "componenti split" in futuro i comandi ?
model_i <- lm(a ~ b +c, data = X$`i`)
Grazie!