- 締切済み
BASIC言語 分散の出し方
BASIC言語の問題が分からないので、教えてください。 分散がうまく出せません(+o+) 下に問題と自分の回答を張り付けたので、お願いしますm(__)m <演習問題2> 最小二乗法(直線のあてはめ)を用いて回帰式と相関係数を算出する。 作成手順: 1. READ~DATA 文によるデータの配列変数への読み込み 2. Xi の和、Yi の和、Xi の平均値 (Xav) 、Yi の平均値 (Yav) の算出 3. (Xi -Xav)^2 の和、(Yi -Yav)^2 の和、(Xi -Xav)(Yi -Yav) の和の算出 4. y=a*x+bのa, b, r(相関係数) の算出 テストデータと計算結果 データ数:4 X Y Xの平均 2.5 1 5 Yの平均 8 傾き a=1.6 2 8 Xの分散 1.25 切片 b=4 3 9 Yの分散 3.5 相関係数 r=0.956 4 10 共分散 2 下が自分の回答です。 5 READ n > DIM A(2,N) > 10 FOR i=1 TO 2 > 15 LET S=0 > 20 FOR j=1 TO n > 30 READ A(i,j) > 40 LET s=s+a(i,j) > 50 NEXT j > 60 LET h=s/n > 70 IF i=1 THEN > PRINT h,bunsan > ELSEIF i=2 THEN > PRINT h,bunsan > END if > 75 NEXT i > 80 DATA 4 > 90 DATA 1,2,3,4 > DATA 5,8,9,10 > END
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- misawajp
- ベストアンサー率24% (918/3743)
どこで bunsan を計算していますか ? 小文字と大文字を無造作に扱っていますが、そのBASICは 大文字小文字の区別は無いのでしょうか S:初期値はSなのに和の計算時はs は和 hは平均になりますが bunsann はどこでも現れてきません print に突如現れるだけです bunsan を計算する行(二乗和を計算する行、と分散を計算する行を 落としてしまっているのでしょう 頭に血が昇って見えなくなっています、デバッグは、心を落ち着けて、第三者の目で見ることができないと、見れども見えず で 余計なことをして泥沼にはまります この程度の行で躓くようでは、一般的なプログラムは ひとつのルーチンが 数百行から数千行になります、そのデバッグができなければプログラマとは言えません なお 70~75行の直前までは if文処理は 意味がありません 単に print h,bunsan で十分です デバッグのために print i,h,bunsan とすることはあります 質問文からすると 70~75行の直前まではprint h だけで 75行以降に (Xi -Xav)^2 の和、(Yi -Yav)^2 の和、(Xi -Xav)(Yi -Yav) の和の算出を行う i=1 to 2 j=1 to n のループが入り y=a*x+bのa, b, r(相関係数) の算出処理が入ることになります
- himajin100000
- ベストアンサー率54% (1660/3060)
READ N DIM X(N) DIM Y(N) REM 読み込み FOR I = 1 TO N READ X(I) NEXT I FOR I = 1 TO N READ Y(I) NEXT I REM 平均を出すために関数側でわざわざ再び和を求めているので無駄といえば無駄なんだが、 REM 自分の都合で、引数に平均値とか持たせるのは変だよなあと思った。(効率的には、変数で持っておいて再計算を防いだほうがいいはず) REM この程度のプログラムであれば、大して差は出ないと思うので放置。 PRINT "Xの和 ";SUM(X) PRINT "Xの平均 ";AVERAGE(X) PRINT "Yの和 ";SUM(Y) PRINT "Yの平均 ";AVERAGE(Y) PRINT "Xの分散 ";VARIANCE(X) PRINT "Yの分散";VARIANCE(Y) PRINT "共分散";COVARIANCE(X,Y) PRINT "相関係数";CORRELATION(X,Y) LET A = CORRELATION(X,Y) * (STDDEV(Y) / STDDEV(X)) PRINT "傾き"; A PRINT "切片";AVERAGE(Y) - A * AVERAGE(X) DATA 4 DATA 1,2,3,4 DATA 5,8,9,10 END EXTERNAL FUNCTION SUM(A()) LET S = 0 FOR I = 1 TO UBOUND(A) LET S = S + A(I) NEXT I LET SUM = S END FUNCTION EXTERNAL FUNCTION AVERAGE(A()) LET AVERAGE = SUM(A) / UBOUND(A) END FUNCTION EXTERNAL FUNCTION VARIANCE(A()) LET S = 0 FOR I = 1 TO UBOUND(A) LET S = S + (A(I) - AVERAGE(A))^2 NEXT I LET VARIANCE = S / UBOUND(A) END FUNCTION EXTERNAL FUNCTION COVARIANCE(A(),B()) LET S = 0 LET AVEA = AVERAGE(A) LET AVEB = AVERAGE(B) FOR I = 1 TO UBOUND(A) LET S = S + (A(I) - AVEA) * (B(I) - AVEB) NEXT I LET COVARIANCE = S / UBOUND(A) END FUNCTION EXTERNAL FUNCTION STDDEV(A()) LET STDDEV = SQR(VARIANCE(A)) END FUNCTION EXTERNAL FUNCTION CORRELATION(A(),B()) LET CORRELATION = COVARIANCE(A,B) / (STDDEV(A) * STDDEV(B)) END FUNCTION
補足
回答ありがとうございます。しかし、 自分が使ってるbasicには、sumもaverageもvarianceもCORRELATIONもありません。 それなしで、できるプログラムをお願いします。
補足
すいません、自分は素人で、if文が不要以外、おしゃってる意味がほとんど分かりません。 もう少し、丁寧にお願いします。