2016-09-22 89 views
0

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

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) 

这种方式,数据将计为一个数据点,和数据FRM 3,4,5,6-筒车将计为一半的数据点。

问题是,两个回归比较明显的方法是使用协方差分析,其中MATLAB具有的功能为:

aoctool(Horsepower,MPG,o) 

此功能线性回归对两组进行比较,但我还没有找到一个明显的方法来包含权重。

我怀疑我可以仔细看看ANCOVA的功能,并手动添加砝码。更简单的解决方案

回答

0

我想,如果我给出“可信”测量权重2,“不可信”测量权重1,为了回归目的,这与为每个可信任测量额外进行1次相同测量是一回事。将权重设置为1和0.5应该做同样的事情。我可以用脚本来做到这一点。

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

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某处的值。它不是优雅的,但它似乎工作。

edit aoctool.m 
%(insert new df somewhere. Save as aoctool2.m) 
aoctool2(x,y,g)