11 個のキーワードで学ぶ統計学入門 7、8 / 線形回帰と最小二乗法

  • Calculator の場合:

構文: LinRegBx Xリスト, Yリスト (または LinRegMx Xリスト, Yリスト)
実行結果:
f:id:ti-nspire:20180509104709p:plain:w400
 

  • Nspired Lua で実行する場合:
function ols(xlist, ylist)
   local temp1 = "{"..table.concat(xlist, ",").."}"
   local temp2 = "{"..table.concat(ylist, ",").."}"
   --math.eval("LinRegBx "..temp1..","..temp2)
   math.eval(string.format("LinRegBx %s, %s", temp1, temp2))
   return var.recall("stat.a"), var.recall("stat.b")
end

x = {1,2,3,4,5,6,7,8,9,10}
y = {1,2,3,4,5,6,7,8,9,10}
y_out = {1,2,3,4,5,6,7,8,9,50} 
y_rand = {1,-3,1,-1,4,0,3,0,-5,2}
function on.resize()
   local intercept, slope = ols(x, y)
   print(intercept, slope)
   local intercept, slope = ols(x, y_out)
   print(intercept, slope)
   local intercept, slope = ols(x, y_rand)
   print(intercept, slope)
end

実行結果:
f:id:ti-nspire:20180509111255p:plain
 

  • Lua だけで組む場合:
function ols(xlist, ylist)
   local num   = #xlist
   local sumX  = 0
   local sumY  = 0
   local sumXY = 0
   local sumX2 = 0
   for i = 1, num do
      sumX  = sumX  + xlist[i]
      sumY  = sumY  + ylist[i]
      sumXY = sumXY + xlist[i] * ylist[i]
      sumX2 = sumX2 + xlist[i]^2 
   end
   local b = (num * sumXY - sumX * sumY) / (num * sumX2 - sumX^2)
   local a = (sumY - b * sumX) / num
   return a, b
end

x = {1,2,3,4,5,6,7,8,9,10}
y = {1,2,3,4,5,6,7,8,9,10}
y_out = {1,2,3,4,5,6,7,8,9,50} 
y_rand = {1,-3,1,-1,4,0,3,0,-5,2}

local intercept, slope = ols(x, y)
print(intercept, slope)
local intercept, slope = ols(x, y_out)
print(intercept, slope)
local intercept, slope = ols(x, y_rand)
print(intercept, slope)

実行結果:
f:id:ti-nspire:20180509112630p:plain
――――――――――――――――――――――――――――――――――――
Wolfram の場合 (ここでは Fit[] 函数を使う):

xList = {1,2,3,4,5,6,7,8,9,10};
yList = {1,2,3,4,5,6,7,8,9,10}; 
yOut = {1,2,3,4,5,6,7,8,9,50} ; 
yRand = {1,-3,1,-1,4,0,3,0,-5,2}; 
Fit[Transpose[{xList,yList}],{x^0,x^1},x] 
Fit[Transpose[{xList,yOut}],{x^0,x^1},x]  
Fit[Transpose[{xList,yRand}],{x^0,x^1},x] 

実行結果:
f:id:ti-nspire:20180509134939p:plain:w400
――――――――――――――――――――――――――――――――――――
Excel の場合 (ここでは [近似曲線の追加] を使う。散布図上のどれか要素を右クリックし、[近似曲線の追加]、[線形近似] の順に選択する。[グラフに数式を表示する] チェックボックスをオンにすると数式も表示される):
f:id:ti-nspire:20180509115450p:plain:w600