wydobywanie znormalizowanych współczynników z lm W R

Przepraszam za głupie pytanie...ale nie mogę znaleźć prostego rozwiązania

Chcę wyodrębnić znormalizowane współczynniki z dopasowanego modelu liniowego (w R) musi być prosty sposób lub funkcja, która to robi. możesz mi powiedzieć, co to jest?

EDIT (po kilku komentarzach poniżej): Powinienem był podać więcej kontekstowych informacji na temat mojego pytania. Prowadziłem warsztaty wprowadzające dla grupki psychologów. Dla nich model liniowy bez możliwości uzyskania standardowych współczynników jest tak, jakbyś w ogóle nie uruchamiał modelu (ok, to trochę przesada, ale rozumiesz o co chodzi). Kiedy robiliśmy regresje to było ich pierwsze pytanie, którego (mój błąd) nie przewidziałem (nie jestem psychologiem). Oczywiście mogę to zaprogramować sam i oczywiście mogę szukać pakietów, które robią to za mnie. Ale jednocześnie uważam, że jest to swego rodzaju podstawowa i powszechna wymagana cecha modeli liniowych, że na spot, pomyślałem, że powinna istnieć podstawowa funkcja, która robi to bez konieczności instalowania coraz większej liczby pakietów(co jest postrzegane jako trudność dla początkujących). Więc poprosiłem (i była to również okazja, aby pokazać im, jak uzyskać pomoc, gdy jej potrzebują).

Moje przeprosiny dla tych, którzy myślą, że zadałem głupie pytanie, i moje wielkie podziękowania dla tych, którzy poświęcili czas, aby odpowiedzieć na to pytanie.

Author: amit, 2014-06-19

2 answers

W pakiecie QuantPsyc istnieje funkcja wygodna do tego celu, zwana lm.beta. Jednak myślę, że najprostszym sposobem jest standaryzacja zmiennych. Współczynniki będą wtedy automatycznie znormalizowane współczynniki "beta" (tj. współczynniki w zakresie odchyleń standardowych).

Na przykład,

 lm(scale(your.y) ~ scale(your.x), data=your.Data)

Da ci znormalizowany współczynnik.

Czy naprawdę są takie same? Poniższe ilustracje pokazują, że oba są identyczny:

library("QuantPsyc")
mod <- lm(weight ~ height, data=women)
coef_lmbeta <- lm.beta(mod)

coef_lmbeta
> height 
  0.9955 

mod2 <- lm(scale(weight) ~ scale(height), data=women)
coef_scale <- coef(mod2)[2]

coef_scale
> scale(height) 
  0.9955 

all.equal(coef_lmbeta, coef_scale, check.attributes=F)
[1] TRUE

Który pokazuje, że oba są identyczne, tak jak powinny być.

Jak uniknąć niezdarnych nazw zmiennych? Jeśli nie chcesz zajmować się tymi niezgrabnymi nazwami zmiennych, takimi jak scale(height), jedną z opcji jest standaryzacja zmiennych poza wywołaniem lm w samym zbiorze danych. Na przykład,

women2 <- lapply(women, scale) # standardizes all variables

mod3 <- lm(weight ~ height, data=women2)
coef_alt <- coef(mod3)[2]
coef_alt
> height 
  0.9955 

all.equal(coef_lmbeta, coef_alt)
[1] TRUE

Jak wygodnie standaryzować wiele zmiennych? W prawdopodobnym przypadku, że nie chcesz standaryzować wszystkich zmiennych w swoim zbiór danych, możesz wybrać wszystko, co występuje w Twojej formule. Na przykład, odwołując się do mtcars-dataset now (ponieważ women zawiera tylko height i weight):

Powiedzmy, że oto model regresji, który chcę oszacować:

 modelformula <- mpg ~ cyl + disp + hp + drat + qsec

Możemy wykorzystać fakt, że all.vars daje mi wektor nazw zmiennych.

 all.vars(modelformula)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "qsec"

Możemy użyć tego, aby odpowiednio ustawić zbiór danych. Na przykład,

mycars <- lapply(mtcars[, all.vars(modelformula)], scale) 

Da mi zbiór danych, w którym wszystkie zmienne zostały standaryzowane. Regresje liniowe za pomocą mycars dadzą teraz standaryzowane bety. Upewnij się jednak, że standaryzacja wszystkich tych zmiennych ma sens!

 35
Author: coffeinjunky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 16:58:03

Po prostu użyj colnames (data) z lapply lub sapply jako : lapply (data [, colnames (data)], scale)

 0
Author: user10430359,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-28 16:00:10