在给定数字向量的R中是否有一个函数,返回另一个向量,其中标准单位对应于每个值?
其中......标准单位:一个值是多少个SD +或 - 来自平均值
例:
x <- c(1,3,4,5,7) # note: mean = 4, sd = 2
foo(x)
[1] -1.5 -0.5 0.0 0.5 1.5
Run Code Online (Sandbox Code Playgroud)
这个(虚构的)"su"功能是否已包含在包中?
谢谢.
我正在为我的数据建立一个相关矩阵,看起来像这样
df <- structure(list(V1 = c(56, 123, 546, 26, 62, 6, NA, NA, NA, 15
), V2 = c(21, 231, 5, 5, 32, NA, 1, 231, 5, 200), V3 = c(NA,
NA, 24, 51, 53, 231, NA, 153, 6, 700), V4 = c(2, 10, NA, 20,
56, 1, 1, 53, 40, 5000)), .Names = c("V1", "V2", "V3", "V4"), row.names = c(NA,
10L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
这给出了以下数据框:
V1 V2 V3 V4
1 56 21 NA 2
2 123 231 NA 10 …Run Code Online (Sandbox Code Playgroud) 假设我们有两个数字向量x和y.之间的Pearson相关系数x和y由下式给出
cor(x,y)
如何才能自动仅考虑计算中的一部分(x和y90%)以最大化相关系数?
我有两个非常大的矩阵(60x25000),我想计算两个矩阵之间的列之间的相关性.例如:
corrVal(1) = corr(mat1(:,1), mat2(:,1);
corrVal(2) = corr(mat1(:,2), mat2(:,2);
...
corrVal(i) = corr(mat1(:,i), mat2(:,i);
Run Code Online (Sandbox Code Playgroud)
对于较小的矩阵,我可以简单地使用:
colCorr = diag( corr( mat1, mat2 ) );
Run Code Online (Sandbox Code Playgroud)
但这对于非常大的矩阵不起作用,因为我的内存不足.我已经考虑过切割矩阵来计算相关性然后组合结果,但是计算列组合之间的相关性似乎是一种浪费,我实际上并不感兴趣.
有没有快速的方法直接计算我感兴趣的东西?
编辑:我过去使用了一个循环,但它只是缓慢的方式:
mat1 = rand(60,5000);
mat2 = rand(60,5000);
nCol = size(mat1,2);
corrVal = zeros(nCol,1);
tic;
for i = 1:nCol
corrVal(i) = corr(mat1(:,i), mat2(:,i));
end
toc;
Run Code Online (Sandbox Code Playgroud)
这需要约1秒钟
tic;
corrVal = diag(corr(mat1,mat2));
toc;
Run Code Online (Sandbox Code Playgroud)
这需要约0.2秒
我试图找到一种从几个二项分布生成相关随机数的方法.
我知道如何使用正态分布(使用mvrnorm),但我找不到适用于二项式的函数.
我正在尝试使用下面的代码计算时间序列中的样本窗口的自相关.我正在对该窗口应用FFT,然后计算实部和虚部的大小并将虚部设置为零,最后对其进行逆变换以获得自相关:
DoubleFFT_1D fft = new DoubleFFT_1D(magCnt);
fft.realForward(magFFT);
magFFT[0] = (magFFT[0] * magFFT[0]);
for (int i = 1; i < (magCnt - (magCnt%2)) / 2; i++) {
magFFT[2*i] = magFFT[2*i] * magFFT[2*i] + magFFT[2*i + 1] * magFFT[2*i + 1];
magFFT[2*i + 1] = 0.0;
}
if (magCnt % 2 == 0) {
magFFT[1] = (magFFT[1] * magFFT[1]);
} else {
magFFT[magCnt/2] = (magFFT[magCnt-1] * magFFT[magCnt-1] + magFFT[1] * magFFT[1]);
}
autocorr = new double[magCnt];
System.arraycopy(magFFT, 0, autocorr, 0, magCnt);
DoubleFFT_1D …Run Code Online (Sandbox Code Playgroud) 我有2个阵列.
a1 = [1,2,4]
a2 = [3,4,5]
Run Code Online (Sandbox Code Playgroud)
我如何使用python找到这两个数组之间的相关性.
在matlab中,你会这样做:
corr(a1,a2)
Run Code Online (Sandbox Code Playgroud)
如何在python中执行此操作?
如果这些值按组存储在data.table的单个列中(除了将data.table转换为矩阵之外),是否有一种优雅计算值之间相关性的方法?
library(data.table)
set.seed(1) # reproducibility
dt <- data.table(id=1:4, group=rep(letters[1:2], c(4,4)), value=rnorm(8))
setkey(dt, group)
# id group value
# 1: 1 a -0.6264538
# 2: 2 a 0.1836433
# 3: 3 a -0.8356286
# 4: 4 a 1.5952808
# 5: 1 b 0.3295078
# 6: 2 b -0.8204684
# 7: 3 b 0.4874291
# 8: 4 b 0.7383247
Run Code Online (Sandbox Code Playgroud)
有效的东西,但需要组名作为输入:
cor(dt["a"]$value, dt["b"]$value)
# [1] 0.1556371
Run Code Online (Sandbox Code Playgroud)
我正在寻找更多类似的东西:
dt[, cor(value, value), by="group"]
Run Code Online (Sandbox Code Playgroud)
但这并没有给我我追求的相关性.
对于具有正确结果的矩阵,这是同样的问题.
set.seed(1) # reproducibility
m <- matrix(rnorm(8), ncol=2)
dimnames(m) <- list(id=1:4, …Run Code Online (Sandbox Code Playgroud) 我正在寻找很多,但直到现在才找到我需要的东西.我有两个整数arrayas int [] x和int [] y.我想在这两个整数数组之间找到简单的线性相关,它应该将结果返回为double.在java中你知道提供这个或任何代码片段的任何库函数吗?
看来,corrcoef从numpy抛出RuntimeWarning当一个恒定的列表传递给corrcoef()函数,例如下面的代码抛出一个警告:
import numpy as np
X = [1.0, 2.0, 3.0, 4.0]
Y = [2, 2, 2, 2]
print(np.corrcoef(X, Y)[0, 1])
Run Code Online (Sandbox Code Playgroud)
警告 :
/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py:3003: RuntimeWarning: invalid value encountered in true_divide
c /= stddev[:, None]
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么当其中一个列表是常量时抛出此错误,以及如何在将常量列表传递给函数时防止此错误.
correlation ×10
r ×5
arrays ×2
java ×2
matrix ×2
python ×2
data.table ×1
fft ×1
int ×1
math ×1
matlab ×1
mean ×1
na ×1
numpy ×1
random ×1
statistics ×1
time-series ×1
vector ×1