我有大约90个变量存储在data [2-90]中。我怀疑其中约有4个与数据具有类似抛物线的相关性[1]。我想确定哪些具有相关性。有一种简单快捷的方法吗?

我试过建立这样的模型(我可以为每个变量i = 2:90循环执行):

y <- data$AvgRating
x <- data$Hamming.distance
x2 <- x^2

quadratic.model = lm(y ~ x + x2)

然后查看R ^ 2/系数以了解相关性。有更好的方法吗?

也许R可以使用90个变量构建回归模型,然后选择本身具有显着性的变量?那有什么可能吗?我可以在JMP中进行线性回归,但是我不确定我可以对R中的所有变量使用R进行非线性回归。因此,我正在手动尝试查看是否可以提前查看哪些关联。如果有一个函数可以使用的话,这将是有帮助的。

最佳答案

另一种选择是计算每对变量之间的相互信息得分。例如,使用infotheo package中的mutinformation函数,您可以执行以下操作:

set.seed(1)

library(infotheo)

# corrleated vars (x & y correlated, z noise)
x <- seq(-10,10, by=0.5)
y <- x^2
z <- rnorm(length(x))

# list of vectors
raw_dat <- list(x, y, z)


# convert to a dataframe and discretize for mutual information
dat <- matrix(unlist(raw_dat), ncol=length(raw_dat))
dat <- discretize(dat)

mutinformation(dat)

结果:
|   |        V1|        V2|        V3|
|:--|---------:|---------:|---------:|
|V1 | 1.0980124| 0.4809822| 0.0553146|
|V2 | 0.4809822| 1.0943907| 0.0413265|
|V3 | 0.0553146| 0.0413265| 1.0980124|

默认情况下,mutinformation()计算两个或多个变量之间的离散经验互信息分。如果您要处理连续数据,请将discretize()函数转换为离散值。

至少作为寻找诸如上述变量之间的非线性关系的第一步,这可能是有帮助的。

关于r - 在R中找到非线性相关性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38695991/

10-12 17:59