星期二, 12月 05, 2006

MATLAB課堂作業:學生期中考成績 (敘述統計_資料分佈)

前言:
敘述統計(descriptive statistic)能夠初步呈現整體資料情形,透過直方圖圖形的表示方法讓人更能清楚地了解資料之分佈情況。以下,以"學生期中考成績"做為範例。

老師網頁程式如下:
原程式

程式指令:

% statistic.m
% Degree distribution
% Data Input

n=0;
while 1
A=input('輸入重量資料(按enter輸入結束): '); % '請輸入學生期中考成績(按enter輸入結束):'
if isempty(A), break;end
n=n+1;Y(n)=A;
end
%
disp(['==>總計輸入 ' num2str(n) ' 筆資料.'])
disp(['最小值:' num2str(min(Y)) ' 最大值:' num2str(max(Y))])
fprintf('平均值:%0.2f 標準差:%0.2f\n',mean(Y),std(Y))
% 加入平均值和標準差的計算,並且設定數值的格式為小數點後兩位,所以改用fprintf指令
while 1
Rk=input('輸入初始點及級矩(以空格分開)','s');
if ~isempty(Rk),
rank=str2num(Rk);
r1=rank(1);r2=rank(2);
break; % 如果按沒有輸入直接enter的畫會重複出現問句
end
end
D=zeros(fix((max(Y)-min(Y))/r2)+2,1); % fix指令為捨去小數部分,D矩陣為結果中的frequency部分。原本只須加1,但是因為結果中有<的部分所以加2
for i=1:n
if Y(i)<r1,
D(1)=D(1)+1;
else
J=fix((Y(i)-r1)/r2)+2;D(J)=D(J)+1;
end
end
disp([' <' num2str(r1) ' ' num2str(D(1))]);
for i=2:length(D)
disp([num2str(r1+(i-2)*r2) '-'...
num2str(r1+((i-1)*r2)) ' ' num2str(D(i))])
end
% 以bar指令畫出資料分佈頻率之圖形 (長條圖)
H=zeros(fix((max(Y)-min(Y))/r2)+2,1);
H(1)=r1-(r2)/2;
for j=2:length(D)
H(j)=r1+(j-2)*r2+(r2)/2;
end
bar(H,D)
xlabel('Value') % '期中考分數'
ylabel('Frequency') % '學生個數'
title('Distribution of the Weight')% 'T大xx系學生期中考成績分佈圖'

執行結果:
統計結果
應用:學生期中考成績

討論:
1. 加入平均值和標準差資料更能清楚呈現資料。
2. 此程式中,若輸入值皆為正值,而起始點輸入為0時,程式執行會出現錯誤,這一部分需再修改。

1 則留言:

ShuRuLin 提到...

也可利用tabulate指令計算資料分佈頻率

TABLE = tabulate(x)

註:這個指令可將一向量X之觀測值製成一表格,其第一行為X向量中之相同數值,第二行為該數值出現之次數,最後一行為該值出現之百分比。若X值為含有文字串之陣列或細胞陣列,則第一行為陣列內之獨一的名稱,其餘兩行則相同。

最後再用直方圖指令繪出圖形