質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

3188閲覧

相関係数算出プログラムの計算結果が正しく算出されません

taketake221

総合スコア17

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2016/08/28 23:54

編集2016/08/29 02:17

はじめてこちらを利用します。プログラミングに関しては初級者ですので、記述不足等ありましたらご指摘ください。
Visual Basicで、自己評価値と他者からの評価値の相関係数を求めるプログラムを制作しています(記載コードでは省略していますが、結果はLabelコントロールに表示します)。
ネット上の同じようなコードを参考にして書きましたが、正しい計算結果が算出されずに困っています。具体性に欠ける質問で申し訳ありませんが、改善点等教えていただきたいです。

###発生している問題・エラーメッセージ
記載のコードを実行すると、それぞれの評価値の平均はうまく算出されているのが確認できましたが、特に標準偏差の算出以降、値がうまく格納されていないようです。
実行画面では相関係数がNaN(非数値)と表示されました。

###ソースコード

Partial Class Soukan_Keisu
Inherits System.Web.UI.Page

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load '自己評価値平均算出 Dim Selflist() As Double = {47, 10, 15, 50, 20, 21} Dim self_avg = Aggregate Self In Selflist Into Average() '口コミ評価値平均算出 Dim Reviwslist() As Double = {3.93, 3.16, 3.74, 3.81, 3.24, 3.77} Dim Reviws_avg = Aggregate Reviws In Reviwslist Into Average() '自己評価値の偏差を求めて格納 Dim Self_dev(5) As Double For a = 0 To 5 Self_dev(a) = Selflist(a) - self_avg Next '口コミ評価値の偏差を求める格納 Dim Reviws_dev(5) As Double For b = 0 To 5 Self_dev(b) = Selflist(b) - Reviws_avg Next '分散の計算 Dim Self_HensaHeiho As Double = Self_dev(0) ^ 2 Dim Reviws_HensaHeiho As Double = Reviws_dev(0) ^ 2 For c = 0 To 4 Self_HensaHeiho = Self_HensaHeiho + (Self_dev(c + 1) ^ 2) Reviws_HensaHeiho = Reviws_HensaHeiho + (Reviws_dev(c + 1) ^ 2) Next Dim Self_Bunsan As Double = Self_HensaHeiho / 6 Dim Reviws_Bunsan As Double = Reviws_HensaHeiho / 6 '標準偏差の計算 Dim Self_std_dev As Double = System.Math.Sqrt(Self_Bunsan) Dim Reviws_std_dev As Double = System.Math.Sqrt(Reviws_Bunsan) '偏差積の計算 Dim Dev_pdt(5) As Double For s = 0 To 5 Dev_pdt(s) = Self_dev(s) * Reviws_dev(s) Next '偏差積平均の計算 Dim Dev_avg = Aggregate Self In Dev_pdt Into Average() '相関係数算出 Dim Soukan_Keisu As Double = Dev_avg / (Self_std_dev * Reviws_std_dev)
###試したこと 配列定義の仕方に問題があるとの指摘をいただき改善しましたが、 実行結果に目に見えた変化は見られませんでした。 ブレークポイントの設定を用いて、変数の値を見てみましたが、 標準偏差の値が0.0となっているのに対して、 分散には誤りながら値が格納されていました。 ###補足情報(言語/FW/ツール等のバージョンなど) ASP.NET、Visual Studio 2013

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「以下のようなエラーが生じて困っています」と書いてありますが、エラーが生じているのではなく計算結果が正しくないということですかね?

自己評価値とかの用語は分からないのですが、プログラム的に見て間違っているなと思うところは配列の定義の仕方です。

Visual Basic は Dim Dev_pdt(6) As Double と定義すると Dev_pdt(0) から Dev_pdt(6) までの7つの変数が用意されます。

ですが、プログラム中では Dev_pdt(5) までしか使っていない様子。

なのに Aggregate Self In Dev_pdt Into Average() で 0 から 6 までの平均を出そうとしているので、結果が正しくないのではないでしょうか?

0 から 5 までしか使わないのであれば、Dim Dev_pdt(5) As Double と定義してはどうでしょうか?

投稿2016/08/29 00:31

twck

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taketake221

2016/08/29 01:22

ご回答いただきありがとうございます。 初歩的なことで申し訳ありません、こちらの勉強不足です。 ただ、ご指摘いただいた点を改善して実行してみましたが、実行結果は記載と変わりませんでした。
twck

2016/08/29 02:04 編集

そうですか。 あと気になる点は Dev_avg / (Self_std_dev * Reviws_std_dev) のときに ゼロや無限大で除算してたりするんじゃないかなと。 質問文には Selflist() と Reviwslist() にどんな値が格納されるのか書いてないし、結果がどうなれば正しいのかも書いてないので、これ以上はちょっと分からないですね。 できれば Selflist() と Reviwslist() に格納される値の例と、その時に表示されてほしい結果が知りたいです。
twck

2016/08/29 02:16

あと、プログラムで何をしたいかがよくわからないのですけど、 以下の部分で Reviws_dev配列 を用意しているのに、 ループの中で Reviws_dev配列 を使用していないのは合っているのですか? '口コミ評価値の偏差を求める格納 Dim Reviws_dev(6) As Double For b = 0 To 5 Self_dev(b) = Selflist(b) - Reviws_avg Next
taketake221

2016/08/30 01:20

丁寧に回答いただきありがとうございます。 返信が遅れてしまい申し訳ありません。 Selflist() とReviwslist()に入る数値例ですが、 以下のような感じです。 Dim Selflist() As Double = {47, 10, 15, 50, 20, 21} Dim Reviwslist() As Double = {3.93, 3.16, 3.74, 3.81, 3.24, 3.77} また、 Dim Reviws_dev(6) As Double For b = 0 To 5 Self_dev(b) = Selflist(b) - Reviws_avg Next の部分で、 Self_dev(b) → Reviws_dev(b) Selflist → Reviwslist に変えたところ、正しい相関係数の算出結果が得られました。 初歩的なミスで申し訳ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問