我正在尝试用Python编写VAR模型(不允许在statsmodel中使用预制函数,例如VAR)。
为此,我需要因变量的矩阵。 我有一个3个政府债券的数据集,它们都具有不同的期限。 数据导入并按如下处理
# importing file
df = pd.read_csv("C://Users/raymond/Desktop/Econometrie3/us_tbills_8019.csv")
# dropping years > 1999
df = df.iloc[:240]
# calculating log differences
Dates = pd.to_datetime(df['DATE'], format='%Y-%m-%d')
mData = df[['GS10','GS5','GS1']]
mData.index = pd.DatetimeIndex(Dates)
AllData = mData
logdif = np.log(mData).diff().shift(1).dropna()
要创建矩阵Y(它是因变量的矩阵),我想取 logdif 的值,范围为i = 1:K和j = P + 1:T-1 >
我尝试了以下步骤来创建矩阵:
# variables
K = 3
T = df.shape[0]
P = 4
# matrix of Dependent Variable
Y = logdif
def functionY():
for i in range(1, 3, 1):
for j in range(P+1, T-1, 1):
Y[i][j-1] = logdif[i][j]
return Y
我也尝试了其他方法来找到矩阵,但没有任何效果。
有关创建矩阵的任何提示吗?
答案 0 :(得分:0)
我无法理解您的所有代码(因此可能还有其他问题),但是我注意到您正在将数据帧logdif
分配给第二个变量Y
,然后将值写入{{ 1}}。您应该知道,这会修改Y
,因为它仅是通过引用分配的。 (这看起来并不理想,因为您正在同时从logdif
中读取。)
使用logdif
可以避免这种情况。
编辑:而且,Y = logdif.copy()
与range(1,3,1)
相同。
编辑:另外,您提到您正在尝试创建矩阵;您现在使用的变量仍然是DataFrame(np.log在此处保留参数的类型)。您可以使用range(1,3)
进行更改。