<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90</id>
	<title>回帰分析 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90"/>
	<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90&amp;action=history"/>
	<updated>2026-06-06T20:51:54Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://monobook.org/w/index.php?title=%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90&amp;diff=3687&amp;oldid=prev</id>
		<title>imported&gt;MikeCAT: 作成</title>
		<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90&amp;diff=3687&amp;oldid=prev"/>
		<updated>2013-09-05T06:39:13Z</updated>

		<summary type="html">&lt;p&gt;作成&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;回帰分析&amp;#039;&amp;#039;&amp;#039;とは、データの関係をなるべくずれないように式で表すための手法である。&lt;br /&gt;
&lt;br /&gt;
==実装例==&lt;br /&gt;
(x,y)の関係をy=a*x+bという式で表すとき、全ての点について(a*x+b-y)の二乗を求め、その和が最小になるようなa,bを求める。&amp;lt;br /&amp;gt;&lt;br /&gt;
この実装では、x,yの組を1行に一個ずつコンマ区切りで入力する。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
	/*入力用*/&lt;br /&gt;
	char inputbuf[100000];&lt;br /&gt;
	char* comma;&lt;br /&gt;
	char* comma2;&lt;br /&gt;
	/*入力チェック用*/&lt;br /&gt;
	char* endptr;&lt;br /&gt;
	/*統計用*/&lt;br /&gt;
	int datanum=0;&lt;br /&gt;
	int ignorenum=0;&lt;br /&gt;
	/*計算用*/&lt;br /&gt;
	double x,y;&lt;br /&gt;
	double abkeisuu;&lt;br /&gt;
	double ateisuu;&lt;br /&gt;
	double b2keisuu;&lt;br /&gt;
	double bkeisuu;&lt;br /&gt;
	double teisuu;&lt;br /&gt;
	double b;&lt;br /&gt;
	double a;&lt;br /&gt;
	double keisuu[6]={0,0,0,0,0,0};&lt;br /&gt;
	/*&lt;br /&gt;
	  0:a^2&lt;br /&gt;
	  1:b^2 &lt;br /&gt;
	  2:ab&lt;br /&gt;
	  3:a&lt;br /&gt;
	  4:b&lt;br /&gt;
	  5:定数&lt;br /&gt;
	*/&lt;br /&gt;
	/*データ入力*/&lt;br /&gt;
	while(fgets(inputbuf,sizeof(inputbuf),stdin)) {&lt;br /&gt;
		/*入力データの解析*/&lt;br /&gt;
		/*改行を消す*/&lt;br /&gt;
		comma=strchr(inputbuf,&amp;#039;\n&amp;#039;);&lt;br /&gt;
		if(comma)*comma=0;&lt;br /&gt;
		/*一つ目のコンマ*/&lt;br /&gt;
		comma=strchr(inputbuf,&amp;#039;,&amp;#039;);&lt;br /&gt;
		if(comma==NULL) {&lt;br /&gt;
			/*コンマが一つもない*/&lt;br /&gt;
			ignorenum++;&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		*comma=0;&lt;br /&gt;
		/*二つ目のコンマ*/&lt;br /&gt;
		comma2=strchr(comma+1,&amp;#039;,&amp;#039;);&lt;br /&gt;
		if(comma2)*comma2=0;/*いらないデータは消す*/&lt;br /&gt;
		/*変換とデータチェック*/&lt;br /&gt;
		x=strtod(inputbuf,&amp;amp;endptr);&lt;br /&gt;
		if(*endptr!=0) {&lt;br /&gt;
			ignorenum++;&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		y=strtod(comma+1,&amp;amp;endptr);&lt;br /&gt;
		if(*endptr!=0) {&lt;br /&gt;
			ignorenum++;&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		/*係数を加える*/&lt;br /&gt;
		keisuu[5]+=y*y;&lt;br /&gt;
		keisuu[0]+=x*x;&lt;br /&gt;
		keisuu[1]+=1;&lt;br /&gt;
		keisuu[3]-=2.0*x*y;&lt;br /&gt;
		keisuu[2]+=2.0*x;&lt;br /&gt;
		keisuu[4]-=2.0*y;&lt;br /&gt;
		/*データ数を増やす*/&lt;br /&gt;
		datanum++;&lt;br /&gt;
	}&lt;br /&gt;
	/*計算*/&lt;br /&gt;
	/*&lt;br /&gt;
	  a^2+b^2+ab+a+b+1&lt;br /&gt;
	  a^2+(b+1)a+b^2+b+1→2a+(b+1)=0→2a=-b-1→a=-b/2-1/2&lt;br /&gt;
	*/&lt;br /&gt;
	if(keisuu[0]==0) {&lt;br /&gt;
		puts(&amp;quot;エラー：第一次0除算&amp;quot;);&lt;br /&gt;
		return 1;&lt;br /&gt;
	}&lt;br /&gt;
	abkeisuu=-keisuu[2]/2.0/keisuu[0];&lt;br /&gt;
	ateisuu=-keisuu[3]/2.0/keisuu[0];&lt;br /&gt;
	b2keisuu=keisuu[0]*abkeisuu*abkeisuu+keisuu[1]+keisuu[2]*abkeisuu;&lt;br /&gt;
	bkeisuu=keisuu[0]*2.0*abkeisuu*ateisuu+keisuu[2]*ateisuu+keisuu[3]*abkeisuu+keisuu[4];&lt;br /&gt;
	teisuu=keisuu[0]*ateisuu*ateisuu+keisuu[3]*ateisuu+keisuu[5];&lt;br /&gt;
	if(b2keisuu==0) {&lt;br /&gt;
		puts(&amp;quot;エラー：第二次0除算&amp;quot;);&lt;br /&gt;
		return 1;&lt;br /&gt;
	}&lt;br /&gt;
	b=-bkeisuu/2.0/b2keisuu;&lt;br /&gt;
	a=abkeisuu*b+ateisuu;&lt;br /&gt;
	/*結果の出力*/&lt;br /&gt;
	printf(&amp;quot;総行数：%d\n&amp;quot;,datanum+ignorenum);&lt;br /&gt;
	printf(&amp;quot;無視した行数：%d\n&amp;quot;,ignorenum);&lt;br /&gt;
	printf(&amp;quot;データの行数：%d\n&amp;quot;,datanum);&lt;br /&gt;
	if(b&amp;gt;=0) {&lt;br /&gt;
		printf(&amp;quot;y=%1.15gx+%1.15g\n&amp;quot;,a,b);&lt;br /&gt;
	} else {&lt;br /&gt;
		printf(&amp;quot;y=%1.15gx%1.15g\n&amp;quot;,a,b);&lt;br /&gt;
	}&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
入力例(無効なデータは無視される)&lt;br /&gt;
&amp;lt;pre&amp;gt;時刻[s],速さ[m/s]&lt;br /&gt;
0.05,0.70&lt;br /&gt;
0.15,1.60&lt;br /&gt;
0.25,2.57&lt;br /&gt;
0.35,3.53&lt;br /&gt;
0.45,4.51&amp;lt;/pre&amp;gt;&lt;br /&gt;
出力例&lt;br /&gt;
&amp;lt;pre&amp;gt;総行数：6&lt;br /&gt;
無視した行数：1&lt;br /&gt;
データの行数：5&lt;br /&gt;
y=9.55000000000001x+0.194499999999998&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==関連項目==&lt;br /&gt;
* [[最小自乗法]]&lt;br /&gt;
* [[重回帰分析]]&lt;/div&gt;</summary>
		<author><name>imported&gt;MikeCAT</name></author>
	</entry>
</feed>