回帰直線を求めるJavaのサンプルプログラムをまとめています。
このページの目次です。
回帰直線は以下の式で表現されます。
回帰直線を推定するJavaのプログラムのコードです。 統計の知識に関しては、『多変量解析法入門 (ライブラリ新数学大系) 』(永田靖)の第4章 単回帰分析を参考にしています。
回帰直線の計算を行うサンプルプログラムです。
計算を行うクラスです。
import java.util.ArrayList;
import java.util.List;
/**
* 計算クラス
*/
public class Calculator {
/**
* 切片を計算する
* @param itemXi 項目リスト(Xi)
* @param itemYi 項目リスト(Yi)
* @return 結果
*/
public Double section(final List<Double> itemsXi, final List<Double> itemsYi) {
Double xbar = average(itemsXi);
Double ybar = average(itemsYi);
Double bata1 = regressionCoefficient(itemsXi, itemsYi);
return ybar - (bata1 * xbar);
}
/**
* 回帰係数を計算する
* @param itemXi 項目リスト(Xi)
* @param itemYi 項目リスト(Yi)
* @return 結果
*/
public Double regressionCoefficient(final List<Double> itemsXi, final List<Double> itemsYi) {
Double sxy = deviationSumOfProduct(itemsXi, itemsYi);
Double sxx = sumOfSquares(itemsXi);
return sxy / sxx;
}
/**
* 偏差積和を計算する
* @param itemXi 項目リスト(Xi)
* @param itemYi 項目リスト(Yi)
* @return 結果
*/
public Double deviationSumOfProduct(final List<Double> itemsXi, final List<Double> itemsYi) {
List<Double> itemsXiYi = new ArrayList<>();
int n = itemsXi.size();
for (int i = 0; i < n; i++) {
itemsXiYi.add(itemsXi.get(i) * itemsYi.get(i));
}
Double xiyiSum = sum(itemsXiYi);
Double xiSum = sum(itemsXi);
Double yiSum = sum(itemsYi);
return xiyiSum - ((xiSum * yiSum) / n);
}
/**
* 平方和を計算する
* @param items 項目リスト
* @return 結果
*/
public Double sumOfSquares(final List<Double> items) {
Double xbar = average(items);
List<Double> squares = new ArrayList<>();
for (Double item : items) {
Double sqare = (item - xbar) * (item - xbar);
squares.add(sqare);
}
return sum(squares);
}
/**
* 平均値を計算する
* @param items 項目リスト
* @return 結果
*/
public Double average(final List<Double> items) {
return sum(items) / items.size();
}
/**
* 総和を計算する
* @param items 項目リスト
* @return 結果
*/
public Double sum(final List<Double> items) {
Double result = 0.0;
for (Double item : items) {
result += item;
}
return result;
}
}
テスト用のクラスです。
import java.util.ArrayList;
import java.util.List;
/**
* サンプルのテスト用クラス
*/
public class SampleTest {
private static double[] xi = {
4.5, 4.2, 4.0, 4.2, 4.3, 3.7, 3.9, 3.7, 3.6, 4.8,
4.7, 3.8, 4.0, 3.7, 4.0, 4.4, 3.8, 4.1, 5.0, 3.4};
private static double[] yi = {
14.2, 15.2, 16.9, 15.5, 15.7, 18.0, 17.1, 17.5, 18.1, 13.6,
13.8, 17.0, 16.9, 18.2, 16.3, 14.7, 17.4, 15.4, 12.9, 18.7};
public static void main(String[] args) {
List<Double> itemsXi = prepareTestData(xi);
List<Double> itemsYi = prepareTestData(yi);
Calculator calc = new Calculator();
Double beta0 = calc.section(itemsXi, itemsYi);
Double bata1 = calc.regressionCoefficient(itemsXi, itemsYi);
System.out.println("回帰係数の推定(β1)\t:" + bata1);
System.out.println("切片の推定(β0)\t:" + beta0);
String mark = " + ";
if (bata1 < 0) {
mark = " ";
}
System.out.println("回帰直線の推定(μ)\t:μ = " + beta0 + mark + bata1 + "x");
}
private static List<Double> prepareTestData(double[] sample) {
List<Double> items = new ArrayList<>();
for (double data : sample) {
items.add((double) data);
}
return items;
}
}
実行すると以下のように表示されます。
回帰係数の推定(β1) :-3.906050029086572 切片の推定(β0) :32.13074461896407 回帰直線の推定(μ) :μ = 32.13074461896407 -3.906050029086572x
参考にしている書籍の情報をまとめています。
『入門 統計解析法』の基本情報です。
以下は『多変量解析法入門』の基本情報です。
もっと知識を広げるための参考です。
Javaで学ぶ計算プログラムの入門コンテンツをテーマに記事まとめています。 簡単な平均値の計算プログラムから知識を補足しつつ系統立てて説明しています。 標準偏差、相関係数、連立方程式の解法プログラム、回帰分析などの統計解析などの計算プログラムを取り扱っています。
Javaとは?から言語の枠を超えるところまで、Java言語についてまとめています。
スポンサーリンク
サイト内のページ
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
開発環境
Ant
/Burp
/Eclipse
/Fiddler
/gcc
/gdb
/Git
/g++
/JDK
/JMeter
/JUnit
/Teraterm
/ZAP
技術・仕様
Ajax
/CORBA
/Jakarta EE(旧称J2EE、Java EE)
/JNI
ライブラリ/Framework/CMS
bootstrap
/jQuery
/FuelPHP
/Lucene
/MyBatis
/Seasar2
/Spring
/Struts
/WordPress
Web API
Google Maps
ITインフラ
OSとミドルウェア
Linux
/Windows
/シェル
ActiveMQ
/Tomcat
/MariaDB
/MySQL
/Nagios
/Redis
/Solr
ITインフラ
セキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
216.73.216.101
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved.