生成具有高相关系数的值集

机器算法验证 相关性
2022-03-10 16:49:55

如果这太简单了,请道歉。我无法让更高级的 r-help 小组做出回应。

我计划通过测量两组实际值的相关系数来表征工作负载,但在此之前我希望生成两组具有高系数和低系数的样本值。我想将两者都绘制在同一张图中,以便我可以看到高度相关的值(峰和谷)。我使用 R 并且了解 rseek。

如果有任何特定的 R 书籍可以帮助我进行容量规划工作,我会购买它。

目前,生成一个与现有变量具有定义相关性的随机变量对我来说有点太先进了。

注意:我要绘制的两组值是相关的,因为我正在绘制 CPU 使用率和吞吐量数。因此,如果字节数增加,CPU 使用率可能会增加。两者都是正值。因此,如果相关性很高,两者要么一起增加,要么一起减少。

谢谢。

4个回答

例如,您可以从二元正态分布生成数据。方差-协方差矩阵的非对角项是协方差。在 R 中,这可以通过rmvnorm轻松完成。

示例 生成实现,其中 这样即1000X=(X1,X2)N(μ,Σ)

μ=(1,5),Σ11=V(X1)=0.7,Σ22=V(X2)=0.1
Σ12=Σ21=Cov(X1,X2)Cor(X1,X2)=0.85

> #------load the package------
> library(mvtnorm)
> #----------------------------
> 
> #------compute the covariance such that cor(X1, X2) = 0.85------
> covariance <- 0.85 * sqrt(0.7) * sqrt(0.1)
> #---------------------------------------------------------------
> 
> #------variance-covariance matrix------
> sigma <- matrix(c(0.7, covariance, covariance, 0.1), nrow=2, byrow=TRUE)
> sigma
          [,1]      [,2]
[1,] 0.7000000 0.2248889
[2,] 0.2248889 0.1000000
> #--------------------------------------
> 
> #------data generation------
> test <- rmvnorm(n=1000, mean=c(-1, 5), sigma=sigma)
> #---------------------------
> 
> #------compute the empirical correlation on this particular data------
> cor(test[, 1], test[, 2])
[1] 0.8478849
> #---------------------------------------------------------------------

注意:您还可以根据线性回归模型生成数据:X2=a+bX1+ϵ

其他人给了你代码。这背后有一个想法。

产生X,然后让Y=X+Z, 在哪里Z独立于X.

如果var(Z)比较小var(X)那么之间的相关性XY会很高。如果var(Z)比较大var(X)那么之间的相关性XY会很低。

library("MASS")
highCor<-matrix(c(1,0.9,0.9,1),2,2)
lowCor<-matrix(c(1,0.1,0.1,1),2,2)
x_hc<-mvrnorm(100,rep(0,2),highCor)
x_lc<-mvrnorm(100,rep(0,2),lowCor)
plot(rbind(x_hc,x_lc),type="n")
points(x_lc,pch=16,col="green")#low correlation in green
points(x_hc,pch=16,col="blue") #high correlation in blue

这里给出的答案以及对上一篇文章的检查答案为您提供了很多有效的方法来做到这一点。我的建议与 ocram 上面给出的 NB 相同。取一个线性函数Y=a+bX并添加一个误差项 值较小这将生成一对具有高相关性的随机变量。要生成一对相关性较低的变量,只需为取一个较大的值。N(0,σ)σσ2