Regressione lineare ciclo per ciascuna variabile indipendente individualmente contro dipendente

Voglio capire come creare un loop o utilizzando uno di applicare funzioni per ottenere le singole 1:1 di regressione informazioni per ogni variabile in un set contro la variabile dipendente.

Permette di dire che sto usando mtcars. Come faccio a scrivere in codice R che prende ogni variabile nel frame di dati e regredisce contro MPG?

Anche se sarebbe meglio avere un resoconto di ogni variabile indipendente e avere un qualche tipo di assegnazione di un nome ad esempio x1=, x2=ecc

summary(lm(mpg~eachvar,data=mtcars))
InformationsquelleAutor runningbirds | 2014-07-30



3 Replies
  1. 3

    Ciao a cercare qualcosa di simile :

    models <- lapply(paste("mpg", names(mtcars)[-1], sep = "~"), formula)
    res.models <- lapply(models, FUN = function(x) {summary(lm(formula = x, data = mtcars))})
    names(res.models) <- paste("mpg", names(mtcars)[-1], sep = "~")
    res.models[["mpg~disp"]]
    
    
    # Call:
    # lm(formula = x, data = mtcars)
    
    # Residuals:
    #     Min      1Q  Median      3Q     Max 
    # -4.8922 -2.2022 -0.9631  1.6272  7.2305 
    
    # Coefficients:
    #              Estimate Std. Error t value Pr(>|t|)    
    # (Intercept) 29.599855   1.229720  24.070  < 2e-16 ***
    # disp        -0.041215   0.004712  -8.747 9.38e-10 ***
    # ---
    # Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    # Residual standard error: 3.251 on 30 degrees of freedom
    # Multiple R-squared:  0.7183,  Adjusted R-squared:  0.709 
    # F-statistic: 76.51 on 1 and 30 DF,  p-value: 9.38e-10
    • sapete dove si utilizza poly sarebbe coerente con l’ summary(lm(formula = x...) componente?
  2. 10

    Questo farà per voi.

    lapply( mtcars[,-1], function(x) summary(lm(mtcars$mpg ~ x)) )

    Dati.telaio in oggetto è un elenco con alcune altre funzioni, in modo che questo andare in ogni colonna di mtcars escluso il primo, e di eseguire le regressioni. Se si salva l’elenco risultante in qualcosa di simile a L quindi è possibile accedere a ognuno facilmente da solo utilizzando lo stesso nome o il numero della colonna nei dati originali.fotogramma. Così L$cyl dà la regressione riepilogo per mpg su cyl.

    • In realtà questo rende più senso. E potrebbe anche facilmente fare cose come lapply(L, function(x) x$r.squared) ; lapply(L, coef)
  3. 6

    Dati.versione da tavolo di Johns soluzione

    library(data.table)
    Fits <- 
        data.table(mtcars)[, 
                  .(MyFits = lapply(.SD, function(x) summary(lm(mpg ~ x)))), 
                  .SDcols = -1]

    Alcune spiegazioni del codice

    • data.table convertire mtcars per un data.table oggetto
    • .SD è anche un data.table oggetto che contiene le colonne si vuole operare su
    • .SDcols = -1 dice .SD di non utilizzare prima colonna (come noi non vogliono adattarsi lm(mpg ~ mpg)
    • lapply corre solo il modello su tutte le colonne in .SD (ad eccezione di quella che abbiamo saltato) e restituisce oggetti di classe list

    Fit sarà un elenco di sintesi, è possibile ispezionare utilizzando

    Fits$MyFits

    Ma si può anche operare su di essi, per esempio, l’applicazione di coef funzione di ogni

    Fits[, lapply(MyFits, coef)]

    O di ottenere il r.squered

    Fits[, lapply(MyFits, `[[`, "r.squared")]
    • Grazie per questo! Quando io uso questa soluzione ottengo il seguente errore: Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases tutte le idee che porta a questo errore? Voglio usare questo piuttosto “sporco” del set di dati. Potrebbe essere che alcune eccezioni sono necessari? È ad esempio possibile aggiungere un try dichiarazione a questa soluzione per evitare che si saltare in aria?
    • Probabilmente significa che tutti i valori sono NAs, probabilmente. È necessario pulire i vostri dati o utilizzare tryCatch. In ogni modo, questa risposta è vecchio e ha bisogno di qualche aggiornamento.
    • Grazie per la tua risposta. Ho pensato che in un primo momento, ma ho rimosso tutte le variabili in cui tutti i valori (oltre il 99%) sono stati NA. Per la mia particolare (enorme) del set di dati, forse, è più probabile che ci sono alcuni non numerici variabili in là? Ma credo che poi tryCatch ancora sarebbe la soluzione. Non ho usato data.table un sacco di sicurezza. Sarebbe possibile, mi mostri dove incorporare il tryCatch?
    • Si può semplicemente controllare che la variabile è numerica primo, ad esempio, data.table(mtcars)[, .(MyFits = lapply(.SD, function(x) if(is.numeric(x)) summary(lm(mpg ~ x)))), .SDcols = -1]
    • Grazie, ho ancora qualche difficoltà a vedere come applicare dichiarazioni del genere. Quando ho applicato la soluzione di mtcars dal modo ottengo quindi le righe che inizia come list(call = lm(formula = mpg ~ x), terms = mpg ~ x, residu.. è Stato questo il risultato previsto o è qualcosa che va male c’è?
    • Non so cosa intendi. Per me funziona bene su mtcars.
    • Lo fa, a quanto pare io sono solo un po ‘ stupido e leggere solo metà della tua risposta. Le mie scuse e vi ringrazio per il vostro aiuto e la pazienza!
    • David Arenburg. vi ringrazio per questo. mi aiuta molto. e voglio verificare se voglio elencare tutti i modelli dall’AIC in modo che possiamo vedere il migliore al peggiore modello. tnx

Lascia un commento