2016-08-22 10 views
0

「男性」と「女性」のような同じ情報を含むデータセットに2つの変数があるとします。 2つの列に同じ情報が含まれていることをテストすることで、そのうちの1つを削除できますか?R:変数に同じ情報が含まれているかどうかをテストする

私はそれらを含む行列のランクを調べることを考えましたが、明らかにそのような行列は完全にランク付けされていますが、列は明らかに互いに依存しています。

EDIT:

M F 
1 0 
1 0 
0 1 
0 1 
1 0 

が明らかに同一の情報が、これらの二つの変数内に含まれている:私は、次のような2つの変数を意味します。それをどうやってテストするのですか?

+1

こんにちはノア、あなたは何を意味するの例を挙げることができますか?列が同一(同じ値、同じ順序)であること、または同じ要素レベルを持つことだけを意味しますか? –

+2

行列の階数を使用する場合は、1の列を追加する必要があります。これを追加すると、3つの列があっても、結果の行列のランクは3ではなく2になります。 – Dason

+2

提示された例では、それらは1または-1の相関関係を持ちますので、 'apply(cor(df)、1、function(x){any(abs(x)== 1) }) 'がありますが、倍数がある場合は、それらがどのようにペアになっているかを調べるために' cor(df) 'を調べなければなりません。 – alistaire

答えて

0

編集

あなたの明確化に基づいて、例えば、データ列の間で正と負の相関を検出するためのペアワイズ相関関係を使用することができます。

# create example data matrix matrix; add a fourth column that is inverse 
# of the third one 
> set.seed(1) 
> x <- matrix(sample(0:1, 15, replace=TRUE), ncol=3) 
> x <- cbind(x, ifelse(x[,3] == 0, 1, 0)) 
> x 
    [,1] [,2] [,3] [,4] 
[1,] 0 1 0 1 
[2,] 0 1 0 1 
[3,] 1 1 1 0 
[4,] 1 1 0 1 
[5,] 0 0 1 0 

次に、相関関係を構築しますマトリックス。自己相関を無視するため、対角は0に設定されます。

次に、各列をテストして、他の列との相関の最大絶対値が1に等しいかどうかを確認します。これは列に同じ情報が含まれていることを示します。

> cormat <- cor(x) 
> diag(cormat) <- 0 
> apply(cormat, 2, function(x) { max(abs(x)) == 1 }) 
[1] FALSE FALSE TRUE TRUE 
+0

同じ列を意味するわけではありません。たとえば、v1 = 1 - v2のような列を意味します。 – Noah

+0

2つの列間の相関関係を考慮しましたか? –

+0

@ノア、明確化を反映するように更新。上記は私の元の答えからの2番目の提案に基づいています。 –

-1

多分このようなものでしょうか?

x = rep(c("Male"), each = 10) 
y = rep(c("Female"),each = 10) 
fm = matrix(data = c(x,y), ncol = 2) 

fm[,1] == fm[,2] 
+0

いいえ、それは、ある列の各値が他の列の対応する値と等しいかどうかをテストするだけです。私は変数が情報の中で重複していて、価値が同じではないかどうかをテストしたい。 – Noah

関連する問題