假設在一個包含相同信息的數據集中有兩個變量,例如「男性」和「女性」(假設只有2個性別且沒有缺失數據)。我如何測試兩列包含相同的信息,從而允許我刪除其中的一個?R:測試變量是否包含相同的信息
我想過檢查包含它們的矩陣的排名,但顯然這樣的矩陣是滿秩的,即使列明顯依賴於對方。
編輯:我的意思是兩個變量,如下列:
M F
1 0
1 0
0 1
0 1
1 0
顯然同樣的信息包含這兩個變量中。我該如何測試?
假設在一個包含相同信息的數據集中有兩個變量,例如「男性」和「女性」(假設只有2個性別且沒有缺失數據)。我如何測試兩列包含相同的信息,從而允許我刪除其中的一個?R:測試變量是否包含相同的信息
我想過檢查包含它們的矩陣的排名,但顯然這樣的矩陣是滿秩的,即使列明顯依賴於對方。
編輯:我的意思是兩個變量,如下列:
M F
1 0
1 0
0 1
0 1
1 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
其次,構建相關矩陣。對角線因爲忽略自相關而被設置爲零。
然後,我們測試每個列以查看與其他列的相關性的最大絕對值是否等於1,這表示列中包含相同的信息。
> cormat <- cor(x)
> diag(cormat) <- 0
> apply(cormat, 2, function(x) { max(abs(x)) == 1 })
[1] FALSE FALSE TRUE TRUE
我不是指相同的列,我的意思是列在哪裏,例如,v1 = 1 - v2 – Noah
您是否考慮過使用兩列之間的相關性? –
@Noah,更新以反映澄清。以上是基於我原來的答案的第二個建議。 –
也許這樣的事?
x = rep(c("Male"), each = 10)
y = rep(c("Female"),each = 10)
fm = matrix(data = c(x,y), ncol = 2)
fm[,1] == fm[,2]
不,這只是測試一列中的每個值是否等於另一列中的相應值。我想測試變量是否在信息中是多餘的,而不是在價值上相等。 – Noah
嗨,諾亞,你能舉個例子說明你的意思嗎?你的意思是這些列是相同的(相同的值,相同的順序),或者說它們具有相同的因子水平? –
如果你想使用矩陣的等級,你需要添加一列1。如果添加該值,那麼即使有三列,結果矩陣的秩仍然只有2而不是3。 – Dason
對於所給出的示例,它們將具有1或-1的相關性,因此您可以使用apply(cor(df),1,function(x){any(abs(x)== 1) })',但如果有多個,你必須去看'cor(df)'來弄清楚它們是如何配對的。 – alistaire