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

2017年3月23日 (木)

[R]その年が閏年か否かを調べる

閏年とはその年の数が以下の2つの条件を満たす年のこと。

  1. 4で割り切れる。
  2. 100で割り切れない。ただし400では割り切れる場合は除く。

例として、以下の年は閏年。

0、1996、2000、2012、2016、2020

以下の年は閏年ではない。

1、2、1900、1995、1999、2001、2015、2017

その年が閏年か否かを判定する関数leepyearを作成してみた。引数に年を与えるとその年が閏年であればTRUEを、閏年でなければFALSEを返す。

leepyear <- function(n) {
    if ((n %% 4 == 0) && ((n %% 100 != 0) || (n %% 400 == 0))) {
        return(TRUE)
    } else {
        return(FALSE)
    }
}

この関数を使用した結果は以下のとおり。

> leepyear(0); leepyear(1); leepyear(2)
[1] TRUE
[1] FALSE
[1] FALSE
> leepyear(1900); leepyear(1995); leepyear(1996)
[1] FALSE
[1] FALSE
[1] TRUE
> leepyear(1999); leepyear(2000); leepyear(2001)
[1] FALSE
[1] TRUE
[1] FALSE
> leepyear(2015); leepyear(2016); leepyear(2017)
[1] FALSE
[1] TRUE
[1] FALSE

2017年3月16日 (木)

[R]スプライン関数で簡単に平滑化を行う

splinefun関数を使えば良い。splinefun関数は標準で組み込まれており、特にパッケージを使わなくても使用することができる。

一度計算を行えば、その計算結果を使用して任意の地点の計算値(推定値)を簡単に求めることもでる。さらに、この計算により作成された曲線の傾きの値(1階微分の値)も簡単に得られる。

以下は、簡単な使用例。元の値を黒丸で、スプライン関数により平滑化して作成した値を赤実線で示してある。なお、splinefun関数の戻り値は関数であることに注意。

> # 平滑化を行うデータを作成
> x <- c(0, 1, 2, 3, 4, 5, 6, 8, 9)
> y <- c(0, 1, 2, 3, 2, 3, 4, 5, 5)
> # スプライン関数で平滑化の計算
> sp <- splinefun(x, y)
> # 平滑化データの作成
> xest <- seq(min(x), max(x), by = 0.1)
> yest <- sp(xest)
> # 図の作成
> plot(xest, yest, type = "l", col = "red")
> points(x, y, pch = 16, col = "black")

Image31 平滑化により得られた曲線の傾きの値を得るには、上記の例でいえば、splinefun関数の戻り値であるspにderivオプションを付けて実行すれば良い。以下は1階微分の値を得て、それを黒実線で描画した図。

> yest1 <- sp(xest, deriv = 1)
> plot(xest, yest1, type = "l")

Image32

2017年3月13日 (月)

[Excel]切り上げと切り捨てを行う

ROUNDUP関数とROUNDDOWN関数を使えばよい。それぞれ切り上げ、切り捨て。小数点以下何位を切り上げ切り捨てするのかも指定できる。

=ROUNDUP(2.005, 2)

2.02

=ROUNDDOWN(2.005, 2)

2.00

Microsoft Excel 2016 (最新)|カード版|Win対応 Microsoft Office 365 Solo (1年版)|カード版|Win/Mac/iPad対応

2017年3月12日 (日)

[Excel]数値が入力されているセルの値について、その平均値を計算する

average関数を使う。以下の例ではセルA1~A5の5つの中に含まれている数値の平均(算術平均)を計算し、その数を表示する。

=AVERAGE(A1:A5)

2017年3月11日 (土)

[gnuplot]重み付き最小二乗法による回帰モデルを作成する(2変量、目的変数にのみ誤差あり)

いわゆる y = f(x) のような方程式で、従属変数(この場合は変数y)にのみ誤差がある場合の、重み付き最小二乗法をfitコマンドで行う方法。

以下のようにデータファイルを作成して(ここでファイル名はxye.txtとする)、fitコマンドのusingオプションを以下のように使用すればよい。なお、fitコマンドにおける重みの指定は、重みではなく誤差を指定することに注意(Rのlm関数とは違う)。fitコマンドは指定された誤差を対応する変数の標準偏差σと見なし、各データの重みを1/σ^2として計算をする。

以下、計算例のためのデータ。左から順に、独立変数(x)の値、従属変数(y)の値、誤差(e)の値。

1  1  0.5
2  4  1.0
3  9  0.5
5 25 10.0

実行例。

gnuplot> f(x) = a + b * x                              
gnuplot> fit f(x) "xye.txt" using 1:2:3 via a,b
         warning:
        > Implied independent variable y not found in fit function.
        > Assuming version 4 syntax with zerror in column 3 but no zerror keyword.

iter      chisq       delta/lim  lambda   a             b            

   0 1.5387570311e+00  0.00e+00 1.01e+01 -3.162299e+00  4.030045e+00
   * 1.5387570311e+00  1.15e-10 1.01e+02 -3.162299e+00  4.030045e+00
   * 1.5387570311e+00  4.33e-11 1.01e+03 -3.162299e+00  4.030045e+00
   * 1.5387570311e+00  4.33e-11 1.01e+04 -3.162299e+00  4.030045e+00
   1 1.5387570311e+00  0.00e+00 1.01e+03 -3.162299e+00  4.030045e+00
iter      chisq       delta/lim  lambda   a             b            

After 1 iterations the fit converged.

final sum of squares of residuals : 1.53876
rel. change during last iteration : 0

degrees of freedom    (FIT_NDF)                        : 2

rms of residuals      (FIT_STDFIT) = sqrt(WSSR/ndf)    : 0.877142
variance of residuals (reduced chisquare) = WSSR/ndf   : 0.769379
p-value of the Chisq distribution (FIT_P)              : 0.463301

Final set of parameters            Asymptotic Standard Error

=======================            ==========================
a               = -3.1623          +/- 0.6834       (21.61%)
b               = 4.03005          +/- 0.3084       (7.652%)

correlation matrix of the fit parameters:

                a      b      
a               1.000
b              -0.904  1.000

図を表示する。

gnuplot> plot [0:6][0:30] "xye.txt" with points pointtype 7 
gnuplot> replot f(x)

Figure11

紫丸が元データ。緑直線が重みを考慮したときの回帰直線。データを見ての通り、4番目の組(x = 5)は誤差を大きくしているので、重みを考慮させると、残り3点で決められたような回帰モデルになっているのがわかる。

2017年3月 8日 (水)

[R]エラーメッセージ「.onLoad は loadNamespace()('rJava' に対する)の中で失敗しました」

例えばパッケージrJavaを使用するためにlibrary関数で使用すると、以下のようなエラーメッセージが表示されることがある。

> library(rJava)
Error :  .onLoad は loadNamespace()('rJava' に対する)の中で失敗しました、詳細は:
  call: fun(libname, pkgname)
  error: No CurrentVersion entry in Software/JavaSoft registry! Try re-installing Java and make sure R and Java have matching architectures.
エラー:  ‘rJava’ に対するパッケージもしくは名前空間のロードが失敗しました

これは、RとJavaの版が揃っていないことにより発生している。

例えば、32ビット版のJavaをインストールしているコンピューターで64ビット版のRを実行し、上記のコマンドを実行しようとすると、このメッセージが表示される。この場合は、RもJavaも32ビット版をそれぞれインストールして使える環境にすることで、エラーメッセージは表示されなくなる。

2017年3月 7日 (火)

[R]警告メッセージ「grepl("\n", lines, fixed = TRUE) で: 入力文字列 1 はこのロケールでは不適切です」

ウィンドウズ版Rは初期状態では、スクリプトファイルの日本語コードはシフトJISしか扱えない。例えば、日本語コードをUTF-8形式で保存された以下のようなスクリプトファイルtest.Rがあったとする。

# あ
d <- 2 / 3
cat(d)
cat("\n")

このスクリプトtext.Rをウィンドウズ版Rで実行する。

> source("test.R")
0.6666667
警告メッセージ:
grepl("\n", lines, fixed = TRUE) で:
   入力文字列 1 はこのロケールでは不適切です

警告メッセージが表示される。これを解決するには、option関数を使用して、デフォルトの使用する文字コードを指定すればよい。

> options(encoding = "utf-8")
> source("test.R")
0.6666667

ただし、この方法ではRを再起動すると、この文字コードを指定した設定は消えてしまう。R起動時に自動的に設定するには、.Rprofileファイルを使用すればよい。

Rを起動する時のフォルダー(起動時に.RDataをダブルクリックするのであればその.RDataファイルが置かれているフォルダー)に、テキストファイルで.Rprofileというファイルを作成し、以下の1行を書き加えればよい。

options(encoding = "utf-8")

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

無料ブログはココログ

■■

■■■