set.seed(928)
x1 = rnorm(20)
x2 = x1 * rnorm(20, mean = 1, sd = .8)
# A case when NA's artifically inflate the correlation,
# so penalization makes sense:
myfun(x1, x2, idx_rm = c(13, 19))
# A case when NA's DEflate the correlation,
# so penalization may be misleading:
myfun(x1, x2, idx_rm = c(6, 14))
# When there are a lot of NA's, penalization is much stronger
myfun(x1, x2, idx_rm = 7:20)
# Some NA's in x1:
x1[1:5] = NA
myfun(x1, x2, idx_rm = c(6, 14))
3 回答
需要注意的一件事是对一个点是否缺失进行逻辑回归 . 如果没有任何关系,则可以支持假设缺少的值必须包含任何内容,并且可以在没有缺失值的情况下执行计算 . R中的
glm
可用于逻辑回归 .另外,另请注意,请参阅
cor
的use="pairwise.complete.obs"
参数,该参数可能适用于您,也可能不适用于您 .编辑:我在重新阅读问题的基础上修改了这个答案 .
我的感觉是,当有一个数据空间中有一个时间序列显示NA时,该对不能用于计算相关性,因为此时没有信息 . 由于没有关于这一点的信息,因此无法知道它将如何影响相关性 . 指定NA减少相关性似乎很棘手,如果在某一点上存在观察,这可能很容易改善相关性 .
如果存在NA,则R中的默认行为是返回NA的相关性 . 可以使用'use'参数调整此行为 . 有关更多详细信息,请参阅该函数的文档 .
正如Paul Hiemstra在答案中指出的那样,没有办法知道相关性是否会更高或更低而没有缺失值 . 但是,对于某些应用,可能适合惩罚观察到的非匹配缺失值的相关性 . 例如,如果我们比较两个单独的编码器,我们可能希望编码器B说“NA”当且仅当编码器A也说“NA”时,我们希望他们的非NA值相关 .
在这些假设下,惩罚不匹配缺失值的一种简单方法是计算完整案例的相关性,并乘以在其NA状态方面匹配的观察的比例 . 惩罚期限可以定义为:
1 - mean((is.na(coderA) & !is.na(coderB)) | (!is.na(coderA) & is.na(coderB)))
. 一个简单的例子如下 .运行一个简单的模拟来说明缺失值和惩罚的可能影响: