2012-10-19 2 views
1

R의 factor() 명령은 계층 구조 수준의 범주 형 변수에만 사용됩니까?

요인 (교육) 또는 요인 (연령대)
을 R로 사용할 때 나는 혼란 스럽습니다. 범주 별 정렬 데이터에 사용됩니까? 아니면 계층 구조가없는 단순한 범주 형 데이터를 사용할 수 있습니까?

나는 이것이 매우 기초적이라는 것을 알고있다. 나는 정말로 약간의 설명이 필요하다.

+2

'? factor '를 참조하십시오. 요인의 정렬 여부를 지정할 수 있습니다. – A5C1D2H2I1M1N2O1R2T1

+1

@mrdwab 이미 확인했는데 막연합니다. 다음과 같은 네 가지 옵션이 있습니다.

은 .factor, is.ordered, as.factor
입니다. 각 옵션에 대한 정의를 제게 줄 수 있습니까? cox ph를 모델링하려고했습니다. 교육 및 연령 집단에서 그 요소 코드를 사용하는 예를 보았습니다. 종교 카테고리에서도 사용할 수 있습니까? – leian

+0

"간결함"만큼 그리 많지 않습니다. 당신의 더 큰 질문에 관해서는, 당신이 작업하는 어떤 범주 형 변수에 대해서도 (주문 여부와 관계없이) 요인을 사용할 수 있어야합니다. 교육, 연령 집단, 종교 (처음 ​​두 명은 주문할 수 있고 나머지 세 명은 그렇지 않을 수도 있음). –

답변

6

나는 여기에 분명한 질문을 정말로 볼 수 없기 때문에 간단한 예제만으로도 충분할 것입니다.

다음과 같은 데이터가 있다고 가정 해보십시오.

set1 <- c("AA", "B", "BA", "CC", "CA", "AA", "BA", "CC", "CC") 

이 데이터를 고려해야합니다.

f.set1 <- factor(set1) 

출력을 살펴 보겠습니다. R은 레벨을 알파벳순으로 나열했지만 계층 구조를 의미하지는 않습니다 ("레벨"라인 참조).

f.set1 
# [1] AA B BA CC CA AA BA CC CC 
# Levels: AA B BA CA CC 
is.ordered(f.set1) 
# [1] FALSE 

그러나, 고려 데이터에 as.numeric를 사용하는 것은 계층 적 생각으로 당신을 속일 수 있습니다. "5"전에 오는 "4"아래의 출력 및 참고 또한 단순히 table(set1)을 한 경우도 발생 table(f.set1)의 알파벳 순으로 출력 (인치

as.numeric(f.set1) 
# [1] 1 2 3 5 4 1 3 5 5 
table(f.set1) 
# f.set1 
# AA B BA CA CC 
# 2 1 2 1 3 

이의 지금 우리가 사용 때 발생과 비교해 보자 참고 levels 인수와 함께 ordered 인수. levels 플러스 ordered = TRUE 사용이 범주 형 데이터 (우리가 데이터를 입력했는지하지 알파벳 또는 순서) levels에 의해 지정된 순서, 계층 것을 우리에게 알려줍니다.

o.set1 <- factor(set1, 
       levels = c("CA", "BA", "AA", "CC", "B"), 
       ordered = TRUE) 

결과를 보면 심지어 이제 우리에게 계층 구조가 표시됩니다.

o.set1 
# [1] AA B BA CC CA AA BA CC CC 
# Levels: CA < BA < AA < CC < B 
is.ordered(o.set1) 
# [1] TRUE 

으로이 기능을 as.numerictable을한다.

as.numeric(o.set1) 
# [1] 3 5 2 4 1 3 2 4 4 
table(o.set1) 
# o.set1 
# CA BA AA CC B 
# 1 2 2 3 1 

그래서, 그 자체로 factor() 그냥 본질적 범주 형 데이터의 비 계층 분류 요소를 생성, 요약하기, factor()levels이고 ordered = TRUE 인수는 계층 적 카테고리를 만듭니다.

주문한 요인을 직접 생성하려면 ordered()을 사용하십시오. 범주의 순서는 여전히 지정해야합니다

ordered(set1, levels = c("CA", "BA", "AA", "CC", "B")) 
2

당신은 ordered(x) 또는 factor(x, ordered=TRUE) 함께 만들어 요인 플래그를 명령 할 수있다.

정렬 된 요소 요소에서 그들의 수업 시간에 차이가 있지만, 방법과 모델 피팅 기능은 매우 다르게 두 개의 클래스를 치료 : ?factor의 "세부 사항"섹션이 있음을 설명한다.

당신이 두 개체의 특성 비교하여 그 인용의 첫 번째 부분을 (그들은 자신의 클래스 만 다른 것을) 확인할 수 있습니다 (

f <- factor(letters[3:1], levels=letters[3:1]) 
of <- ordered(letters[3:1], levels=letters[3:1]) 
attributes(f) 
# $levels 
# [1] "c" "b" "a" 
# 
# $class 
# [1] "factor" 
attributes(of) 
# $levels 
# [1] "c" "b" "a" 
# 
# $class 
# [1] "ordered" "factor" 

다양한 요소 처리 R 기능을 의 두 번째 부분 인 해당 질문의의 "메서드 및 모델 피팅 함수")는 is.ordered()을 사용하여 "ordered" 클래스 표시기의 존재 여부를 테스트하고 순서가 지정된 인수를 순서가 지정되지 않은 식별자와 다르게 처리하는 지시문으로 사용합니다. 다음은 몇 가지 예입니다.

## The print method for factors. (Type 'print.factor' to see the function's code) 
print(f) 
# [1] c b a 
# Levels: c b a 
print(of) 
# [1] c b a 
# Levels: c < b < a 

## The contrasts function. (Type 'contrasts' to see the function's code.) 
contrasts(of) 
#     .L   .Q 
# [1,] -7.071068e-01 0.4082483 
# [2,] 4.350720e-18 -0.8164966 
# [3,] 7.071068e-01 0.4082483 
contrasts(f) 
# b a 
# c 0 0 
# b 1 0 
# a 0 1 
+0

좋은 답변은이 답변에 포함되어 있습니다. – A5C1D2H2I1M1N2O1R2T1

+0

@ mrdwab - 고마워. 나는 당신이 당신의 코멘트를 너무 멋지게 확장하는 것으로 바쁘다는 것을 알았 더라면 답을 찾지 못했을 것입니다. –