2016-09-22 93 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)