見出し画像

8月終了時点で7勝1敗の時、年間収益率は?

概要

  1. 1950年以降2023年までのS&P500月間収益率データを年次月次の行列とする。

  2. 上記行列のうち1月から8月分までを抜き出す。

  3. 各行に対して、マイナス月数をカウントしする。それに該当年西暦及び年次収益率を付加しデータフレームを作る。

  4. データフレームからマイナス月数=1の年のみを抽出し年次収益率を平均、出力する。

  5. 同じく抽出した収益率をヒストグラムにする。

    1. 注意:データフレームをselect しただけではvector化できないのでデータフレーム→行列→ベクターの順で変換する。

ソース

データの生成

monthlyReturn(GSPC)["1950::2023"] %>% matrix(.,nrow=12) %>% t() -> m
# m[,-1*seq(9,12,1)] -> m
l <- c(); y <- c(); p <- c()
for(i in seq(1,74,1)){m[i,seq(1,9,1)]->n; y <<- c(y,i+1949); l <<- c(l,length(n[n<0])) ;p <<- c(p,as.vector(yearlyReturn(GSPC)[as.character(i+1949)]))};as.data.frame(cbind(y,l,p) ) -> df
dplyr::filter(df,l==1) %>% dplyr::reframe(.,mean(p))
dplyr::filter(df,l==1) %>% dplyr::select(.,p) %>% as.matrix() %>% as.vector() %>% hist(.,breaks=10)
dplyr::filter(df,l==1) %>% dplyr::select(.,p) %>% as.matrix() %>% as.vector() %>% mean()
dplyr::filter(df,l==1)
dplyr::slice(as.data.frame(m),(dplyr::filter(df,l==1))$y-1949)

ヒストグラムの作成

データが以下の通りの時。該当するのは13例。平均は23.1%。

> dplyr::filter(df,l==1)
y l p
1 1950 1 0.22629052
2 1954 1 0.45022174
3 1958 1 0.38059505
4 1961 1 0.23128552
5 1964 1 0.12969879
6 1972 1 0.15633272
7 1987 1 0.02027503
8 1991 1 0.26306703
9 1995 1 0.34110656
10 1996 1 0.20263666
11 2006 1 0.13619432
12 2017 1 0.19419966
13 2021 1 0.26892739

以下の会話を通してAIを使用してコードを生成する。

[user] /chat pls make a histgram to cover data below. source code in R with ggplot2. set binwidth=0.05 and start x-axis from 0. 0.22629052 0.45022174 0.38059505 0.23128552 0.12969879 0.15633272 0.02027503 0.26306703 0.34110656 0.20263666 0.13619432 0.19419966 0.26892739

[assistant] Sure, here's a small R script that creates a histogram using ggplot2 with the specified data. The bin width is set to 0.05 and the x-axis starts from 0.

生成されたコード

# Load necessary library
library(ggplot2)

# Create a vector with the provided data
data <- c(0.22629052, 0.45022174, 0.38059505, 0.23128552, 0.12969879, 0.15633272, 0.02027503, 
          0.26306703, 0.34110656, 0.20263666, 0.13619432, 0.19419966, 0.26892739)

# Create a data frame
df <- data.frame(value = data)

# Plot the histogram
ggplot(df, aes(x = value)) + 
    geom_histogram(binwidth = 0.05, boundary = 0, color = "black", fill = "blue") + 
    scale_x_continuous(limits = c(0, 0.5), breaks = seq(0, 0.5, by = 0.05)) + 
    labs(title = "Histogram of Data", x = "Value", y = "Frequency") + 
    theme_minimal()

結果

データの生成 その2

dfにrownames が付与されている時。

>rownames(df) <- seq(1,74,1)
> rownames(df)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23"
[24] "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46"
[47] "47" "48" "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59" "60" "61" "62" "63" "64" "65" "66" "67" "68" "69"
[70] "70" "71" "72" "73" "74"

dplyr::slice(as.data.frame(m),as.numeric(dplyr::filter(df,l==1) %>% rownames())) %>% dplyr::select(.,y) %>% as.matrix() %>% as.vector() %>% as.character() %>% yearlyReturn(GSPC)[.]


この記事が気に入ったらサポートをしてみませんか?