def sum( x ) a = 0 x.length.times { |i| a += x[ i ] } return a end def sum2( x ) a = 0 x.length.times { |i| a += x[ i ] * x[ i ] } return a end def sum_xy( x , y ) a = 0 x.length.times { |i| a += x[ i ] * y[ i ] } return a end def sr( x ) a = sum2( x ) - sum( x ) ** 2 / x.length.to_f return a end def sr2( x , y ) a = sum_xy( x , y ) - sum( x ) * sum( y ) / x.length.to_f return a end def reg_a( x , y ) a = sr2( x , y ) / sr( x ) return a end def reg_b( x , y ) b = sum( y ) / y.length.to_f - reg_a( x , y ) * sum( x ) / x.length.to_f return b end def r( x , y ) a = sr2( x , y ) / Math.sqrt( sr( x ) * sr( y ) ) return a end x = [ 7 , 6 , 4 , 2 , 5 ] y = [ 24 , 20 , 14 , 8 ,12 ] a = reg_a( x , y ) b = reg_b( x , y ) c = r( x , y ) printf( "配列xとyを回帰分析した時の傾きは%f\nです" , a ) printf( "配列xとyを回帰分析した時の切片は%f\nです" , b ) printf( "配列xとyを回帰分析した時の相関係数の二乗は%f\nです" , c*c )