統計手法の実地への適用限界
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
統計学を実地・現場に適用するとき,様々な適用限界があると...
しかし,それらの多くは適用限界ではなく,それぞれの統計手...
このページでは,具体例を挙げてまとめてみよう
#contents
----
* サンプルサイズより多い変数を使おうとする [#yec342c1]
- 重回帰分析などのときに R だと,以下のようになる。見る人...
> df<-data.frame(matrix(rnorm(50),5)) # 5行10列のデータ
> lm(X10~., df)
Coefficients:
(Intercept) X1 X2 X3 ...
-0.009964 -1.551818 0.204167 0.623022 0...
X6 X7 X8 X9
NA NA NA NA
R でも,たとえば上述のデータフレームを使った因子分析の場...
> factanal(df, factors=2)
以下にエラーsolve.default(cv) : システムは数値的に特異...
初心者には,訳の分からないエラーメッセージだろう。エラー...
主成分分析は princomp と prcomp の 2 つの関数がある。同じ...
> princomp(df)
以下にエラーprincomp.default(df) : 'princomp' can only ...
prcomp を使うと,ちゃんと結果が出る。~
オンラインヘルプを見ると,その理由が分かる。"The calculat...
要するに,二つある関数のうち,princomp は忘れて,いつも p...
> prcomp(df)
Standard deviations:
[1] 1.970954e+00 1.508694e+00 9.627209e-01 6.518143e-01 ...
Rotation:
PC1 PC2 PC3 PC4 ...
X1 -0.1630607 -0.35419085 0.26011758 -0.25523000 -0.21...
X2 -0.6963896 -0.08856275 -0.01932273 0.02367637 -0.45...
X3 0.2001387 -0.13401011 -0.04328719 -0.65994118 -0.24...
X4 -0.1582884 -0.33047848 -0.47055678 -0.26277838 0.23...
X5 -0.4083304 -0.30093337 -0.09721462 -0.03975937 0.66...
X6 -0.2603722 0.13359471 -0.45727464 0.28071928 -0.32...
X7 0.2602059 -0.36773253 -0.19073917 -0.11185164 -0.14...
X8 0.2728444 -0.40807421 -0.10803231 0.52708369 0.00...
X9 -0.1456160 0.49559293 0.07640619 -0.20100460 0.25...
X10 0.1595599 0.28941005 -0.66047476 -0.13640846 -0.02...
* 全サンプルが同じ値を持つ変数を使おうとする [#ide0731b]
統計調査で,もし男のデータしか集まらなかったら,性別とい...
いや,作るはずがない。~
このような明確なことが現場ではしばしば忘れられる。という...
相関係数行列を求める関数の結果は以下のようになる。結果は...
> df2<-data.frame(matrix(rnorm(50),10))
> df2[,1] <- 5
> df2
X1 X2 X3 X4 X5
1 5 -0.02803502 1.23227109 -1.4272209 -1.26770978
2 5 -0.08905086 0.66573715 1.6053436 -0.18090992
3 5 -0.65099771 -0.03723214 0.3597088 -0.64661400
4 5 -0.56211495 -0.56220903 -0.4859036 0.65679757
5 5 -0.18031606 -1.20207294 -0.2564460 0.14829789
6 5 1.33834543 1.39897038 1.0266330 0.36973548
7 5 -0.39661663 -1.12040098 -0.7059293 0.69286263
8 5 0.36606187 0.66224533 -1.3724920 -0.27082880
9 5 0.26836646 0.60746930 0.2745723 -0.75447359
10 5 -0.05255113 -0.41511544 -0.4297756 0.01530995
> cor(df2)
X1 X2 X3 X4 X5
X1 1 NA NA NA NA
X2 NA 1.000000000 0.6710825 0.2458997 -0.001260161
X3 NA 0.671082463 1.0000000 0.2105794 -0.557887023
X4 NA 0.245899709 0.2105794 1.0000000 0.144426445
X5 NA -0.001260161 -0.5578870 0.1444264 1.000000000
Warning message:
この結果を見て分かることは,「このデータフレームを factan...
> factanal(df2, factors=2)
以下にエラーsolve.default(cv) : システムは数値的に特異...
> prcomp(df2)
Standard deviations:
[1] 1.1271025 0.9421549 0.5674603 0.2456823 0.0000000
Rotation:
PC1 PC2 PC3 PC4 PC5
X1 0.0000000 0.0000000 0.00000000 0.00000000 1
X2 -0.3551893 0.0655573 0.64810149 -0.67045302 0
X3 -0.7385233 0.4114143 0.09702435 0.52526936 0
X4 -0.5268623 -0.8031558 -0.27122445 -0.06159691 0
X5 0.2254772 -0.4258888 0.70497379 0.52037551 0
* 計数値でないデータでカイ二乗検定をしようとする [#j7152e...
「こんなことはないだろう」と思うだろうが,ときどき出てく...
「製品 a, b に含まれる成分 x1, x2, x3, x4 の濃度に差があ...
> x <- matrix(c(3.5, 4.2, 2.1, 5.8, 2.4, 3.8, 4.9, 5.3),...
> colnames(x) <- paste("x", 1:4, sep="")
> rownames(x) <- letters[1:2]
> x
x1 x2 x3 x4
a 3.5 4.2 2.1 5.8
b 2.4 3.8 4.9 5.3
> chisq.test(x)
Pearson's Chi-squared test
data: x
X-squared = 1.3485, df = 3, p-value = 0.7177
Warning message:
Chi-squared approximation may be incorrect in: chisq.tes...
R ももっと,ユーザを疑って掛からないといけない。引数のチ...
だからといって,「じゃあ小数点がつかないようにすればいい...
> x <- matrix(c(3.5, 4.2, 2.1, 5.8, 2.4, 3.8, 4.9, 5.3),...
> colnames(x) <- paste("x", 1:4, sep="")
> rownames(x) <- letters[1:2]
> x <- x*10
> x
x1 x2 x3 x4
a 35 42 21 58
b 24 38 49 53
「で,どうだ」。って,「なんで 10 倍したの。どうせなら 10...
整数値かどうかが問題ではない。
* 対応のあるデータの分析に対応のないデータの分析法を使お...
1000人に調査したところ,内閣改造前の内閣支持率は35%だっ...
> x <- matrix(c(350, 650, 450, 550), byrow=TRUE, ncol=2)
> colnames(x) <- c("支持する", "支持しない")
> rownames(x) <- c("内閣改造前", "内閣改造後")
> x
支持する 支持しない
内殻改造前 350 650
内閣改造後 450 550
> chisq.test(x)
Pearson's Chi-squared test with Yates' continuity corre...
data: x
X-squared = 20.4188, df = 1, p-value = 6.222e-06
ちょっと待った。合計欄を作るとおかしいところに気づくだろ...
> addmargins(x)
支持する 支持しない Sum
内閣改造前 350 650 1000
内閣改造後 450 550 1000
Sum 800 1200 2000
いつの間に 2000 人に調査したことになったのか?~
マクネマー検定を使うのが正しい方法。しかし,上に提示され...
> y <- matrix(c(300, 50, 150, 500), byrow=TRUE, ncol=2)
> colnames(y) <- rownames(y) <- c("支持する", "支持しな...
> addmargins(y)
支持する 支持しない Sum
支持する 300 50 350
支持しない 150 500 650
Sum 450 550 1000
ちゃんと,1000人に調査したことになっている。そして,結果...
> mcnemar.test(y)
McNemar's Chi-squared test with continuity correction
data: y
McNemar's chi-squared = 49.005, df = 1, p-value = 2.553e...
* 全数調査すれば済むところに標本調査をしようとする [#odaa...
「うちの会社には社員が100人いる。今度,社員旅行でどこへ行...
「全員に聞きなさい」
* 全数調査データについて検定をしようとする [#zea36f2d]
「先の参院選で自民党と民主党の得票数はそれぞれ xxx, yyy ...
その母集団は何だろうか?過去から未来に行われる参院選の得...
投票率がそもそも低いのだから,母集団は有権者と考えること...
前項の内閣支持率,実際にシミュレーションしてみれば分かる...
では,サンプルサイズが小さいとどうなる?上の調査とパーセ...
> z<- matrix(c(6,1,3,10), byrow=TRUE, ncol=2)
> colnames(z) <- rownames(z) <- c("支持する", "支持しな...
> addmargins(z)
支持する 支持しない Sum
支持する 6 1 7
支持しない 3 10 13
Sum 9 11 20
> mcnemar.test(z)
McNemar's Chi-squared test with continuity correction
data: z
McNemar's chi-squared = 0.25, df = 1, p-value = 0.6171
* 意味のない差を検定しようとする [#t7486f4f]
「20歳代と30歳代で,内閣支持率に1%の違いがあった,世代間...
「1%の支持率の違いにどれだけ意味があるのか考えよう」
* 数量化理論しか知らないので,連続変数もカテゴリー化して...
R で重回帰分析をやるときには,基本的なことを理解していれ...
R で扱うデータは,普通の数値データ,順序の付いたカテゴリ...
データファイル x1 はカテゴリーデータ(1: 賛成,2:反対,...
x1 x2 y
2 2.56775557 -3.13442555
2 2.14873263 1.39886652
1 0.90749496 0.31138402
2 0.45060450 -0.38678303
3 1.81785490 0.43438852
2 -3.03447522 0.18263349
2 0.33861435 0.81662294
3 -0.68985767 0.96535971
1 -0.40319087 0.72864658
1 0.78939864 -2.51717704
3 0.43789404 -0.05647331
2 -0.05495765 0.41925438
3 0.26219702 -0.55300893
2 3.50654563 -0.13638473
2 0.97587480 -0.79037503
こういうデータファイルを読んで分析する。
> df3 <- read.table("foo.bar.baz", header=TRUE)
> lm(y~., df3)
Call:
lm(formula = y ~ ., data = df3)
Coefficients:
(Intercept) x1 x2 こういう結果が欲...
-0.7213 0.3451 -0.2191
> df3$x1 <- factor(df3$x1) x1 を factor に...
> lm(y~., df3)
Call:
lm(formula = y ~ ., data = df3)
Coefficients:
(Intercept) x12 x13 x2 この...
-0.3972 0.3837 0.6956 -0.2208
* サンプルサイズが大きすぎて検定結果が有意になってしまう...
データマイニングで,「データが 5 万とある」。どの要因を取...
100例を取るときにちゃんと標本抽出したならば,それはある意...
二群のデータを採った。サンプルサイズは共に 100 個ずつだっ...
;_;
* サンプルサイズが同数の方が検出力が高いので,多い方のデ...
二群のデータを採った。サンプルサイズはそれぞれ 13 例と 59...
* サンプルサイズを確保するのが難しいので,記述統計だけに...
近代統計学では標本調査でいかにものがいえるかということが...
サンプルサイズが小さくても,統計的に有意であったり,信頼...
回帰分析や SEM のような場合,例数が少ないと,あるモデルで...
終了行:
統計学を実地・現場に適用するとき,様々な適用限界があると...
しかし,それらの多くは適用限界ではなく,それぞれの統計手...
このページでは,具体例を挙げてまとめてみよう
#contents
----
* サンプルサイズより多い変数を使おうとする [#yec342c1]
- 重回帰分析などのときに R だと,以下のようになる。見る人...
> df<-data.frame(matrix(rnorm(50),5)) # 5行10列のデータ
> lm(X10~., df)
Coefficients:
(Intercept) X1 X2 X3 ...
-0.009964 -1.551818 0.204167 0.623022 0...
X6 X7 X8 X9
NA NA NA NA
R でも,たとえば上述のデータフレームを使った因子分析の場...
> factanal(df, factors=2)
以下にエラーsolve.default(cv) : システムは数値的に特異...
初心者には,訳の分からないエラーメッセージだろう。エラー...
主成分分析は princomp と prcomp の 2 つの関数がある。同じ...
> princomp(df)
以下にエラーprincomp.default(df) : 'princomp' can only ...
prcomp を使うと,ちゃんと結果が出る。~
オンラインヘルプを見ると,その理由が分かる。"The calculat...
要するに,二つある関数のうち,princomp は忘れて,いつも p...
> prcomp(df)
Standard deviations:
[1] 1.970954e+00 1.508694e+00 9.627209e-01 6.518143e-01 ...
Rotation:
PC1 PC2 PC3 PC4 ...
X1 -0.1630607 -0.35419085 0.26011758 -0.25523000 -0.21...
X2 -0.6963896 -0.08856275 -0.01932273 0.02367637 -0.45...
X3 0.2001387 -0.13401011 -0.04328719 -0.65994118 -0.24...
X4 -0.1582884 -0.33047848 -0.47055678 -0.26277838 0.23...
X5 -0.4083304 -0.30093337 -0.09721462 -0.03975937 0.66...
X6 -0.2603722 0.13359471 -0.45727464 0.28071928 -0.32...
X7 0.2602059 -0.36773253 -0.19073917 -0.11185164 -0.14...
X8 0.2728444 -0.40807421 -0.10803231 0.52708369 0.00...
X9 -0.1456160 0.49559293 0.07640619 -0.20100460 0.25...
X10 0.1595599 0.28941005 -0.66047476 -0.13640846 -0.02...
* 全サンプルが同じ値を持つ変数を使おうとする [#ide0731b]
統計調査で,もし男のデータしか集まらなかったら,性別とい...
いや,作るはずがない。~
このような明確なことが現場ではしばしば忘れられる。という...
相関係数行列を求める関数の結果は以下のようになる。結果は...
> df2<-data.frame(matrix(rnorm(50),10))
> df2[,1] <- 5
> df2
X1 X2 X3 X4 X5
1 5 -0.02803502 1.23227109 -1.4272209 -1.26770978
2 5 -0.08905086 0.66573715 1.6053436 -0.18090992
3 5 -0.65099771 -0.03723214 0.3597088 -0.64661400
4 5 -0.56211495 -0.56220903 -0.4859036 0.65679757
5 5 -0.18031606 -1.20207294 -0.2564460 0.14829789
6 5 1.33834543 1.39897038 1.0266330 0.36973548
7 5 -0.39661663 -1.12040098 -0.7059293 0.69286263
8 5 0.36606187 0.66224533 -1.3724920 -0.27082880
9 5 0.26836646 0.60746930 0.2745723 -0.75447359
10 5 -0.05255113 -0.41511544 -0.4297756 0.01530995
> cor(df2)
X1 X2 X3 X4 X5
X1 1 NA NA NA NA
X2 NA 1.000000000 0.6710825 0.2458997 -0.001260161
X3 NA 0.671082463 1.0000000 0.2105794 -0.557887023
X4 NA 0.245899709 0.2105794 1.0000000 0.144426445
X5 NA -0.001260161 -0.5578870 0.1444264 1.000000000
Warning message:
この結果を見て分かることは,「このデータフレームを factan...
> factanal(df2, factors=2)
以下にエラーsolve.default(cv) : システムは数値的に特異...
> prcomp(df2)
Standard deviations:
[1] 1.1271025 0.9421549 0.5674603 0.2456823 0.0000000
Rotation:
PC1 PC2 PC3 PC4 PC5
X1 0.0000000 0.0000000 0.00000000 0.00000000 1
X2 -0.3551893 0.0655573 0.64810149 -0.67045302 0
X3 -0.7385233 0.4114143 0.09702435 0.52526936 0
X4 -0.5268623 -0.8031558 -0.27122445 -0.06159691 0
X5 0.2254772 -0.4258888 0.70497379 0.52037551 0
* 計数値でないデータでカイ二乗検定をしようとする [#j7152e...
「こんなことはないだろう」と思うだろうが,ときどき出てく...
「製品 a, b に含まれる成分 x1, x2, x3, x4 の濃度に差があ...
> x <- matrix(c(3.5, 4.2, 2.1, 5.8, 2.4, 3.8, 4.9, 5.3),...
> colnames(x) <- paste("x", 1:4, sep="")
> rownames(x) <- letters[1:2]
> x
x1 x2 x3 x4
a 3.5 4.2 2.1 5.8
b 2.4 3.8 4.9 5.3
> chisq.test(x)
Pearson's Chi-squared test
data: x
X-squared = 1.3485, df = 3, p-value = 0.7177
Warning message:
Chi-squared approximation may be incorrect in: chisq.tes...
R ももっと,ユーザを疑って掛からないといけない。引数のチ...
だからといって,「じゃあ小数点がつかないようにすればいい...
> x <- matrix(c(3.5, 4.2, 2.1, 5.8, 2.4, 3.8, 4.9, 5.3),...
> colnames(x) <- paste("x", 1:4, sep="")
> rownames(x) <- letters[1:2]
> x <- x*10
> x
x1 x2 x3 x4
a 35 42 21 58
b 24 38 49 53
「で,どうだ」。って,「なんで 10 倍したの。どうせなら 10...
整数値かどうかが問題ではない。
* 対応のあるデータの分析に対応のないデータの分析法を使お...
1000人に調査したところ,内閣改造前の内閣支持率は35%だっ...
> x <- matrix(c(350, 650, 450, 550), byrow=TRUE, ncol=2)
> colnames(x) <- c("支持する", "支持しない")
> rownames(x) <- c("内閣改造前", "内閣改造後")
> x
支持する 支持しない
内殻改造前 350 650
内閣改造後 450 550
> chisq.test(x)
Pearson's Chi-squared test with Yates' continuity corre...
data: x
X-squared = 20.4188, df = 1, p-value = 6.222e-06
ちょっと待った。合計欄を作るとおかしいところに気づくだろ...
> addmargins(x)
支持する 支持しない Sum
内閣改造前 350 650 1000
内閣改造後 450 550 1000
Sum 800 1200 2000
いつの間に 2000 人に調査したことになったのか?~
マクネマー検定を使うのが正しい方法。しかし,上に提示され...
> y <- matrix(c(300, 50, 150, 500), byrow=TRUE, ncol=2)
> colnames(y) <- rownames(y) <- c("支持する", "支持しな...
> addmargins(y)
支持する 支持しない Sum
支持する 300 50 350
支持しない 150 500 650
Sum 450 550 1000
ちゃんと,1000人に調査したことになっている。そして,結果...
> mcnemar.test(y)
McNemar's Chi-squared test with continuity correction
data: y
McNemar's chi-squared = 49.005, df = 1, p-value = 2.553e...
* 全数調査すれば済むところに標本調査をしようとする [#odaa...
「うちの会社には社員が100人いる。今度,社員旅行でどこへ行...
「全員に聞きなさい」
* 全数調査データについて検定をしようとする [#zea36f2d]
「先の参院選で自民党と民主党の得票数はそれぞれ xxx, yyy ...
その母集団は何だろうか?過去から未来に行われる参院選の得...
投票率がそもそも低いのだから,母集団は有権者と考えること...
前項の内閣支持率,実際にシミュレーションしてみれば分かる...
では,サンプルサイズが小さいとどうなる?上の調査とパーセ...
> z<- matrix(c(6,1,3,10), byrow=TRUE, ncol=2)
> colnames(z) <- rownames(z) <- c("支持する", "支持しな...
> addmargins(z)
支持する 支持しない Sum
支持する 6 1 7
支持しない 3 10 13
Sum 9 11 20
> mcnemar.test(z)
McNemar's Chi-squared test with continuity correction
data: z
McNemar's chi-squared = 0.25, df = 1, p-value = 0.6171
* 意味のない差を検定しようとする [#t7486f4f]
「20歳代と30歳代で,内閣支持率に1%の違いがあった,世代間...
「1%の支持率の違いにどれだけ意味があるのか考えよう」
* 数量化理論しか知らないので,連続変数もカテゴリー化して...
R で重回帰分析をやるときには,基本的なことを理解していれ...
R で扱うデータは,普通の数値データ,順序の付いたカテゴリ...
データファイル x1 はカテゴリーデータ(1: 賛成,2:反対,...
x1 x2 y
2 2.56775557 -3.13442555
2 2.14873263 1.39886652
1 0.90749496 0.31138402
2 0.45060450 -0.38678303
3 1.81785490 0.43438852
2 -3.03447522 0.18263349
2 0.33861435 0.81662294
3 -0.68985767 0.96535971
1 -0.40319087 0.72864658
1 0.78939864 -2.51717704
3 0.43789404 -0.05647331
2 -0.05495765 0.41925438
3 0.26219702 -0.55300893
2 3.50654563 -0.13638473
2 0.97587480 -0.79037503
こういうデータファイルを読んで分析する。
> df3 <- read.table("foo.bar.baz", header=TRUE)
> lm(y~., df3)
Call:
lm(formula = y ~ ., data = df3)
Coefficients:
(Intercept) x1 x2 こういう結果が欲...
-0.7213 0.3451 -0.2191
> df3$x1 <- factor(df3$x1) x1 を factor に...
> lm(y~., df3)
Call:
lm(formula = y ~ ., data = df3)
Coefficients:
(Intercept) x12 x13 x2 この...
-0.3972 0.3837 0.6956 -0.2208
* サンプルサイズが大きすぎて検定結果が有意になってしまう...
データマイニングで,「データが 5 万とある」。どの要因を取...
100例を取るときにちゃんと標本抽出したならば,それはある意...
二群のデータを採った。サンプルサイズは共に 100 個ずつだっ...
;_;
* サンプルサイズが同数の方が検出力が高いので,多い方のデ...
二群のデータを採った。サンプルサイズはそれぞれ 13 例と 59...
* サンプルサイズを確保するのが難しいので,記述統計だけに...
近代統計学では標本調査でいかにものがいえるかということが...
サンプルサイズが小さくても,統計的に有意であったり,信頼...
回帰分析や SEM のような場合,例数が少ないと,あるモデルで...
ページ名: