新しく発言する  EXIT  インデックスへ
高校数学「統計とコンピュータ」

  高校数学「統計とコンピュータ」 山中和義 2008/01/24 16:09:40 
  つづき 山中和義 2008/01/24 16:12:39 
   └つづき2 山中和義 2008/01/24 16:13:40  (修正2回)

  高校数学「統計とコンピュータ」 山中和義 2008/01/24 16:09:40   ツリーへ

高校数学「統計とコンピュータ」  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/24 16:09:40
プログラム言語での必要性もあろうかと思いサブルーチンをつくってみました。


!統計関数

!変数 N: 個数。※1以上
!配列 A(i): 対象の数値。※個数はNとする。

!作業変数は、i,j,ma,mb,s


!関数名をEXCEL準拠

FUNCTION SUM(N,A()) !総和
LET s=A(1)
FOR i=2 TO N
LET s=s+A(i)
NEXT i
LET SUM=s
END FUNCTION
FUNCTION FMAX(N,A()) !最大値(maximum)
LET s=A(1) !まず仮の最大値とする
FOR i=2 TO N
IF A(i)>s THEN LET s=A(i) !大きければ
NEXT i
LET FMAX=s
END FUNCTION
FUNCTION FMIN(N,A()) !最小値(minimum)
LET s=A(1)
FOR i=2 TO N
IF A(i)<s THEN LET s=A(i)
NEXT i
LET FMIN=s
END FUNCTION
SUB sort(N,A()) !降順に並べ替える
FOR i=1 TO N-1
FOR j=i+1 TO N
IF A(i)<A(j) THEN swap A(i),A(j)
NEXT j
NEXT i
END SUB

DEF AVERAGE(N,A())=SUM(N,A)/N !平均(mean) ※相加平均
FUNCTION GEOMEAN(N,A()) !相乗平均(幾何平均)
LET s=A(1)
FOR i=2 TO N
LET s=s*A(i)
NEXT i
LET GEOMEAN=s^(1/N)
END FUNCTION
FUNCTION HERMEAN(N,A()) !調和平均
LET s=1/A(1)
FOR i=2 TO N
LET s=s+1/A(i)
NEXT i
LET HERMEAN=N/s
END FUNCTION
FUNCTION MEDIAN(N,A()) !中央値(median)
CALL sort(N,A)
IF MOD(N,2)=0 THEN !偶数個なら
LET MEDIAN=(A(N/2)+A(N/2+1))/2
ELSE
LET MEDIAN=A((N+1)/2)
END IF
END FUNCTION
FUNCTION RANK(N,A(),m) !順位 ※変数 m: 順位を求める数値
LET s=1 !まず、1位とする
FOR i=1 TO N !全部調べる
IF A(i)>m THEN LET s=s+1 !大きければ順位を下げる
NEXT i
LET RANK=s
END FUNCTION

  つづき 山中和義 2008/01/24 16:12:39   ツリーへ

Re: 高校数学「統計とコンピュータ」  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/24 16:12:39
つづき


FUNCTION VARP(N,A()) !分散(variance)
LET ma=AVERAGE(N,A)
LET s=(A(1)-ma)^2
FOR i=2 TO N
LET s=s+(A(i)-ma)^2
NEXT i
LET VARP=s/N
END FUNCTION
!DEF VARP(N,A())=DOT(A,A)/N-AVERAGE(N,A)^2 !分散(variance) ※別解
DEF STDEVP(N,A())=SQR(VARP(N,A)) !標準偏差σ(standard deviation)
FUNCTION COVAR(N,A(),B()) !共分散(covariance)
LET ma=AVERAGE(N,A)
LET mb=AVERAGE(N,B)
LET s=(A(1)-ma)*(B(1)-mb)
FOR i=2 TO N
LET s=s+(A(i)-ma)*(B(i)-mb)
NEXT i
LET COVAR=s/N
END FUNCTION
DEF CORREL(N,A(),B())=COVAR(N,A,B)/STDEVP(N,A)/STDEVP(N,B) !相関係数(correlation coefficient)


!関数名を「高校数学の公式」準拠

DEF EX(A(),P())=DOT(A,P) !確率変数の平均(期待値(expected value)) ※E(X)=ΣXi*P(X=Xi)
FUNCTION EX2(A(),P()) !E(X^2)
LET s=A(1)^2*P(1)
FOR i=2 TO UBOUND(A)
LET s=s+A(i)^2*P(i)
NEXT i
LET EX2=s
END FUNCTION
DEF VX(A(),P())=EX2(A,P)-EX(A,P)^2 !確率変数の分散 ※V(X)=E((X-E(X))^2)=E(X^2)-E(X)^2
DEF DX(A(),P())=SQR(VX(A,P)) !確率変数の標準偏差 ※D(X)=SQR(V(X))

!-------------------- ここまでがサブルーチン




!例.数学の試験結果
LET N=12 !標本数
DATA 70,60,25,15,88,46,65,20,88,100,25,75
DIM X(N)
MAT READ X

PRINT USING "平均点 ###.##":AVERAGE(N,X)
PRINT USING "最高点 ###.##  最低点 ###.##":FMAX(N,X),FMIN(N,X)
!!!PRINT FMAX(N,X)-FMIN(N,X) !範囲(range)
PRINT USING "中央値 ###.##":MEDIAN(N,X)
PRINT

LET m=AVERAGE(N,X)
LET sx=STDEVP(N,X)
PRINT "点数 順位 偏差値"
FOR k=1 TO N
PRINT USING "### ###":X(k),RANK(N,X,X(k));
PRINT USING " ###.##":(X(k)-m)*10/sx+50 !偏差値
NEXT k
PRINT

DIM H(5) !ヒストグラム(度数分布)
MAT H=ZER
FOR k=1 TO N
LET m=MIN(INT(X(k)/20),4)+1 !20点刻み
LET H(m)=H(m)+1
NEXT k
PRINT "点数","人数"
PRINT "100 〜 80",H(5)
FOR k=4 TO 1 STEP -1
PRINT k*20-1;"〜";(k-1)*20,H(k)
NEXT k
PRINT



!例.ガソリンの販売量と価格の関係?
LET N=10 !データ数
DATA 45.8,47.1,47.8,50.1,51.0,52.8,54.2,55.4,56.8,58.2 !販売量
DIM A(N)
MAT READ A
DATA 127.1,123.7,123.7,120.5,114.2,106.6,103.0,93.4,93.6,101.3 !価格
DIM B(N)
MAT READ B

PRINT VARP(N,A),STDEVP(N,A)
PRINT VARP(N,B),STDEVP(N,B)

SET WINDOW -10,150,-10,150 !散布図
DRAW grid(25,25)
FOR k=1 TO N
PLOT POINTS: A(k),B(k)
NEXT k

DEF F(x)=AVERAGE(N,B)+(COVAR(N,A,B)/STDEVP(N,A)^2)*(x-AVERAGE(N,A)) !回帰方程式
PLOT LINES: 25,F(25); 100,F(100)

PRINT COVAR(N,A,B),CORREL(N,A,B)
PRINT

   └つづき2 山中和義 2008/01/24 16:13:40  (修正2回)  ツリーへ

Re: つづき  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/24 16:13:40 ** この記事は2回修正されてます
つづき2



!例.度数分布表から平均、分散、標準偏差を計算する
!階級  度数
!20〜30 5
!30〜40 17
!40〜50 32
!50〜60 12
!60〜70 4
! 計  70
LET N=5
DATA 25,35,45,55,65 !階級値x=(上限+下限)/2
DATA 5,17,32,12,4 !度数f
DIM Z1(N),Z2(N)
MAT READ Z1
MAT READ Z2
LET m=DOT(Z1,Z2)/SUM(N,Z2) !平均={Σx*f}/Σf
PRINT m

LET s=0
FOR k=1 TO N
LET s=s+(Z1(k)-m)^2*Z2(k)
NEXT k
LET s=s/SUM(N,Z2) !分散={Σ(x-E(X))^2*f}/Σf
PRINT s,SQR(s) !標準偏差=SQR(分散)

DIM Z3(N) !別解
MAT Z3=(1/SUM(N,Z2))*Z2 !相対度数=度数/総度数
PRINT EX(Z1,Z3) !平均
PRINT VX(Z1,Z3),SQR(VX(Z1,Z3)) !分散、標準偏差

DIM Z4(N) !累計度数
LET Z4(1)=Z2(1)
FOR k=2 TO N
LET Z4(k)=Z4(k-1)+Z2(k)
NEXT k
MAT PRINT Z4 !35の位置を確認
PRINT (Z1(2)+Z1(3))/2+(SUM(N,Z2)/2-Z4(2))*10/Z2(2) !中央値



!例.300kmの距離を行きは時速60km、帰りは50kmとすると、往復の平均時速?
DIM Y(2)
LET Y(1)=60
LET Y(2)=50
PRINT HERMEAN(2,Y)
PRINT



!例.サイコロを1回振ったときに出る目の数Xの平均値E(X)?
DIM D(6),P(6)
FOR k=1 TO 6
LET D(k)=k !確率変数X={X1,X2,…,Xn}
LET P(k)=1/6 !確率P(X=Xn)
NEXT k
PRINT EX(D,P)
PRINT VX(D,P)



!例.2個のさいころを同時に投げたときに出る目の和の期待値、分散?
PRINT EX(D,P)+EX(D,P) !E(a*X+b*Y)=a*E(X)+b*E(Y)
PRINT VX(D,P)+VX(D,P) !V(a*X+b*Y)=a^2*V(X)+b^2*V(Y) ※独立


END




参照 SAMPLEフォルダ内 STAT1.BAS、STAT2.BAS


 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。