programing

R이 회귀 분석에서 지정된 요인 수준을 기준으로 사용하도록 강제하는 방법은 무엇입니까?

starjava 2023. 7. 16. 12:25
반응형

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)

이제 요인을 변경합니다.bDF을 이용하여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

이것이 오래된 질문이라는 것을 알지만, 비슷한 문제가 있었고 다음과 같은 것을 발견했습니다.

lm(x ~ y + relevel(b, ref = "3")) 

당신이 요청한 대로 합니다.

다른 사람들은 다음을 언급했습니다.relevel데이터에 대한 모든 분석의 기본 수준을 변경하려는 경우(또는 데이터를 변경하면서 사용할 의사가 있는 경우) 가장 적합한 솔루션인 명령입니다.

데이터를 변경하지 않으려는 경우(이것은 한 번 변경이지만 나중에 기본 동작을 다시 사용할 수 있습니다),C(대문자 참조) 대비를 설정하는 함수 및contr.treatments기준이 될 수준을 선택하기 위한 base 인수가 있는 함수입니다.

예:

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()그렇게 하면 다항식 대비를 원한다고 생각하기 시작할 수 있습니다.

수동으로 열에 태그를 지정할 수도 있습니다.contrasts회귀 함수에 의해 존중되는 것으로 보이는 속성:

contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol),
   base=which(levels(df$factorcol) == 'RefLevel'))

applyr/tydyverse 버전을 찾는 사람들을 위한 것입니다.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)

언급URL : https://stackoverflow.com/questions/3872070/how-to-force-r-to-use-a-specified-factor-level-as-reference-in-a-regression

반응형