无法在R 使用来自MASS的mvnorm

问题描述

问题:

我已经在6个月内对5个类别进行了抽样,在过去的几个月中,它们对某些环境活动的影响所占的比例变化如下:

| Month|         A|         B|         C|         D|         E|
|-----:|---------:|---------:|---------:|---------:|---------:|
|     1| 0.6666667| 0.3012821| 0.0320513| 0.0000000| 0.0000000|
|     2| 0.5603448| 0.1494253| 0.1408046| 0.1235632| 0.0258621|
|     3| 0.1962843| 0.0961228| 0.3400646| 0.2285945| 0.1389338|
|     4| 0.1135647| 0.0368034| 0.4090431| 0.2954784| 0.1451104|
|     5| 0.0799087| 0.0182648| 0.3812785| 0.3835616| 0.1369863|
|     6| 0.0854701| 0.0085470| 0.3760684| 0.4316239| 0.0982906|

在这里,您可以看到A和B下降了,而C,D和E上升了这种相关性:

|          A|          B|          C|          D|          E|
|----------:|----------:|----------:|----------:|----------:|
|  1.0000000|  0.9402901| -0.9885358| -0.9437185| -0.9358701|
|  0.9402901|  1.0000000| -0.9511070| -0.9612210| -0.8413999|
| -0.9885358| -0.9511070|  1.0000000|  0.9139291|  0.9559101|
| -0.9437185| -0.9612210|  0.9139291|  1.0000000|  0.7789632| 
| -0.9358701| -0.8413999|  0.9559101|  0.7789632|  1.0000000|

数据集由:

给出
Cor_By_Month <- structure(c(1,0.940290075149674,-0.988535776442558,-0.943718544223924,-0.935870083299231,1,-0.951106988627249,-0.961220998780756,-0.841399937722727,0.913929137201831,0.955910074676834,0.778963196453952,1),.Dim = c(5L,5L),.Dimnames = list(NULL,c("A","B","C","D","E")))

我想绘制模型的响应曲线,但我希望所有比例加1并具有适当的相关值,而不是将A从0更改为1,然后将其他类别保持为均值。 / p>

期望的解决方案

具有至少100个样本的数据帧,其中所有类别(A到E)在0到1之间变化,几个中间值,每行加1,变量之间的相关性保持在 Cor_By_Month 数据集:

我尝试过的事情:

使用来自MASS的mvnorm

我知道这不是处理此问题的最佳方法,因为它不一定是普通数据,但这是我发现的唯一方法:

所以:知道我的5个班级的平均值是:

Means <- c(0.283706542309262,0.101740888487065,0.279885087917025,0.243803624143928,0.0908638571427198)

相关性由 Cor_By_Month

给出

我尝试过:

out <- as.data.frame(mvrnorm(1000,mu = Means,Sigma = Cor_By_Month,empirical = T))

但是,当然,这些值遍地都是,尽管具有所需的相关值,但不符合我的0,而是符合1的值,以便尝试校正我按每个值的最小值和最大值进行缩放列:

  mins <- apply(out,2,min)
  maxs <- apply(out,max)
  out <- scale(out,center = mins,scale = maxs - mins)

所以现在我解决了我的2个问题之一,所有A到E的值都在0到1之间,但是我数据帧的所有行的总和值都超过了1。

为解决此问题,我尝试了以下操作:

out <- as.data.frame(mvrnorm(1000,mu = runif(n = 5),Sigma = Cor_By_Month_Polity,empirical = F)) 
  mins <- apply(out,scale = maxs - mins) %>% 
  as.data.frame() %>% 
  rowwise() %>% 
  mutate(Total = sum(c_across(V1:V5))) %>% 
  mutate_at(vars(V1:V5),~./Total) %>% 
  rowwise() %>% 
  mutate(Total = sum(c_across(V1:V5))) %>% 
  as.data.frame()

现在,所有内容都按行加1,但是任何比例的值都超过0.5并不常见,我尝试做300000,而值不超过0.54。

我确信对于我要做的事情有更好的解决方案

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...