如何在Java发行版中转移数据

时间:2019-02-21 10:20:05

标签: java statistics distribution chi-squared

我正在用Java设计软件,其功能之一是计算分布中某些值的累积分布。

例如:一个国家的平均结婚年龄为28岁(这是分布中的平均值),我使用的分布是具有自由度(3)的卡方(ChiSquaredDistribution类),因为它类似于现实世界中婚姻分布的年龄。目标是如果用户键入他们的年龄,则输出将是基于该分布在该年龄(一年边界)结婚的大约百分比。输入:30年>>>输出:5.1%,输入:28年>>>输出:6%,输入:56年>>>输出:0.8%输入为int,输出为double

问题是,分配起始于(0),平均数是我认为(3),我编写的以下代码显示了从0岁到70岁结婚的可能性,我的问题是将其更改为18岁及18岁以上,以平均结婚年龄为准?

ChiSquaredDistribution x = new ChiSquaredDistribution(3); 
Random r = new Random();
for (int UserAtAge=0; UserAtAge<70; UserAtAge++) {
    System.out.println((x.cumulativeProbability(UserAtAge+1)-x.cumulativeProbability(UserAtAge))*100);  
}

为当前结果和预期结果附加了两个图像。任何代码和帮助将不胜感激。

当前结果

enter image description here

所需结果

enter image description here

1 个答案:

答案 0 :(得分:0)

通过从每个值中减去18来移动分布,因此18映射到0,28映射到10,70映射到52,依此类推。未移位的卡方的平均值是其自由度。使用卡方(3)可以得出平移数据的平均值为21,因此您需要将其提高到卡方(10)才能使平移平均值为28。

经过一些清理(小写的局部变量开始,r未使用),转换后的版本为:

ChiSquaredDistribution x = new ChiSquaredDistribution(10); 
for (int userAge=18; userAge<71; userAge++) {
    System.out.println((x.cumulativeProbability(userAge + 1 - 18) - x.cumulativeProbability(userAge - 18)) * 100);  
}