2016-09-30 2 views
1

私はすべての数値データでdata.frameを扱っています。私は各列の一次自己回帰係数を計算したいと思います。私は、タスクを実行するために関数を適用選んだと私は次のように機能を定義しました。私のデータフレームに `lapply`を使って` ar`(自己回帰モデル)を適用すると `numeric(0)`が返されますか?

return.ar <- function(vec){ 
    return(as.numeric(ar(vec)$ar)) 
} 

その後、私は私が期待していた以下の

lapply(df_return[,col.names],return.ar) 

として、私は、列名によってサブセットデータフレームに適用しar係数を持つベクトルを得る。しかし、代わりに、次のような最初の要素にすべての係数を入れたリストを得ました。

$C.Growth 
[1] 0.35629140 -0.07671252 -0.08699333 -0.27404355 0.21448342 
[6] -0.19049197 0.06610908 -0.23077602 

$Mkt.ret 
numeric(0) 

$SL 
numeric(0) 

$SM 
numeric(0) 

$SH 
numeric(0) 

$LL 
numeric(0) 

$LM 
numeric(0) 

$LH 
numeric(0) 

私は何が起こっているのか分かりません。

dput(head(df_return))の出力は次のようになります。

structure(list(Year = c(1929, 1930, 1931, 1932, 1933, 1934), 
C.Growth = c(0.94774902516838, 0.989078396169958, 0.911586749357132, 
0.996183522774413, 1.08170234030149, 1.05797659377887), S.Return = c(-19.7068321696574, 
-31.0834309393085, -45.2864376593084, -9.42504715968666, 
57.0992131145999, 4.05781718258972), Rf = c(4.79316783034255, 
2.58656906069154, 1.24356234069162, 0.954952840313344, 0.199213114599945, 
0.147817182589718), Inflation = c(-0.0531678303425544, -0.15656906069154, 
-0.15356234069162, -0.00495284031334435, 0.100786885400055, 
0.0321828174102824), Mkt.ret = c(-14.9668321696574, -28.6534309393085, 
-44.1964376593084, -8.47504715968666, 57.3992131145999, 4.23781718258972 
), SL = c(-45.2568321696575, -35.1134309393085, -41.1864376593084, 
-5.28504715968666, 166.0392131146, 34.1378171825897), SM = c(-30.7368321696574, 
-31.9034309393085, -48.5364376593084, -8.94504715968666, 
118.7092131146, 19.7578171825897), SH = c(-36.7568321696575, 
-45.1834309393085, -51.5364376593084, 2.78495284031334, 125.7792131146, 
7.95781718258972), LL = c(-19.6968321696574, -26.2734309393085, 
-36.2264376593084, -7.31504715968666, 44.1492131145999, 10.6978171825897 
), LM = c(0.673167830342554, -29.2434309393085, -59.9864376593084, 
-16.7150471596867, 89.4692131145999, -2.93218281741028), 
LH = c(-4.35683216965745, -43.1934309393085, -57.7364376593084, 
-4.30504715968666, 114.7092131146, -21.8421828174103)), .Names = c("Year", 
"C.Growth", "S.Return", "Rf", "Inflation", "Mkt.ret", "SL", "SM", 
"SH", "LL", "LM", "LH"), row.names = c(NA, 6L), class = "data.frame") 
+0

Zheyuan Li私はそれも試みましたが、同じ結果が返されました。 –

+0

私は 'lapply(df_return [col.names]、return.ar)'を試しましたが、同じ結果を得ました.. –

+0

col.namesは 'c(c(" C.Growth "、" Mkt.ret ")として定義されています、名前(df_return)[7:12]) '。確かに私はそれが機能していないことを伝えようとしているだけではない、あなたの助けに感謝します。 –

答えて

1

、あなたのデータが含まれると、診断が容易になります。

arは、AICに基づいてpの自動セクションを行います。あなたの列の中には白いノイズであるという強い証拠がありますので、arp = 0を選択しました。この場合、$arフィールドはnumeric(0)になります。

私はあなたにも、以下を使用することをお勧め:

lapply(df_return[col.names], function (x) ar(x, order.max = 5)$order) 

またはより良い:

fit_ar <- function(x) ar(x, order.max = 5)[c("order", "ar")] 
lapply(df_return[col.names], fit_ar) 

後者戻りpだけでなく、各列のAR係数の両方。 arはそれ自体を選択しないようにorder.max = 5を設定しました。


あなたはこの forループを使用することにより、 lapplyが間違ってやっていることを私を説得しようとした:

ar.vec <- numeric() 
for (name in col.names) 
    ar.vec <- c(ar.vec, return.ar(df_return[[ name ]])) 

しかし残念ながら、あなたがこのことから有益な何かを得ることはありませんが。連結c()を使用していることに注意してください。したがって、どの係数がどの列であるかを知る方法はありません。

lapplyは、そのようなループと同一ではありません。

ar.vec <- vector("list", length(col.names)) 
for (i in 1:length(col.names)) 
    ar.vec[[i]] <- return.ar(df_return[[ col.names[i] ]])