2017-12-17 4 views
2

Ich versuche, Variablen durch signifikante P-Werte zu unterteilen, und ich habe mit dem folgenden Code versucht, aber es wählt nur alle Variablen anstelle der Auswahl nach Bedingung. Kann mir jemand helfen, das Problem zu beheben?Subset-Variablen durch signifikante P-Wert

myvars <- names(summary(backward_lm)$coefficients[,4] < 0.05) 
happiness_reduced <- happiness_nomis[myvars] 

Vielen Dank!

+0

Haben Sie Ihrem Objekt 'myvars' Ihre erste Codezeile zugewiesen? – LAP

+3

'Namen (backward_lm $ Koeffizienten) [Zusammenfassung (rückwärts_lm) $ Koeffizienten [, 4] <0,05]' –

+0

@LAP Ja, tat ich. Das war ein Tippfehler, den ich jetzt bearbeiten werde. – lydias

Antwort

5

Eine alternative Lösung zu Martins großer Antwort (im Kommentarabschnitt) unter Verwendung des broom Pakets. Leider haben Sie eine Daten nicht geschrieben, so dass ich bin mit dem mtcars-Datensatz als Demo:

library(broom) 

# build model 
m = lm(disp ~ ., data = mtcars) 

# create a dataframe frm model's output 
tm = tidy(m) 

# visualise dataframe of the model 
# (using non scientific notation of numbers) 
options(scipen = 999) 
tm 

#   term estimate std.error statistic  p.value 
# 1 (Intercept) -5.8119829 228.0609389 -0.02548434 0.97990925639 
# 2   mpg 1.9398052 2.5976340 0.74675849 0.46348865035 
# 3   cyl 15.3889587 12.1518291 1.26639032 0.21924091701 
# 4   hp 0.6649525 0.2259928 2.94236093 0.00777972543 
# 5   drat 8.8116809 19.7390767 0.44640796 0.65987184728 
# 6   wt 86.7111730 16.1127236 5.38153418 0.00002448671 
# 7   qsec -12.9742622 8.6227190 -1.50466021 0.14730421493 
# 8   vs -12.1152075 25.2579953 -0.47965832 0.63642812949 
# 9   am -7.9135864 25.6183932 -0.30890253 0.76043942893 
# 10  gear 5.1265224 18.0578153 0.28389494 0.77927112074 
# 11  carb -30.1067073 7.5513212 -3.98694566 0.00067029676 

# get variables with p value less than 0.05 
tm$term[tm$p.value < 0.05] 

# [1] "hp" "wt" "carb" 

Der Hauptvorteil besteht darin, dass das Modell der Ausgabe als Datenrahmen durch das Erhalten Sie Variablennamen verwenden können, und nicht variable Positionen und Zeilennamen, um die Daten zu manipulieren.

Ich verwende options(scipen = 999), um es einfacher zu machen, zu überprüfen, ob die Filterung funktioniert (d. H. Nicht die wissenschaftliche Notation von Zahlen im Datenrahmen verwendet).

Verwandte Themen