首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MatLab中比较两个加权回归?

如何在MatLab中比较两个加权回归?
EN

Stack Overflow用户
提问于 2016-09-22 16:21:55
回答 1查看 49关注 0票数 0

我一直在使用MatLab作为统计工具。我喜欢我可以自己定制和编码的方式。我很高兴地发现,在MatLab中进行加权线性回归相当简单。举一个有点愚蠢的例子,我可以加载"carbig“数据文件,并将美国汽车与其他国家汽车的马力与里程进行比较,但我决定只信任8缸汽车。

代码语言:javascript
复制
load carbig
w=(Cylinders==8)+0.5*(Cylinders~=8)%1 if 8 cylinders, 0.5 otherwise.
for i=1:length(org)
o(i,1)=strcmp(org(i,:),org(1,:));%strcmp only works on one string.
end
x1=Horsepower(o==1)
x2=Horsepower(o==0)
y1=MPG(o==1)
y2=MPG(o==0)
w1=w(o==1)
w2=w(o==0)
lm1=fitlm(x1,y1,'Weights',w1)
lm2=fitlm(x2,y2,'Weights',w2)

这样,来自8缸汽车的数据将被算作一个数据点,而来自3,4,5,6缸汽车的数据将被算作半个数据点。

问题是,比较两个回归的明显方法是使用ANCOVA,MatLab有一个函数用于:

代码语言:javascript
复制
aoctool(Horsepower,MPG,o)

这个函数比较两组的线性回归,但我还没有找到一种明显的方法来包含权重。

我想我可以更仔细地看看ANCOVA是做什么的,并手动包括权重。有没有更简单的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2016-09-22 20:47:09

我计算出,如果我给“信任”度量权重2,“不信任”度量权重1,用于回归目的,这就等同于为每个信任度量增加1个相同的度量。将权重设置为1和0.5应该执行相同的操作。我可以用一个脚本来做到这一点。

这也增加了相当多的自由度,所以我在n-rank上手动将自由度设置为sum(w)-rank

代码语言:javascript
复制
x=[];
y=[];
g=[];
w=(Cylinders==8)+0.5*(Cylinders~=8);
df=sum(w)
for i=1:length(w)
while w(i)>0
x=[x;Horsepower(i)];
y=[y;MPG(i)];
g=[g;o(i)];
w(i)=w(i)-0.5
end
end

然后,我复制了aoctool.m文件(edit aoctool),并将df的值插入到新文件中的某个位置。它并不优雅,但看起来很管用。

代码语言:javascript
复制
edit aoctool.m
%(insert new df somewhere. Save as aoctool2.m)
aoctool2(x,y,g)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39633824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档