質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

2回答

934閲覧

scale関数を使わないベクトルの正規化について

onogami

総合スコア0

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2020/05/07 13:00

Rstudioにおいて、scale関数を使わずにベクトルの正規化をしようと思い、取得したベクトルの平均と標準偏差を使って
センタリングとスケーリングを行っているのですが、分散が1ぴったりにならなくて困っています。

(ソースコード)

data_11<-c(2,2,2,3,3,3,4,4,4)

seikika<-function(x)
{
av<-mean(x)
y<-x-av
ss<-sqrt(sum((x-av)^2)/length(x))
yy<-y/ss
print(mean(yy))
print(var(yy))
return(yy)
}

seikika(data_11)

(実行結果)

data_11<-c(2,2,2,3,3,3,4,4,4)

seikika<-function(x)

  • {
  • av<-mean(x)(平均の算出)
  • y<-x-av(センタリング)
  • ss<-sqrt(sum((x-av)^2)/length(x))(標準偏差の算出)
  • yy<-y/ss(スケーリング)
  • print(mean(yy))
  • print(var(yy))
  • return(yy)
  • }

seikika(data_11)

[1] 0
[1] 1.125(ここがどうしても1になりません)
[1] -1.224745 -1.224745 -1.224745 0.000000 0.000000
[6] 0.000000 1.224745 1.224745 1.224745

(試したこと)
標準偏差の算出において、(length(x)-1)に置き換えると分散が1ちょうどになるのですが、仕組みが分かりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

var()は不偏分散を求める関数です。
この式では標本分散に基づいてz得点を算出しているにも関わらず、出力で不偏分散を求めているので
■(試したこと)
■標準偏差の算出において、(length(x)-1)に置き換えると分散が1ちょうどになる
ということが起こっています。

不偏分散:偏差の二乗の合計をデータの個数-1で割ったもの、すなわちsum((x-av)^2)/(length(x)-1)
標本分散:sum((x-av)^2)/length(x)
です。
ちなみに、sd()で求められる標準偏差も、不偏分散の平方根です。

投稿2020/05/14 13:18

kyrie

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コードの分散の確認を行っている箇所

R

1print(var(yy))

ですが、

Rでのvar関数はデータ数(N)で割る標本分散ではなく、(N-1)で割る不偏分散となります。

標準分散を計算で求めると結果として1が得られると思います

R

1sum((yy - mean(yy))^2) / length(yy) 2# [1] 1

(不偏分散) x (N-1) / N
でも求まります。

R

1var(yy) * (length(yy) - 1) / length(yy) 2# [1] 1

投稿2020/05/09 04:08

編集2020/05/09 04:12
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問