R에서 lm(linear regression)와 같은 분석을 할 경우 해당 데이터프레임 종속변수(관측변수)를 제외한 값이 모두 동일할 경우가 있다. 이와 같은 데이터프레임을 체크 확인하는 방법을 알아보자.
우선 샘플 데이터프레임을 생성하자
model.df <- data.frame(
VALUE1 = c(0,0,0,0),
VALUE2 = c(11500,11500,11500,11500),
VALUE4 = c(28,28,28,28) ,
VALUE5 = c(2700,2700,2700,2700) ,
PRICE = c(6562238,6030590,6562238,4980528)
)
생성한 데이터를 확인해보면 아래와 같다.
VALUE1 VALUE2 VALUE4 VALUE5 PRICE
1 0 11500 28 2700 6562238
2 0 11500 28 2700 6030590
3 0 11500 28 2700 6562238
4 0 11500 28 2700 4980528
회귀분석할 종속변수 PRICE 값 이외는 모두 동일함을 알 수 있다.
이때 동일 유무를 확인할 수 있는 방법은 아래와 같다.
row.distinct.count <- length(levels(as.factor(rowMeans(model.df))))
데이터를 rowMeans함수로 평균을 구한 값들을 levels함수로 갯수를 알아내고 있다.
위 함수를 순차적으로 실행한 결과는 아래와 같다.
> rowMeans(model.df)
[1] 1315293.2 1208963.6 1315293.2 998951.2
> levels(as.factor(rowMeans(model.df)))
[1] "998951.2" "1208963.6" "1315293.2"
> length(levels(as.factor(rowMeans(model.df))))
[1] 3
결국 해당 데이터프레임의 반복되는 값의 level갯수는 3건 이상이다.
여기서 문제는 분석할 대상의 종속변수 PRICE가 포함되어 있음이다.
PRICE값을 제외할 필요가 있다.
그렇다면 위 코드를 아래와 같이 수정할 필요가 있다.
row.distinct.count <- length(levels(as.factor(data.frame(c=rowMeans( model.df[,!(names(model.df) %in% c('PRICE'))] ))$c)))
PRICE컬럼을 제거하는 코드가 추가되었다.
위 함수를 순차적으로 실행한 결과는 아래와 같다.
> model.df[,!(names(model.df) %in% c('PRICE'))]
VALUE1 VALUE2 VALUE4 VALUE5
1 0 11500 28 2700
2 0 11500 28 2700
3 0 11500 28 2700
4 0 11500 28 2700
> data.frame(c=rowMeans( model.df[,!(names(model.df) %in% c('PRICE'))] ))$c
[1] 3557 3557 3557 3557
> levels(as.factor(data.frame(c=rowMeans( model.df[,!(names(model.df) %in% c('PRICE'))] ))$c))
[1] "3557"
> length(levels(as.factor(data.frame(c=rowMeans( model.df[,!(names(model.df) %in% c('PRICE'))] ))$c)))
[1] 1
종속변수 PRICE를 제외하고는 데이터가 모두 동일함을 알 수 있다.
그러므로 해당 데이터는 분석 대상에서 제외할 필요가 있다고 판단할 수 있다.
'R' 카테고리의 다른 글
R evel함수활용 : String Source Code Execute (2) | 2014.01.17 |
---|---|
R 데이터프레임(DF) Select Column (0) | 2014.01.17 |
R 데이터프레임(DF) Group By Sum (2) | 2013.12.20 |