« 2023年2月 | トップページ | 2023年4月 »

2023年3月31日 (金)

[R]パイプを使う

dplyrパッケージの%>%演算子を使う。以下はデータAirPassengersの先頭から10個のレコードを表示させるために、%>%演算子によるパイプラインを使用して抽出した例。

> head(AirPassengers)
[1] 112 118 132 129 121 135
> head(AirPassengers, 10)
[1] 112 118 132 129 121 135 148 148 136 119
> AirPassengers %>% head()
AirPassengers %>% head() でエラー:
関数 "%>%" を見つけることができませんでした
> library(dplyr)
> AirPassengers %>% head()
[1] 112 118 132 129 121 135
> AirPassengers %>% head(10)
[1] 112 118 132 129 121 135 148 148 136 119

%>%演算子は、次の受け取った出力を次の関数の第一引数に与える。受ける関数は、第一引数を省略して記述すればよい。

> dtf <- data.frame(no = 1:12, month = month.abb)
> head(dtf)
no month
1 1 Jan
2 2 Feb
3 3 Mar
4 4 Apr
5 5 May
6 6 Jun
> subset(dtf, no == 3 | no == 4)
no month
3 3 Mar
4 4 Apr
> dtf %>% subset(no == 3 | no == 4)
no month
3 3 Mar
4 4 Apr

2023年3月30日 (木)

[R]文字列を連結する

paste関数を使う。オプションを特に指定しないと空白(0x20)で引数に与えた文字列リテラルを連結する。単純に連結したいのであればsepオプションに""を指定する。

> s1 <- "ABC"
> s2 <- "あいう"
> s3 <- "阿伊宇abc"
> paste(s1, s2, s3)
[1] "ABC あいう 阿伊宇abc"
> paste(s1, s2, s3, sep = "")
[1] "ABCあいう阿伊宇abc"

paste0関数を使ってもよい。paste0関数はpaste関数のsepオプションがデフォルトで""を指定された状態で実行される。

> paste(s1, s2, s3, sep= "")
[1] "ABCあいう阿伊宇abc"
> paste0(s1, s2, s3)
[1] "ABCあいう阿伊宇abc"

paste関数もpaste0関数も、引数は文字列に強制変換してから処理する(最初にas.character関数を使用するのと同等)。

> paste(1:10)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
> paste(c(1.1, 2.2, -3.3, 4.44))
[1] "1.1" "2.2" "-3.3" "4.44"

引数の処理は少々複雑で、与えた引数の文字列ベクトルを連結することもできるし、その文字列ベクトル内の文字列を連結させることもできる。前者の区切り文字はsepオプションに、後者の区切り文字はcollapseオプションに指定する。二つを同時にも処理することができる。

> s1 <- c("ABC", "123", "あいう")
> s2 <- c("DEF", "456", "えお")
> paste(s1, s2, sep = "")
[1] "ABCDEF" "123456" "あいうえお"
> paste(s1, s2, sep = "", collapse = "")
[1] "ABCDEF123456あいうえお"
> paste(s1, s2, sep = ";", collapse = "@")
[1] "ABC;DEF@123;456@あいう;えお"
> paste0(s1, s2, collapse = "")
[1] "ABCDEF123456あいうえお"
> paste0(s1, s2, collapse = "@")
[1] "ABCDEF@123456@あいうえお

2023年3月29日 (水)

[R]ウェブサイトの表を読み込む

rvestパッケージのread_html関数とhtml_table関数を使う。以下はnetkeiba.com(https://www.netkeiba.com)に掲載の、競走馬オグリキャップの紹介ページの以下の表を、テキストで自動で読み取った例。

Htmltbl

引用元:https://db.netkeiba.com/horse/1985102167/

> library(rvest)
> html <- read_html("https://db.netkeiba.com/horse/1985102167/")
> tbl <- html_table(html, header = NA)
> print(tbl[[2]])
# A tibble: 10 x 2
X1 X2
  <chr> <chr>
1 生年月日 1985年3月27日
2 調教師 瀬戸口勉 (栗東)
3 馬主 近藤俊典
4 生産者 稲葉不奈男
5 産地 三石町
6 セリ取引価格 -
7 獲得賞金 8億8,830万円 (中央) /2,281万円 (地方)
8 通算成績 32戦22勝 [22-6-1-3]
9 主な勝鞍 90'有馬記念(G1)
10 近親馬 オグリローマン、オグリシャダイ

2023年3月28日 (火)

[R]5,000打数以上経験した全プレイヤーの三振率とホームラン率(「Rによるセイバーメトリクス入門」(技術評論社)pp.61-63)

> library(Lahman)
> library(tidyverse)
> library(ggplot2)
> Batting %>% group_by(playerID) %>%
+ summarize(tAB = sum(AB, na.rm = TRUE),
+ tHR = sum(HR, na.rm = TRUE),
+ tSO = sum(SO, na.rm = TRUE)) -> long_careers
> Batting_5000 <- filter(long_careers, tAB >= 5000)
> print(head(Batting_5000))
# A tibble: 6 × 4
playerID tAB tHR tSO
<chr> <int> <int> <int>
1 aaronha01 12364 755 1383
2 abreubo01 8480 288 1840
3 adamssp01 5557 9 223
4 adcocjo01 6606 336 1059
5 alfoned01 5385 146 617
6 allendi01 6332 351 1556
> g <- ggplot(Batting_5000, aes(x = tHR / tAB, y = tSO / tAB)) +
+ geom_point() + geom_smooth()
> print(g)
`geom_smooth()` using method = 'loess' and formula = 'y ~ x'

Fig2_9

2023年3月27日 (月)

[R]iconv関数で文字列を変換するとバイト列の先頭に「FE FF」や「1B 24 42」が付く

「FE FF」はUnicodeにおけるBOM(バイトオーダーマーク)、「1B 24 42」はJISコードにおけるエスケープシーケンス。

UnicodeのUTF-16では、文字列を表現するバイト列のそのバイトの格納する順番を指定することができ、上位バイトを先に記述することをビッグエンディアン、下位バイトを先に記述する方法をリトルエンディアンという。「あ」(JIS:0x2422、UTF-16:0x3042)と「亜」(JIS:0x3021、UTF-16:0x4E9c)の二文字を使って試してみる。

以下は、シフトJIS(CP932)の環境で、文字列「あ亜」をUTF-16に変換した例。

> charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16"))
[1] fe ff 30 42 4e 9c
> charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16BE"))
[1] 30 42 4e 9c
> charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16LE"))
[1] 42 30 9c 4e

1番目の例ではエンディアンを指定しないため、「FE FF」(関数の戻り値は小文字で「fe ff」)が付けられてビッグエンディアンであることが明示されている。2番目はビッグエンディアンを指定、3番目はリトルエンディアンを指定した例。

同様にJISコード(ISO-2022-JP)に変換してみる。

> charToRaw(iconv("あ亜", from = "CP932", to = "ISO-2022-JP"))
[1] 1b 24 42 24 22 30 21

「あ亜」のバイト列(24 22 30 21)の前に「1B 24 42」(関数の戻り値は小文字で「1b 24 42」)が付けられている。これは以降のバイト列がJISコードによる文字列であることを明示するためのバイト列。UTF-16と異なり、iconv関数でJISコードへの変換時にエスケープシーケンスを付けないようにすることはできない。

2023年3月26日 (日)

[R]10年ごとに最も多くホームランを放ったプレイヤー(「Rによるセイバーメトリクス入門」(技術評論社)pp.59-61)

> library(Lahman)
> library(tidyverse)
> hr_leader <- function(data) {
+ data %>% group_by(playerID) %>% summarize(HR = sum(HR)) %>%
+ arrange(desc(HR)) %>% head(1)
+ }
> Batting %>% mutate(decade = 10 * floor(yearID / 10)) %>%
+ split(pull(., decade)) %>% map_df(hr_leader, .id = "decade")
# A tibble: 16 × 3
decade playerID HR
  <chr> <chr> <int>
1 1870 pikeli01 21
2 1880 stoveha01 89
3 1890 duffyhu01 83
4 1900 davisha01 67
5 1910 cravaga01 116
6 1920 ruthba01 467
7 1930 foxxji01 415
8 1940 willite01 234
9 1950 snidedu01 326
10 1960 killeha01 393
11 1970 stargwi01 296
12 1980 schmimi01 313
13 1990 mcgwima01 405
14 2000 rodrial01 435
15 2010 cruzne02 346
16 2020 perezsa02 59

2023年3月25日 (土)

[R]データフレームの要素をHTMLやTeXの表に変換する

xtableパッケージを使う。以下はデータフレームの中身をそれぞれHTMLとTeXの表のファイルに出力した例。

> library(xtable)
> n <- 1:3
> name <- c("ABCD", "12345", "漢字")
> dtf <- data.frame(n, name)
> names(dtf) <- c("no", "文字")
> print(xtable(dtf), file = "test.html", include.rownames = FALSE, type = "html")
> print(xtable(dtf), file = "test.tex", include.rownames = FALSE, type = "latex")

test.html

<!-- html table generated in R 4.1.3 by xtable 1.8-4 package -->
<!-- Thu Mar 09 10:20:17 2023 -->
<table border=1>
<tr> <th> no </th> <th> 文字 </th> </tr>
<tr> <td align="right"> 1 </td> <td> ABCD </td> </tr>
<tr> <td align="right"> 2 </td> <td> 12345 </td> </tr>
<tr> <td align="right"> 3 </td> <td> 漢字 </td> </tr>
</table>

test.tex

% latex table generated in R 4.1.3 by xtable 1.8-4 package
% Thu Mar 09 10:20:18 2023
\begin{table}[ht]
\centering
\begin{tabular}{rl}
\hline
no & 文字 \\
\hline
1 & ABCD \\
2 & 12345 \\
3 & 漢字 \\
\hline
\end{tabular}
\end{table}

print関数はデフォルトで標準出力に出力する。画面表示はせずに文字列として出力する場合は、以下のようにprint.resultsオプションをFALSEにして代入する。

> s <- print(xtable(dtf), include.rownames = FALSE, type = "html", print.results = FALSE)
> print(s)
[1] "<!-- html table generated in R(以下、表示省略)

戻り値は要素が1つだけの文字列ベクトル。

2023年3月24日 (金)

[R]cwevent.exeの出力フィールドのヘッダー一覧をベクトルで得る

cwevent.exeの出力するフィールド情報は、以下のページで公開されている。

https://chadwick.sourceforge.net/doc/cwevent.html

このページ内の表にそれぞれ標準フィールド(全97個)と拡張フィールド(62個)が示されており、rvestパッケージのread_html関数とhtml_table関数を使うことで、それぞれのフィールドのヘッダーを、文字列ベクトルで簡単に抜き出すことができる。

> library(rvest)
> html <- read_html("https://chadwick.sourceforge.net/doc/cwevent.html")
> tbl <- html_table(html, header = NA)
> s1 <- tbl[[1]]$Header
> s2 <- tbl[[2]]$Header
> print(s1)
[1] "GAME_ID" "AWAY_TEAM_ID"
[3] "INN_CT" "BAT_HOME_ID"
[5] "OUTS_CT" "BALLS_CT"
(以下、表示省略)
> print(s2)
[1] "HOME_TEAM_ID" "BAT_TEAM_ID"
[3] "FLD_TEAM_ID" "BAT_LAST_ID"
[5] "INN_NEW_FL" "INN_END_FL"
(以下、表示省略)

2023年3月22日 (水)

[R]1960年代に最も多くホームランを放ったプレイヤー(「Rによるセイバーメトリクス入門」(技術評論社)pp.58-59)

> library(Lahman)
> library(tidyverse)
> Batting %>% filter(yearID >= 1960, yearID <= 1969) -> Batting_60
> Batting_60 %>% group_by(playerID) %>% summarize(HR = sum(HR)) -> hr_60
> hr_60 %>% arrange(desc(HR)) -> hr_60
> print(head(hr_60))
# A tibble: 6 × 2
playerID HR
<chr> <int>
1 killeha01 393
2 aaronha01 375
3 mayswi01 350
4 robinfr02 316
5 mccovwi01 300
6 howarfr01 288

2023年3月21日 (火)

[Octave]t分布におけるパーセント点

>> pkg load statistics
>> % 自由度5のt分布における上側5パーセント点
>> tinv(1 - 0.05, 5)
ans = 2.0150
>> % 自由度5のt分布における両側5パーセント点
>> tinv(1 - 0.05 / 2, 5)
ans = 2.5706

2023年3月20日 (月)

[Octave]F分布におけるp値

>> pkg load statistics
>> % 自由度5,7のF分布における、確率変数が2のときの下側p値
>> fcdf(2, 5, 7)
ans = 0.8043
>> % 自由度5,7のF分布における、確率変数が2のときの上側p値
>> 1 - fcdf(2, 5, 7)
ans = 0.1957

2023年3月19日 (日)

[Octave]F分布におけるパーセント点

>> pkg load statistics
>> % 自由度5,7のF分布における、下側5パーセント点
>> finv(0.05, 5, 7)
ans = 0.2051
>> % 自由度5,7のF分布における、上側5パーセント点
>> finv(1 - 0.05, 5, 7)
ans = 3.9715

2023年3月18日 (土)

[Octave]χ^2分布におけるp値

>> pkg load statistics
>> % 自由度5のχ^2分布における、確率変数が12のときの下側p値
>> chi2cdf(12, 5)
ans = 0.9652
>> % 自由度5のχ^2分布における、確率変数が12のときの上側p値
>> 1 - chi2cdf(12, 5)
ans = 0.034788

2023年3月17日 (金)

[Octave]χ^2分布におけるパーセント点

>> pkg load statistics
>> % 自由度5のχ^2分布における、下側5パーセント点
>> chi2inv(0.05, 5)
ans = 1.1455
>> % 自由度5のχ^2分布における、上側5パーセント点
>> chi2inv(1 - 0.05, 5)
ans = 11.070

2023年3月15日 (水)

[Octave]連立一次方程式を解く

linsolve関数を使う。以下の連立一次方程式を解く(解はx=3,y=2)。

 x + 2y = 7
3x - 4y = 1

計算する。

>> mxaa = [1 2; 3 -4]
mxaa =
1 2
3 -4
>> mxy = [7; 1]
mxy =
7
1
>> linsolve(mxaa, mxy)
ans =
3
2

同じく以下の連立一次方程式を解く(解はx=2,y=-3,z=-14)。

 3x - 3y + z =  1
3x + 2y = 0
-1x - 5y + z = -1

計算する。

>> mxaa = [3 -3 1; 3 2 0; -1 -5 1]
mxaa =
3 -3 1
3 2 0
-1 -5 1
>> mxy = [1; 0; -1]
mxy =
1
0
-1
>> linsolve(mxaa, mxy)
ans =
2
-3
-14

2023年3月14日 (火)

[Python]行列式を求める

linalg.detメソッドを使う。

>>> mx = np.array([[3]])
>>> mx
array([[3]])
>>> np.linalg.det(mx)
3.0000000000000004
>>> mx = np.array([[1, 2], [3, 4]])
>>> mx
array([[1, 2],
[3, 4]])
>>> np.linalg.det(mx)
-2.0000000000000004
>>> mx = np.array([[0, 3, 2, -1], [-4, 6, 1, 5], [0, -2, 3, -1], [-1, 0, 0, 2]])
>>> mx
array([[ 0, 3, 2, -1],
[-4, 6, 1, 5],
[ 0, -2, 3, -1],
[-1, 0, 0, 2]])
>>> np.linalg.det(mx)
27.999999999999986

2023年3月13日 (月)

[Octave]一般逆行列を求める

pinv関数を使う。

>> mx = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
mx =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> det(mx)
ans = 0
>> inv(mx)
warning: matrix singular to machine precision
ans =
Inf Inf Inf Inf
Inf Inf Inf Inf
Inf Inf Inf Inf
Inf Inf Inf Inf
>> pinv(mx)
ans =
-2.8500e-01 -1.4500e-01 -5.0000e-03 1.3500e-01
-1.0750e-01 -5.2500e-02 2.5000e-03 5.7500e-02
7.0000e-02 4.0000e-02 1.0000e-02 -2.0000e-02
2.4750e-01 1.3250e-01 1.7500e-02 -9.7500e-02
>> mxi = pinv(mx);
>> mx * mxi * mx
ans =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

当然、正方行列でなくとも求めることができる。

>> mx = [1 2 3 4; 5 6 7 8]
mx =
1 2 3 4
5 6 7 8
>> det(mx)
error: det: A must be a square matrix
>> inv(mx)
error: inverse: A must be a square matrix
>> pinv(mx)
ans =
-5.5000e-01 2.5000e-01
-2.2500e-01 1.2500e-01
1.0000e-01 -2.3434e-17
4.2500e-01 -1.2500e-01
>> mxi = pinv(mx)
mxi =
-5.5000e-01 2.5000e-01
-2.2500e-01 1.2500e-01
1.0000e-01 -2.3434e-17
4.2500e-01 -1.2500e-01
>> mx * mxi * mx
ans =
1 2 3 4
5 6 7 8

pinv関数はムーア・ペンローズ一般逆行列を数値的に求める関数のため、求まった一般逆行列は近似値であることに注意。ムーア・ペンローズ一般逆行列の定義の4つの式について、比較をした例は以下のとおり。すべての要素が1にならないことがわかる。

>> mx * mxi * mx == mx
ans =
0 0 0 0
0 0 0 0
>> mxi * mx * mxi == mxi
ans =
1 1
1 0
0 0
0 0
>> (mx * mxi).' == mx * mxi
ans =
1 0
0 1
>> (mxi * mx).' == mxi * mx
ans =
1 1 0 0
1 1 0 0
0 0 1 0
0 0 0 1

2023年3月12日 (日)

[Octave]逆行列を求める

inv関数を使う。

>> mx = [3]
mx = 3
>> inv(mx)
ans = 0.3333
>> mx = [1 2; 3 4]
mx =
1 2
3 4
>> inv(mx)
ans =
-2.0000 1.0000
1.5000 -0.5000
>> mx = [3 -3 1; 3 2 0; -1 -5 1]
mx =
3 -3 1
3 2 0
-1 -5 1
>> inv(mx)
ans =
1.0000 -1.0000 -1.0000
-1.5000 2.0000 1.5000
-6.5000 9.0000 7.5000

正則ではない行列(行列式の値が0)の場合は、inv関数は警告を返す。

>> mx = [1 4 7; 2 5 8; 3 6 9]
mx =
1 4 7
2 5 8
3 6 9
>> det(mx)
ans = 0
>> inv(mx)
warning: matrix singular to machine precision
ans =
Inf Inf Inf
Inf Inf Inf
Inf Inf Inf

2023年3月10日 (金)

[Octave]行列式を求める

det関数を使う。



> mx = [3]
mx = 3
> det(mx)
ans = 3
> mx = [1 2; 3 4]
mx =
1 2
3 4
> det(mx)
ans = -2
> mx = [0 3 2 -1; -4 6 1 5; 0 -2 3 -1; -1 0 0 2]
mx =
0 3 2 -1
-4 6 1 5
0 -2 3 -1
-1 0 0 2
> det(mx)
ans = 28

2023年3月 9日 (木)

[Octave]行列の掛け算

* 演算子を使う。掛けられる行列の列数と掛ける行列の行数が同じでなければ計算することはできない。

> mx1 = [-1 0 3; 8 1 -5]
mx1 =
-1 0 3
8 1 -5
> mx2 = [3 4 0; -2 1 2]
mx2 =
3 4 0
-2 1 2
> mx3 = [4 -3 7; 2 0 -1; 1 5 0]
mx3 =
4 -3 7
2 0 -1
1 5 0
> mx1 * mx3
ans =
-1 18 -7
29 -49 55
> mx2 * mx3
ans =
20 -9 17
-4 16 -15
> mx1 * mx2
error: operator *: nonconformant arguments (op1 is 2x3, op2 is 2x3)

2023年3月 8日 (水)

[R]ディレクトリ一覧を得る

list.dirs関数を使う。第一引数にディレクトリ一覧を得たいディレクトリを指定すると、どのディレクトリに含まれるサブディレクトリが得られる。ただし、デフォルトでは、その指定したディレクトリ自身と、再帰的に得られるサブディレクトリ内のサブディレクトリも含まれる。以下、実行例。

> list.dirs("C:/Program Files/Windows NT")
[1] "C:/Program Files/Windows NT"
[2] "C:/Program Files/Windows NT/Accessories"
[3] "C:/Program Files/Windows NT/Accessories/en-US"
[4] "C:/Program Files/Windows NT/Accessories/ja-JP"
[5] "C:/Program Files/Windows NT/TableTextService"
[6] "C:/Program Files/Windows NT/TableTextService/en-US"
[7] "C:/Program Files/Windows NT/アクセサリ"

指定したディレクトリ内のサブディレクトリだけを得るには、recursiveオプションにFALSEを指定する。

> list.dirs("C:/Program Files/Windows NT", recursive = FALSE)
[1] "C:/Program Files/Windows NT/Accessories"
[2] "C:/Program Files/Windows NT/TableTextService"
[3] "C:/Program Files/Windows NT/アクセサリ"

デフォルトでは絶対パスで表示されるが、full.namesオプションにFALSEを指定すると、第一引数に指定したディレクトリからの相対パスが得られる(指定したディレクトリは"")。

> list.dirs("C:/Program Files/Windows NT", full.names = FALSE)
[1] "" "Accessories" "Accessories/en-US"
[4] "Accessories/ja-JP" "TableTextService" "TableTextService/en-US"
[7] "アクセサリ"
> list.dirs("C:/Program Files/Windows NT", recursive = FALSE, full.names = FALSE)
[1] "Accessories" "TableTextService" "アクセサリ"

2023年3月 7日 (火)

[R]文字列を一文字ずつ分割する

strsplit関数を使う。第一引数に文字列を、第二引数に "" を指定すると、一文字ずつ分割する。

> s <- "ABc あいう"
> strsplit(s, "")
[[1]]
[1] "A" "B" "c" " " "あ" "い" "う"

strsplit関数の引数はベクトルを受け付けるため、戻り値は与えたベクトルごとに分けてリストで戻る。unlist関数を使うことで戻り値をベクトルに変換することができる。

> strsplit(c("ABC", "123"), "")
[[1]]
[1] "A" "B" "C"
[[2]]
[1] "1" "2" "3"
> unlist(strsplit(s, ""))
[1] "A" "B" "c" " " "あ" "い" "う"

文字列の先頭や末尾の空白もきちんと一文字ずつ分解する。

> unlist(strsplit(" あい  う 12  ", ""))
[1] " " "あ" "い" " " " " "う" " " "1" "2" " " " "

2023年3月 6日 (月)

[Python]転置行列を求める

Tプロパティを使う。

>>> import numpy as np
>>> mx = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> print(mx)
[[1 2 3]
[4 5 6]
[7 8 9]]
>>> print(mx.T)
[[1 4 7]
[2 5 8]
[3 6 9]]
>>> mx = np.array([[1, 2, 3], [4, 5, 6]])
>>> print(mx)
[[1 2 3]
[4 5 6]]
>>> print(mx.T)
[[1 4]
[2 5]
[3 6]]

2023年3月 5日 (日)

[Fortran]文字列の前後の空白を取り除く

trim関数とadjustl関数を組み合わせて使う。trim関数は、文字列の末尾の空白を取り除く関数。adjustl関数は、文字列の先頭の空白を取り除く関数。

以下のプログラムを実行してみる。

program testtrim
implicit none
character(len=10) :: str
str=' ABC '
write(*,'(a)') '>'//str//'<'
write(*,'(a)') '>'//trim(str)//'<'
write(*,'(a)') '>'//trim(adjustl(str))//'<'
end program testtrim

出力

>  ABC     <
> ABC<
>ABC<

2023年3月 4日 (土)

[Access VBA]文字コードがutf-8のテキストファイルを出力する

ADOのStreamオブジェクトを使う。以下のようなテーブルを用意して、

Access_vba_ado_stream

以下のモジュールを実行する。

Sub StreamWriteTest()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim adodbsm As Object
Set adodbsm = CreateObject("ADODB.Stream")
adodbsm.Charset = "utf-8"
adodbsm.Open
Set db = CurrentDb
Set rs = db.TableDefs("文字列").OpenRecordset
rs.MoveFirst
Do Until rs.EOF
adodbsm.WriteText rs.Fields("フィールド").Value, 1
rs.MoveNext
Loop
rs.Close
db.Close
adodbsm.SaveToFile Application.CurrentProject.Path & "\text.txt", 2
adodbsm.Close
Set adodbsm = Nothing
End Sub

そのブックが置かれたフォルダーに、ファイルstream.txtが作成され、メモ帳で開くと、中身は以下のようになっているはず。

ABC
123
あいう
辰𠮷𠀋一郎
𩸽(ホッケ)を食べる
𩹉(トビウオ)を捕まえる

2023年3月 3日 (金)

[R]正規分布におけるp値を求める

> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの下側p値
> pnorm(15, 10, 3)
[1] 0.9522096
> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの上側p値
> pnorm(15, 10, 3, lower.tail = FALSE)
[1] 0.04779035
> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの両側p値
> pnorm(15, 10, 3, lower.tail = FALSE) * 2
[1] 0.0955807

[R]正規分布におけるp値(「まずはこの一冊から 意味が分かる統計解析」(ペレ出版)、p.95)

> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの下側p値
> pnorm(15, 10, 3)
[1] 0.9522096
> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの上側p値
> pnorm(15, 10, 3, lower.tail = FALSE)
[1] 0.04779035
> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの両側p値
> pnorm(15, 10, 3, lower.tail = FALSE) * 2
[1] 0.0955807

2023年3月 2日 (木)

[R]正規分布におけるパーセント点を求める

> # 平均10、分散3^2(標準偏差3)の正規分布における下側5パーセント点
> qnorm(0.05, 10, 3)
[1] 5.065439
> # 平均10、分散3^2(標準偏差3)の正規分布における上側5パーセント点
> qnorm(0.05, 10, 3, lower.tail = FALSE)
[1] 14.93456
> # 平均10、分散3^2(標準偏差3)の正規分布における両側5パーセント点
> qnorm(0.05 / 2, 10, 3, lower.tail = FALSE)
[1] 15.87989

[R]正規分布におけるパーセント点(「まずはこの一冊から 意味が分かる統計解析」(ペレ出版)、pp.94-95)

> # 平均10、分散3^2(標準偏差3)の正規分布における下側5パーセント点
> qnorm(0.05, 10, 3)
[1] 5.065439
> # 平均10、分散3^2(標準偏差3)の正規分布における上側5パーセント点
> qnorm(0.05, 10, 3, lower.tail = FALSE)
[1] 14.93456
> # 平均10、分散3^2(標準偏差3)の正規分布における両側5パーセント点
> qnorm(0.05 / 2, 10, 3, lower.tail = FALSE)
[1] 15.87989

2023年3月 1日 (水)

[R]t分布におけるp値

> # 自由度5のt分布における、確率変数が2のときの上側p値
> pt(2, 5, lower.tail = FALSE)
[1] 0.05096974
> # 自由度5のt分布における、確率変数が2のときの両側p値
> pt(2, 5, lower.tail = FALSE) * 2
[1] 0.1019395

pt関数はデフォルトでは下側p値を返す。上側p値を得たい場合はlower.tailをFALSEにする。両側p値は上側p値を2倍する。

[R]t分布におけるp値(「まずはこの一冊から 意味が分かる統計解析」(ペレ出版)、p.139)

> # 自由度5のt分布における、確率変数が2のときの上側p値
> pt(2, 5, lower.tail = FALSE)
[1] 0.05096974
> # 自由度5のt分布における、確率変数が2のときの両側p値
> pt(2, 5, lower.tail = FALSE) * 2
[1] 0.1019395

pt関数はデフォルトでは下側p値を返す。上側p値を得たい場合はlower.tailをFALSEにする。両側p値は上側p値を2倍する。

 

« 2023年2月 | トップページ | 2023年4月 »

無料ブログはココログ

■■

■■■