问题描述
问题:
我已经在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 (将#修改为@)