1

私は自分の課題の標準偏差を見つけるのに苦労しています。他のことはすべてやったのですが、この最後のビットに苦労しています。私の宿題の質問は、一言で言うと、生徒のグループからの宿題の結果のテキスト ファイルが与えられます (任意の数である必要があります)。与えられた唯一のデータは、学生の名前、ファン、およびその結果です。平均成績と標準偏差を計算する必要があります。出力は次のようになります。

Student Name     FAN      Part 1 Part 2 Part 3 Part 4 Mark    Grade
Adam Adamson     adam0001 85.4   79.8   82.4   86.1   82.77%  DN
Bethany Bright   brig0001 89.7   85.6   84.2   82.9   84.92%  DN
Cameron Carlson  carl0001 55.45  49.82  60.4   42.27  50.23%  P
David Dawson     daws0001 72.6   78.49  80.2   65.88  74.46%  CR
Evelyn Ellis     elli0001 50.2   35.88  48.41  58.37  46.57%  FA
Frances Fitz     fitz0001 78.9   75.67  82.48  79.1   78.38%  DN
Greg Gregson     greg0001 24.3   32.88  29.72  28.4   30.05%  F
Harriett Hope    hope0001 52.2   58.93  61.5   63.44  60.12%  P
Ivan Indigo      indi0001 88.4   91.23  90.05  92.46  91.08%  HD
Jessica Jones    jone0001 82.33  89.74  81.3   84.85  85.84%  HD
                  Average 67.948 67.804 70.066 68.377 68.44%  CR
                                               StdDev 19.4442

使用する必要がある方程式と、使用する必要がある数値はわかっていますが、それらを取得する方法がわかりません。私が何をする必要があるかをお見せしますので、あなたが私のコードをさらに理解してくれることを願っています:

the total of the averages divided by 10 = 68.442

sum = (82.77-68.442)^2 + (84.92-68.442)^2 + (50.23-68.442)^2 + ... + (85.84-68.442)^2
StdDev = Math.sqrt(sum/10)

stdDev = 19.4442

これには 3 つのクラスを使用しています。メイン クラスのトピック管理、学生の名前とファンの配列を含む Student クラスです (どちらも私の質問には関係ありませんが、シーンを設定した方がよいと思いました)。以下に示す StdDec メソッドを含む StudentsMarks クラス:

public static double StdDev() throws IOException
{
    String [][] marks = StudentMarks.StudentMarks();

    double mean = 0, average = 0, stdDev = 0;
    int row = 0;
    for(row = 0; row < marks.length; row++)
    {                                          //ROW,COL
        double score1 = Double.parseDouble(marks[row][2]);  //parsing the data from the array into a double
        double score2 = Double.parseDouble(marks[row][3]);
        double score3 = Double.parseDouble(marks[row][4]);
        double score4 = Double.parseDouble(marks[row][5]);

        average = score1*0.1 + score2*0.4 + score3*0.2 + score4*0.3;   

        mean = average/row;
        stdDev = Math.sqrt(Math.pow(average - mean,2)/row);   
    }  
    return stdDev;
}
4

3 に答える 3

1

すべての行から平均を引く必要があるため、2 つのループが必要です。

double[] sum = new double[marks.length];

for(row = 0; row < marks.length; row++)
{                                          //ROW,COL
    double score1 = Double.parseDouble(marks[row][2]);  //parsing the data from the array into a double
    double score2 = Double.parseDouble(marks[row][3]);
    double score3 = Double.parseDouble(marks[row][4]);
    double score4 = Double.parseDouble(marks[row][5]);

    sum[row] = score1*0.1 + score2*0.4 + score3*0.2 + score4*0.3;   
    average += sum[row];
}
average = average/sum.length; //1
for(row = 0; row < sum.length; row++)
{
        mean += Math.pow(Math.abs(sum[row] - average),2);           
}
mean = mean/marks.length;//2
stdDev = Math.sqrt(mean);
于 2013-09-29T11:46:22.047 に答える
0

サンプルから標準偏差を推定するには、通常、次の式を使用することに注意してください。

stdDev=Math.sqrt(sum/N-1);

ここsumで、 はすべての二次偏差の合計で、N はサンプル サイズです。したがって、あなたの例では、10 ではなく 9 で除算する必要があります。これにより、期待する数値が生成される可能性があります。

( http://en.wikipedia.org/wiki/Unbiased_estimation_of_standard_deviationを参照)

于 2013-09-30T04:20:47.520 に答える