2014-08-27 23 views
22

Tôi muốn sử dụng khung dữ liệu Pandas để phân tích phương sai trong một biến. Ví dụ, nếu tôi có một cột được gọi là 'Độ', và tôi đã lập chỉ mục này cho các ngày, thành phố và ngày khác nhau so với ngày, tôi muốn tìm hiểu phần nào của biến thể trong chuỗi này đến từ biến thể thành phố cắt ngang, bao nhiêu đến từ biến thể của chuỗi thời gian và số lượng đến từ đêm so với ngày.ANOVA trong python bằng cách sử dụng khung dữ liệu pandas với các mô hình thống kê hoặc scipy?

Trong Stata tôi sẽ sử dụng hiệu ứng Cố định và xem R^2. Hy vọng câu hỏi của tôi có ý nghĩa.

Về cơ bản, điều tôi muốn làm là tìm bảng phân tích ANOVA của "Độ" theo ba cột khác.

+2

Bạn sẽ muốn nhìn vào scipy hoặc statsmodels (tôi chỉ cần thêm các thẻ, đang chờ phê duyệt) – JohnE

+1

Tóm lại, các mô hình thống kê tương tự với các phần thống kê của stata (trong khi gấu trúc là phần quản lý dữ liệu). – JohnE

+0

Mọi thứ cụ thể hơn :)? – robertevansanders

Trả lời

14

tôi thiết lập một so sánh trực tiếp để kiểm tra chúng, phát hiện ra rằng các giả định của họ có thể differ slightly, có một gợi ý từ một nhà thống kê, và đây là một ví dụ về ANOVA trên kết quả một gấu trúc dataframe hợp R:

import pandas as pd 
import statsmodels.api as sm 
from statsmodels.formula.api import ols 


# R code on R sample dataset 

#> anova(with(ChickWeight, lm(weight ~ Time + Diet))) 
#Analysis of Variance Table 
# 
#Response: weight 
#   Df Sum Sq Mean Sq F value Pr(>F) 
#Time  1 2042344 2042344 1576.460 < 2.2e-16 *** 
#Diet  3 129876 43292 33.417 < 2.2e-16 *** 
#Residuals 573 742336 1296 
#write.csv(file='ChickWeight.csv', x=ChickWeight, row.names=F) 

cw = pd.read_csv('ChickWeight.csv') 

cw_lm=ols('weight ~ Time + C(Diet)', data=cw).fit() #Specify C for Categorical 
print(sm.stats.anova_lm(cw_lm, typ=2)) 
#     sum_sq df   F   PR(>F) 
#C(Diet) 129876.056995 3 33.416570 6.473189e-20 
#Time  2016357.148493 1 1556.400956 1.803038e-165 
#Residual 742336.119560 573   NaN   NaN 
Các vấn đề liên quan