24小时热门版块排行榜    

查看: 1375  |  回复: 0

TNT19053

新虫 (初入文坛)

[求助] 一个关于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

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 TNT19053 的主题更新
信息提示
请填处理意见