회귀에서 이진 설명 변수를 사용하는 경우 R에게 특정 수준을 참조로 사용하도록하려면 어떻게해야합니까?
기본적으로 일정 수준을 사용하고 있습니다.
lm(x ~ y + as.factor(b))
와 함께 b {0, 1, 2, 3, 4}
. R에서 사용하는 0 대신 3을 사용하고 싶다고 가정 해 보겠습니다.
회귀에서 이진 설명 변수를 사용하는 경우 R에게 특정 수준을 참조로 사용하도록하려면 어떻게해야합니까?
기본적으로 일정 수준을 사용하고 있습니다.
lm(x ~ y + as.factor(b))
와 함께 b {0, 1, 2, 3, 4}
. R에서 사용하는 0 대신 3을 사용하고 싶다고 가정 해 보겠습니다.
답변:
relevel()
기능을 참조하십시오 . 다음은 예입니다.
set.seed(123)
x <- rnorm(100)
DF <- data.frame(x = x,
y = 4 + (1.5*x) + rnorm(100, sd = 2),
b = gl(5, 20))
head(DF)
str(DF)
m1 <- lm(y ~ x + b, data = DF)
summary(m1)
이제 함수 를 사용 하여 요소 b
를 변경합니다 .DF
relevel()
DF <- within(DF, b <- relevel(b, ref = 3))
m2 <- lm(y ~ x + b, data = DF)
summary(m2)
모델은 서로 다른 참조 수준을 추정했습니다.
> coef(m1)
(Intercept) x b2 b3 b4 b5
3.2903239 1.4358520 0.6296896 0.3698343 1.0357633 0.4666219
> coef(m2)
(Intercept) x b1 b2 b4 b5
3.66015826 1.43585196 -0.36983433 0.25985529 0.66592898 0.09678759
within
,하지만 df$bR = relevel(df$b, ref=3)
.
다른 사람들은 relevel
데이터에 대한 모든 분석의 기본 수준을 변경하려는 경우 (또는 데이터 변경에 기꺼이 살고있는 경우) 최상의 솔루션 인 명령을 언급했습니다 .
데이터를 변경하지 않으려면 (한 번만 변경되지만 나중에 기본 동작을 다시 원할 경우) C
(대문자 참고) 함수 의 조합을 사용하여 대비를 설정 contr.treatments
하고 기준이 될 레벨을 선택하기위한 기본 인수입니다.
예를 들면 :
lm( Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris )
이 relevel()
명령은 질문에 대한 간단한 방법입니다. 그것이하는 일은 요소를 재정렬하여 참조 수준이 무엇이든 먼저되도록하는 것입니다. 따라서 요인 수준을 재정렬하는 것도 효과는 같지만 더 많은 제어를 제공합니다. 레벨 3,4,0,1,2를 원했을 것입니다. 그렇다면 ...
bFactor <- factor(b, levels = c(3,4,0,1,2))
이 방법을 선호하는 이유는 내 코드에서 참조가 무엇인지뿐만 아니라 다른 값의 위치도 (그 결과를 볼 필요없이) 쉽게 볼 수 있기 때문입니다.
참고 : 주문 요소로 만들지 마십시오. 순서가 지정된 요인과 순서가 지정된 요인은 동일하지 않습니다. lm()
그렇게하면 다항식 대비를 원한다고 생각할 수 있습니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 비슷한 문제가 있었고 다음을 발견했습니다.
lm(x ~ y + relevel(b, ref = "3"))
당신이 요청한 것을 정확하게 수행합니다.
as.factor()
예를 들어 다음을 사용하여 필요한 경우 결합 할 수 있다는 사실이 마음에 ...+relevel(as.factor(mycol), ref = "myref")+...
dplyr / tidyverse 버전을 찾는 사람들을 위해. Gavin Simpson 솔루션 구축 :
# Create DF
set.seed(123)
x <- rnorm(100)
DF <- data.frame(x = x,
y = 4 + (1.5*x) + rnorm(100, sd = 2),
b = gl(5, 20))
# Change reference level
DF = DF %>% mutate(b = relevel(b, 3))
m2 <- lm(y ~ x + b, data = DF)
summary(m2)
relevel()
나forcats::fct_relevel()
relevel
요인에 대해서만 작동합니다. fct_relevel
요인에 대해서만 작동합니다. 이름 AFAIK를 제외하고는 함수간에 차이가 없습니다. "변수가 요인 인 경우에도 사용할 수 있습니다. fct_relevel
"라는 것은 변수가 요인 이 아닌 경우 사용할 수 relevel
있지만 사실이 아님을 의미합니다.
b
사용하여 수준의 순서를 지정할 수 있습니다factor(b, levels = c(3,1,2,4,5))
.lm()
그러나 호출 외부의 데이터 처리 단계에서이 작업을 수행하십시오 . 아래의 내 대답은relevel()
함수를 사용 하므로 요인을 만든 다음 필요에 따라 참조 수준을 이동할 수 있습니다.