Как перенести данные в дистрибутив в Java - PullRequest
0 голосов
/ 21 февраля 2019

Я занимаюсь разработкой программного обеспечения на Java, одной из его функций является вычисление совокупного распределения определенного значения в распределении.

Например: средний возраст вступления в брак в стране 28 лет (что является среднимв распределении), распределение, которое я использую, chi-square (class ChiSquaredDistribution) со степенью свободы (3), так как оно напоминает возраст при распределении брака в реальном мире.

Моя цель: если пользователь введет свой возраст, результат будет приблизительным процентом их вступления в брак в этом возрасте (граница одного года) на основе этого распределения.что-то вроде: input : 30 years >>> output : 5.1%, input : 28 years>>> output :6%, input : 56 years>>> output :0.8%.Входное значение int, выходное значение double

проблема в том, что распределение начинается с (0), а среднее значение, по-моему, (3) по умолчанию, следующий код, который я написал, отображает вероятность брака с возраста 0до 70, мой вопрос заключается в том, как сдвинуть его к 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);  
}

Два изображения прилагаются для текущих результатов и ожидаемых результатов.Любой код и помощь будут высоко оценены.

См. текущие результаты и желаемые результаты

1 Ответ

0 голосов
/ 21 февраля 2019

Сдвиньте свое распределение, вычтя 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);  
}
...