2015-12-11 32 views
1

在RI可以做以下兩個對比從線性模型比較:比較線性模型對比在Python(如RS對比庫?)

url <- "https://raw.githubusercontent.com/genomicsclass/dagdata/master/inst/extdata/spider_wolff_gorb_2013.csv" 
filename <- "spider_wolff_gorb_2013.csv" 
install.packages("downloader", repos="http://cran.us.r-project.org") 
library(downloader) 
if (!file.exists(filename)) download(url, filename) 
spider <- read.csv(filename, skip=1) 
head(spider, 5) 
# leg type friction 
# 1 L1 pull  0.90 
# 2 L1 pull  0.91 
# 3 L1 pull  0.86 
# 4 L1 pull  0.85 
# 5 L1 pull  0.80 
fit = lm(friction ~ type + leg, data=spider) 
fit 
# Call: 
# lm(formula = friction ~ type + leg, data = spider) 
# 
# Coefficients: 
# (Intercept)  typepush  legL2  legL3  legL4 
#  1.0539  -0.7790  0.1719  0.1605  0.2813 
install.packages("contrast", repos="http://cran.us.r-project.org") 
library(contrast) 
l4vsl2 = contrast(fit, list(leg="L4", type="pull"), list(leg="L2",type="pull")) 
l4vsl2 
# lm model parameter contrast 
# 
# Contrast  S.E.  Lower  Upper t df Pr(>|t|) 
# 0.1094167 0.04462392 0.02157158 0.1972618 2.45 277 0.0148 

我已經發現瞭如何做太多的上述在Python中:

import pandas as pd 
df = pd.read_table("https://raw.githubusercontent.com/genomicsclass/dagdata/master/inst/extdata/spider_wolff_gorb_2013.csv", sep=",", skiprows=1) 
df.head(2) 

import statsmodels.formula.api as sm 

model1 = sm.ols(formula='friction ~ type + leg', data=df) 
fitted1 = model1.fit() 
print(fitted1.summary()) 

現在剩下的就是找到腿對L4與腿對L2的對比的t統計量。這在Python中可能嗎?

+0

感謝您提供完整的可執行示例以及參考代碼和數字。這使它更容易。 – user333700

回答

1

statsmodels仍然缺少一些預定義的對比,但模型Results類的t_testwald_testf_test方法可用於測試線性(或仿射)限制。限制要麼由數組給出,要麼由使用參數名稱的字符串給出。

細則如何指定對比度/限制應該是文件

在例如

>>> tt = fitted1.t_test("leg[T.L4] - leg[T.L2]") 
>>> print(tt.summary()) 
          Test for Constraints        
============================================================================== 
       coef std err   t  P>|t|  [0.025  0.975] 
------------------------------------------------------------------------------ 
c0    0.1094  0.045  2.452  0.015  0.022  0.197 
============================================================================== 

的結果是在由t_test返回的實例的屬性或方法。被矢量例如conf_int可以通過

>>> tt.conf_int() 
array([[ 0.02157158, 0.19726175]]) 

t_test獲得,並且將每一個限制或對比度作爲單獨的假說。 wald_test對待的限制,聯合假設列表:

>>> tt = fitted1.t_test(["leg[T.L3] - leg[T.L2], leg[T.L4] - leg[T.L2]"]) 
>>> print(tt.summary()) 
          Test for Constraints        
============================================================================== 
       coef std err   t  P>|t|  [0.025  0.975] 
------------------------------------------------------------------------------ 
c0   -0.0114  0.043  -0.265  0.792  -0.096  0.074 
c1    0.1094  0.045  2.452  0.015  0.022  0.197 
============================================================================== 


>>> tt = fitted1.wald_test(["leg[T.L3] - leg[T.L2], leg[T.L4] - leg[T.L2]"]) 
>>> print(tt.summary()) 
<F test: F=array([[ 8.10128575]]), p=0.00038081249480917173, df_denom=277, df_num=2> 

旁白:如果cov_type指定爲參數fit這也適用於穩健的協方差矩陣。

+0

謝謝。這可能在文檔中,但我太無知,無法找到它(我正在學習理論。) –