|
|
[求助]
一個關于MATLAB函數調用的幫組
我現(xiàn)在在要用 reglm 函數做回歸分析,貌似MATLAB中無這個函數,我自己寫了一個函數m文件,如下:
function stats=reglm(y,X,model,varnames)
if nargin<2
error('至少需要兩個輸入參數');
end
p=size(x,2);
if nargin<3 || isempty(model)
model='linear';
end
if nargin<4 || isempty(varnames)
varname1=strcat({'x'},num2str([1:p]'));
varnames=makevarnames(varname1,model);
else
if ischar(varnames)
varname1=cellstr(varnames);
elseif iscell(varnames)
varname1=varnames( ;
else
error('varnames 必須是字符矩陣或字符串元胞數組');
end
if size(varname1,1)~=p
error('變量標簽與x的列數不一致');
else
varnames=makevarnames(varname1,model);
end
end
ST=regstats(y,X,model);
f=ST.fstat;
t=ST.tstat;
fprintf('\n');
fprintf('----------方差分析表----------');
fprintf('\n');
fprintf('% s % 7s % 15s % 15s % 15s % 12s','方差來源','自由度','平方和','均方','F值','P值');
fprintf('\n');
fmt='% s % 13.4f % 17.4f % 17.4f % 16.4f % 12.4f';
fprintf(fmt,'回歸',f.dfr,f.ssr,f.ssr/f.dfr,f.f,f.pval);
fprintf('\n');
fmt='% s % 13.4f % 17.4f % 17.4f';
fprintf(fmt,'殘差',f.dfe,f.sse,f.sse/f.dfe);
fprintf('\n');
fmt='% s % 13.4f % 17.4f';
fprintf(fmt,'總計',f.dfe+f.dfr,f.sse+f.ssr);
fprintf('\n');
fprintf('\n');
fmt='% 22s % 15.4f % 25s % 10.4f';
fprintf(fmt,'均方根誤差(Root MSE)',sqrt(ST.mse),'判定系數(R-Square)',ST.rsquare);
fprintf('\n');
fprintf(fmt,'因變量均值(Dpendent Mean)',mean(y),'調整的判定系數(Adj R-Sq)',...
ST.adjrsquare);
fprintf('\n');
fprintf('\n');
fprintf('--------參數估計--------');
fprintf('\n');
fprintf('% 8s % 18s % 15s % 15s % 12s','變量','估計值','標準誤差','t值','p值');
fprintf('\n');
for i=1:size(t.beta,1)
if i==1
fmt ='% 8s % 20.4f % 17.4f % 17.4f % 12.4f\n';
fprintf(fmt,'常數項',t.beta(i),t.se(i),t.t(i),t.pval(i));
else
fmt='% 10s % 20.4f % 17.4f % 17.4f % 12.4f\n';
fprintf(fmt,varnames{i-1},t.beta(i),t.se(i),t.t(i),t.pval(i));
end
end
if nargout==1
stats=ST;
end
function varnames=makevarnames(varname1,model)
p=size(varname1,1);
varname2=[];
for i=1:p-1
varname2=[varname2;strcat(varname1(i),'*',varname1(i+1:end))];
end
varname3=strcat(varname1,'*',varname1);
switch model
case 'linear'
varnames=varname1;
case 'interaction'
varnames=[varname1;varname2];
case 'quadratic'
varnames=[varnames1;varnames2;varnames3];
case 'purequadratic'
varnames=[varname1;varname3];
end
進行了保存,做回歸的函數是:
將excel中數據導入,將名字改為ab
然后在命令窗口輸入命令:
>> clear
>> X=ab(:,1);
>> y=ab(:,5);
>> varname='x';
>> reglm(y,X,[],varname)
回車后提示:Undefined function 'reglm' for input arguments of type 'double'.
這是怎么回事呀?怎么解決?
麻煩高手教我,謝謝!
excel中的數據如下:
城市 年平均氣溫/(℃) 年極端最高氣溫/(℃) 年極端最低氣溫/(℃) 年均相對濕度/(%) 全年日照時長/(h) 全年降水/mm
北 京 14 37.3 -11.7 54 2351.1 483.9
天 津 13.6 38.5 -10.6 61 2165.4 389.7
石 家 莊 14.9 39.7 -7.4 59 2167.7 430.4
太 原 11.4 35.8 -13.2 55 2174.6 535.4
呼和浩特 9 35.6 -17.6 47 2647.8 261.2
沈 陽 9 33.9 -23.1 68 2360.9 672.3
長 春 7.7 35.8 -21.7 58 2533.6 534.2
哈 爾 濱 6.6 35.8 -22.6 58 2359.2 444.1
上 海 18.5 39.6 -1.1 73 1522.2 1254.5
南 京 17.4 38.2 -4.5 70 1680.3 1070.9
杭 州 18.4 39.5 -1.9 71 1472.9 1378.5
合 肥 17.4 37.2 -3.5 79 1814.6 929.7
福 州 21 39.8 3.6 68 1543.8 1109.6
南 昌 19.2 38.5 0.5 68 2102 1118.5
濟 南 15 38.5 -7.9 61 1819.8 797.1
鄭 州 16 39.7 -5 60 1747.2 596.4
武 漢 18.6 37.2 -1.5 67 1934.2 1023.2
長 沙 18.8 38.8 -0.5 70 1742.2 9364
廣 州 23.2 37.4 5.7 71 1616 1370.3
南 寧 21.7 37.7 0.7 76 1614 1008.1
海 口 24.1 37.9 10.7 80 1669.1 1419.3
重 慶 19 37.9 3 81 856.2 1439.2
成 都 16.8 34.9 -1.6 77 935.6 624.5
貴 陽 14.9 31 -1.7 75 1014.8 884.9
昆 明 15.6 30 0.7 72 2038.6 932.7
拉 薩 9.8 29 -9.8 34 3181 477.3
西 安 15.6 39.8 -5.9 58 1893.6 698.5
蘭 州 11.1 34.3 -11.9 53 2214.1 407.9
西 寧 6.1 30.7 -21.8 57 2364.7 523.1
銀 川 10.4 35 -15.4 52 2529.8 214.7
烏魯木齊 8.5 37.6 -24 56 2853.4 419.5![一個關于MATLAB函數調用的幫組]()
YO47)~9PV2Y8Z82$X]B~MWF.jpg
![一個關于MATLAB函數調用的幫組-1]()
IMG_20151012_123328.jpg |
» 本帖附件資源列表
-
歡迎監(jiān)督和反饋:小木蟲僅提供交流平臺,不對該內容負責。
本內容由用戶自主發(fā)布,如果其內容涉及到知識產權問題,其責任在于用戶本人,如對版權有異議,請聯(lián)系郵箱:xiaomuchong@tal.com
- 附件 1 : examp08_01.xls.xlsx
2015-10-12 12:39:23, 10.76 K
- 附件 2 : examp08_01.xls.xlsx
2015-10-12 12:39:49, 10.76 K
» 猜你喜歡
|