2017-01-06 15 views
7

Khi tôi chạy mã cũ, tôi nhận được cảnh báo sau: "mô-đun pandas.stats.ols không còn được dùng nữa và sẽ bị xóa trong phiên bản tương lai. Chúng tôi tham khảo các gói bên ngoài như mô hình thống kê". Tôi không thể hiểu được liệu có mô-đun OLS lăn thân thiện với người dùng trong mô hình thống kê hay không. Điều tuyệt vời về mô-đun pandas.stats.ols là bạn có thể dễ dàng phát hiện xem có bị chặn hay không, loại cửa sổ (cán, mở rộng) và chiều dài cửa sổ. Có mô-đun nào thực hiện chính xác không?Pandas rolling OLS không được chấp nhận

Ví dụ:

YY = DataFrame(np.log(np.linspace(1,10,10)),columns=['Y']) 
XX = DataFrame(np.transpose([np.linspace(1,10,10),np.linspace(‌​2,10,10)]),columns=[‌​'XX1','XX2']) 
from pandas.stats.ols import MovingOLS 
MovingOLS(y=YY['Y'], x=XX, intercept=True, window_type='rolling', window=5).resid 

Tôi muốn một ví dụ về làm thế nào để có được kết quả của dòng cuối cùng (dư của ols di chuyển) sử dụng statsmodel hoặc bất kỳ thành phần khác.

Cảm ơn

+1

liên quan [câu hỏi] (http://stackoverflow.com/questions/37317727/deprecated-rolling-window-option-in-ols-from-pandas-to-statsmodels) – MaxU

+0

Tôi đã cố gắng đặt câu hỏi này trong câu hỏi đó nhưng người kiểm duyệt đã xóa câu hỏi đó. câu trả lời cho câu hỏi đó dường như không hoạt động với các khung dữ liệu – serrajo

+3

về cơ bản, tôi nghĩ sẽ hữu ích khi xem ví dụ về cách thực hiện các OLS cán trong bảng mô tả thống kê mà không phải trải qua quá trình đọc danh sách cồng kềnh hoặc các lần lặp khác. – serrajo

Trả lời

1

Tôi tạo ra một module ols được thiết kế để bắt chước gấu trúc bị phản đối MovingOLS; nó là here.

Nó có ba lớp lõi:

  • OLS: tĩnh (single-window) thường bình phương nhỏ nhất hồi quy. Đầu ra là các mảng NumPy
  • RollingOLS: cuộn hồi quy bình phương nhỏ nhất (nhiều cửa sổ). Đầu ra là các mảng NumPy có kích thước cao hơn.
  • PandasRollingOLS: kết thúc tốt đẹp kết quả của RollingOLS trong gấu trúc Dòng & DataFrames. Được thiết kế để bắt chước giao diện của mô-đun gấu trúc không dùng nữa.

Lưu ý rằng mô-đun là một phần của package (mà tôi hiện đang trong quá trình tải lên PyPi) và yêu cầu nhập một gói liên tiếp.

Hai lớp đầu tiên ở trên được triển khai hoàn toàn bằng NumPy và chủ yếu sử dụng đại số ma trận. RollingOLS tận dụng lợi thế của phát sóng rộng rãi. Các thuộc tính phần lớn bắt chước 'OLS RegressionResultsWrapper của mô hình thống kê.

Một ví dụ:

# Pull some data from fred.stlouisfed.org 
from pandas_datareader.data import DataReader 

syms = {'TWEXBMTH' : 'usd', 
     'T10Y2YM' : 'term_spread', 
     'PCOPPUSDM' : 'copper' 
     } 
data = (DataReader(syms.keys(), 'fred', start='2000-01-01') 
     .pct_change() 
     .dropna()) 
data = data.rename(columns=syms) 
print(data.head()) 
       # usd term_spread copper 
# DATE          
# 2000-02-01 0.01260  -1.40909 -0.01997 
# 2000-03-01 -0.00012  2.00000 -0.03720 
# 2000-04-01 0.00564  0.51852 -0.03328 
# 2000-05-01 0.02204  -0.09756 0.06135 
# 2000-06-01 -0.01012  0.02703 -0.01850 

# Rolling regressions 

from pyfinance.ols import OLS, RollingOLS, PandasRollingOLS 

y = data.usd 
x = data.drop('usd', axis=1) 

window = 12 # months 
model = PandasRollingOLS(y=y, x=x, window=window) 

# Here `.resids` will be a stacked, MultiIndex'd DataFrame. Each outer 
#  index is a "period ending" and each inner index block are the 
#  subperiods for that rolling window. 
print(model.resids) 
# end   subperiod 
# 2001-01-01 2000-02-01 0.00834 
      # 2000-03-01 -0.00375 
      # 2000-04-01 0.00194 
      # 2000-05-01 0.01312 
      # 2000-06-01 -0.01460 
      # 2000-07-01 -0.00462 
      # 2000-08-01 -0.00032 
      # 2000-09-01 0.00299 
      # 2000-10-01 0.01103 
      # 2000-11-01 0.00556 
      # 2000-12-01 -0.01544 
      # 2001-01-01 -0.00425 

# 2017-06-01 2016-07-01 0.01098 
      # 2016-08-01 -0.00725 
      # 2016-09-01 0.00447 
      # 2016-10-01 0.00422 
      # 2016-11-01 -0.00213 
      # 2016-12-01 0.00558 
      # 2017-01-01 0.00166 
      # 2017-02-01 -0.01554 
      # 2017-03-01 -0.00021 
      # 2017-04-01 0.00057 
      # 2017-05-01 0.00085 
      # 2017-06-01 -0.00320 
# Name: resids, dtype: float64 
Các vấn đề liên quan