R이 회귀에서 지정된 요인 수준을 참조로 사용하도록 강제하는 방법은 무엇입니까?
회귀에서 이진 설명 변수를 사용하는 경우 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
다른 사람들은 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"))
당신이 요청한 것을 정확하게 수행합니다.
contrasts
회귀 함수에서 존중하는 것처럼 보이는 속성으로 열에 수동으로 태그를 지정할 수도 있습니다 .
contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol),
base=which(levels(df$factorcol) == 'RefLevel'))
'programing tip' 카테고리의 다른 글
std :: shared_ptr 스레드 안전성 설명 (0) | 2020.08.24 |
---|---|
`if __name__ == '__main __'`루비에서 동일 (0) | 2020.08.24 |
Java에는 한때 Pair 클래스가 없었습니까? (0) | 2020.08.23 |
상위 디렉터리를 나타내는 Maven2 속성 (0) | 2020.08.23 |
CSS를 사용한 텍스트 테두리 (텍스트 테두리) (0) | 2020.08.23 |