|
|
[求助]
一个关于MATLAB函数调用的帮组
我现在在要用 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 |
» 本帖附件资源列表
-
欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱: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
» 猜你喜欢
|