2014-06-19 15 views
19

나의 사과를 LM에서 표준화 된 계수를 추출 ...하지만 난R에 바보 같은 질문에 대한

내가 (R에) 장착되어 선형 모델에서 표준화 된 계수를 추출 할 간단한 해결책을 찾을 수 없습니다 간단한 방법이나 기능이 있어야합니다. 그게 뭔지 말해 줄 수 있어요?

EDIT (아래 설명 중 일부를 따르십시오) : 내 질문에 대한 더 많은 문맥 정보를 제공했을 것입니다. 나는 많은 심리학자들을위한 입문의 R 워크샵을 가르치고 있었다. 그들에게 표준화 된 계수를 구할 수있는 선형 모델은 마치 모델을 전혀 실행하지 않은 것처럼 보입니다. (좋아, 약간 과장이지만 포인트를 얻습니다.) 우리가 약간의 퇴행을했을 때 이것이 첫 번째 질문이었습니다. (나는 나쁜 것입니다.) 나는 예상하지 못했습니다 (저는 심리학자가 아닙니다). 당연히이 프로그램을 직접 프로그래밍 할 수 있으며 당연히 나를 위해 그것을 수행하는 패키지를 찾을 수 있습니다. 그러나 동시에 이것이 선형 모델의 기본적이고 공통적 인 필수 기능이라고 생각합니다. 즉, 점점 더 많은 패키지를 설치할 필요없이 기본 기능이 있어야한다고 생각했습니다. 초보자에게는 어려움으로 인식됨). 그래서 물었습니다. (그리고 필요할 때 도움을받는 방법을 보여 줄 수있는 기회이기도합니다.)

내가 바보 같은 질문을했다고 생각하는 사람들을 위해 사과하고 시간을내어 답변에 많은 시간을 보냈습니다.

+1

이 함수를 사용하십시오.'stdcoeff <- function (MOD) {b <- summary (MOD) $ coef [-1, 1]; sx <- sd (MOD $ model [-1]); sy <- sd (MOD $ model [1]); 베타 <- b * sx/sy; return (beta)}''MOD'는'lm' 함수에 의해 생성 된 모델입니다. 그래서'stdcoeff (lm (...))'로 사용하게 될 것입니다. (필자는 쓰지 않았습니다. 그물, 그래서 답변으로 게시하지 않음) –

+2

grrr .... 게시하기 전에 도움말 파일을 읽는 * 사람 *에게 발생하지 않습니까? –

+1

나는 [이 방법] (http://www.stat.columbia.edu/~gelman/research/published/standardizing7.pdf)을 좋아했다. 쉬운 해석을 위해 입력 변수를 표준 편차의 2 배로 재조정합니다. 'standardize' 함수는'arm' 패키지에 있습니다. – BlankUsername

답변

31

lm.beta라고하는 QuantPsyc 패키지에 편의 기능이 있습니다. 그러나 가장 쉬운 방법은 변수를 표준화하는 것입니다. 그런 다음 계수는 자동으로 표준화 된 "베타"계수 (즉, 표준 편차의 관점에서 계수)가됩니다. 예를 들어

,

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

당신에게 표준화 된 계수를 제공 할 것입니다.

정말 같은가요? 다음은 모두 동일하다는 것을 보여 그들이 있어야 같이 모두 동일하다는 것을 나타낸다

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 

.

어색한 변수 이름을 피하는 방법은 무엇입니까? scale(height)과 같이 이러한 변수가 아닌 변수 이름을 처리하지 않으려는 경우, 하나의 옵션은 데이터 집합 자체에서 lm 호출 외부의 변수를 표준화하는 것입니다. 예 :

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 

여러 변수를 편리하게 표준화하려면 어떻게해야합니까? 데이터 집합의 모든 변수를 표준화하지 않으려는 경우 수식에서 발생하는 모든 변수를 선택할 수 있습니다. (womenheight를 포함하고 weight 때문이다) 예를 들어, 지금 mtcars -dataset 참조 :

는 다음과 같은 말하는 회귀 모델을 내가 평가 싶어 :

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

우리는 사실을 사용할 수 있습니다 all.vars을 그 나에게 변수 이름의 벡터를 준다.

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

이에 따라 데이터 집합을 부분 집합화할 수 있습니다. 예를 들어,

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

은 모든 변수가 표준화 된 데이터 세트를 제공합니다. mycars을 사용한 선형 회귀는 표준화 된 베타를 제공합니다. 이러한 모든 변수를 표준화하는 것이 합리적인지 확인하십시오!

+2

이것은'arm :: standardize'가하는 것과 다소 차이가 있음을 주목하라. (응답은 크기가 조정되는지 아닌지에 대한 약간의 유연성을 제공 함과 동시에 범주 적 예측 자에 대한 인형으로 약간의 애호가/비표준 물건을 수행한다.) 'lm.beta' 접근 방식의 장점은 모델을 다시 맞추지 않아도된다는 것입니다. –

+2

다중 변수를 표준화하는'dplyr' 대안은'mycars <- mtcars %> % mutate_each_ (funs (scale), all.vars (model.formula))'입니다. –