我有大约90个变量存储在数据[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对所有变量进行非线性回归.因此,我手动试图看看我是否能提前看到哪些是相关的.如果有一个功能可以使用它会很有帮助.
最佳答案 另一种选择是计算每对变量之间的互信息分数.例如,使用
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()函数.
这可能至少有助于寻找变量之间的非线性关系,例如上面描述的那样.