No.21548 多数の結果変数があるロジスティック分析  【R初心者】 2015/02/24(Tue) 14:57

お久しぶりです。お世話になっております。
例えば,以下のようなエクセルデータについて
前立腺肥大(症) 新生物 胃の悪性新生物 結腸の悪性新生物 直腸S状結腸移行部及び直腸の悪性新生物 肝及び肝内胆管の悪性新生物 気管,気管支及び肺の悪性新生物
55.59123 0 0 0 0 1 0
59.64775 0 1 0 0 1 0
56.48428 0 0 0 0 0 1
58.16368 0 0 0 0 0 1
50.83982 0 0 0 0 0 0
57.01123 0 1 0 0 0 0
55.62787 0 0 0 0 0 0
58.85674 0 0 0 0 1 0
58.57121 0 0 0 0 0 0
58.10922 0 0 1 0 0 0
57.98749 0 0 0 0 0 0
53.98812 0 0 0 1 0 0
58.70014 0 0 0 0 0 0
59.19949 0 0 0 0 0 0
説明変数が1個,結果が多数の変数である場合,Rでどのように分析するのでしょうか?

No.21549 Re: 多数の結果変数があるロジスティック分析  【R初心者】 2015/02/24(Tue) 16:02

lapply(d[y], function(Y) summary(glm(Y~d[,x],family=binomial)))
とかすれば,一行でできますし?
とかが,他での回答であります。

No.21550 Re: 多数の結果変数があるロジスティック分析  【R初心者】 2015/02/24(Tue) 16:13

y,x1,x2のようなheaderにして,ブロックを読み込ませてやってみました。
> d<-read.delim("clipboard",header=T)
> lapply(d[y], function(Y) summary(glm(Y~d[,x],family=binomial)))
Error in model.frame.default(formula = Y ~ d[, x], drop.unused.levels = TRUE) :
invalid type (list) for variable 'd[, x]'

No.21551 Re: 多数の結果変数があるロジスティック分析  【R初心者】 2015/02/24(Tue) 16:39

d<-read.table("clipboard",header=T)
> ans <- glm(x1 ~ y, d, family = binomial)
> summary(ans)
で,できますが,いちいちで大変なのです。(^^;)

No.21552 Re: 多数の結果変数があるロジスティック分析  【R初心者】 2015/02/24(Tue) 16:42

そして,多くの結果はいらなくて,回帰の有意差と係数の値,符合だけでよいのですが;

No.21553 Re: 多数の結果変数があるロジスティック分析  【青木繁伸】 2015/02/24(Tue) 17:08

> lapply(d[y], function(Y) summary(glm(Y~d[,x],family=binomial)))
> とかすれば,一行でできますし?

の前に,y とか x が何かについて書いてあるでしょう。
たぶん,y は従属変数にする複数の列番号のベクトル,x は独立変数の列番号...

ですから,

> y,x1,x2のようなheaderにして,ブロックを読み込ませてやってみました。

のようにしてやっても,できなくて当たり前なんでしょう...
でたらめにやってもだめです。

テストデータも,ちゃんと作ってやらないとね。

ということで,ちゃんとすれば,以下のように,ちゃんとした結果が出ますね...
set.seed(999)
d <- data.frame(前立腺肥大.症. =rnorm(500, 50, 10),
新生物=sample(0:1, 500, replace=TRUE),
胃の悪性新生物=sample(0:1, 500, replace=TRUE),
結腸の悪性新生物=sample(0:1, 500, replace=TRUE),
直腸S状結腸移行部及び直腸の悪性新生物=sample(0:1, 500, replace=TRUE),
肝及び肝内胆管の悪性新生物=sample(0:1, 500, replace=TRUE),
気管.気管支及び肺の悪性新生物=sample(0:1, 500, replace=TRUE))
head(d, 10)
x <- 1 # 前立腺肥大.症.をつかって,
y <- 2:7 # 新生物 〜 気管.気管支及び肺の悪性新生物 を予測したいということでしょう...
lapply(d[y], function(Y) summary(glm(Y ~ d[,x], family=binomial)))
実行結果
> set.seed(999)
> d <- data.frame(前立腺肥大.症. =rnorm(500, 50, 10),
+ 新生物=sample(0:1, 500, replace=TRUE),
+ 胃の悪性新生物=sample(0:1, 500, replace=TRUE),
+ 結腸の悪性新生物=sample(0:1, 500, replace=TRUE),
+ 直腸S状結腸移行部及び直腸の悪性新生物=sample(0:1, 500, replace=TRUE),
+ 肝及び肝内胆管の悪性新生物=sample(0:1, 500, replace=TRUE),
+ 気管.気管支及び肺の悪性新生物=sample(0:1, 500, replace=TRUE))
> head(d, 10)
前立腺肥大.症. 新生物 胃の悪性新生物 結腸の悪性新生物 直腸S状結腸移行部及び直腸の悪性新生物 肝及び肝内胆管の悪性新生物
1 47.18260 0 0 0 1 0
2 36.87440 0 1 1 1 1
3 57.95184 1 0 1 1 1
4 52.70070 1 0 1 1 1
5 47.22694 1 0 0 0 0
6 44.33976 0 0 1 1 1
7 31.21342 0 0 1 0 1
8 37.33209 1 0 0 0 1
9 40.32250 0 1 1 0 0
10 38.78991 1 1 0 1 1
気管.気管支及び肺の悪性新生物
1 1
2 1
3 0
4 1
5 1
6 0
7 1
8 0
9 1
10 0
> x <- 1 # 前立腺肥大.症.をつかって,
> y <- 2:7 # 新生物 〜 気管.気管支及び肺の悪性新生物 を予測したいということでしょう...
> lapply(d[y], function(Y) summary(glm(Y ~ d[,x], family=binomial)))
$新生物

Call:
glm(formula = Y ~ d[, x], family = binomial)

Deviance Residuals:
Min 1Q Median 3Q Max
-1.223 -1.154 -1.099 1.198 1.274

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.384747 0.464969 -0.827 0.408
d[, x] 0.006653 0.009232 0.721 0.471

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 692.76 on 499 degrees of freedom
Residual deviance: 692.24 on 498 degrees of freedom
AIC: 696.24

Number of Fisher Scoring iterations: 3

$胃の悪性新生物

Call:
glm(formula = Y ~ d[, x], family = binomial)

Deviance Residuals:
Min 1Q Median 3Q Max
-1.206 -1.195 1.150 1.161 1.172

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.025059 0.464052 -0.054 0.957
d[, x] 0.001317 0.009218 0.143 0.886

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 692.95 on 499 degrees of freedom
Residual deviance: 692.93 on 498 degrees of freedom
AIC: 696.93

Number of Fisher Scoring iterations: 3

以下略


> 多くの結果はいらなくて,回帰の有意差と係数の値,符合だけでよいのですが

お好きなだけ,お好きな結果を書き出せばよいです。

lapply(d[y], function(Y) summary(glm(Y ~ d[,x], family=binomial)))



function(Y) summary(glm(Y ~ d[,x], family=binomial))

の部分を思う存分書き直してください。

No.21554 Re: 多数の結果変数があるロジスティック分析  【R初心者】 2015/02/25(Wed) 09:15

set.seed(999)
d <- data.frame(前立腺肥大.症. =rnorm(500, 50, 10),新生物=sample(0:1, 500, replace=TRUE),胃の悪性新生物=sample(0:1, 500, replace=TRUE),結腸の悪性新生物=sample(0:1, 500, replace=TRUE),直腸S状結腸移行部及び直腸の悪性新生物=sample(0:1, 500, replace=TRUE),肝及び肝内胆管の悪性新生物=sample(0:1, 500, replace=TRUE),気管.気管支及び肺の悪性新生物=sample(0:1, 500, replace=TRUE))

set.seed(999)とrnorm(500, 50, 10)は何でしょうか?

No.21555 Re: 多数の結果変数があるロジスティック分析  【青木繁伸】 2015/02/25(Wed) 09:57

> set.seed(999)とrnorm(500, 50, 10)は何でしょうか?

オンラインヘルプで見てください。
? set.seed
? rnorm

新しい物を自分で調べないと,いつまで経っても初心者のままですよ。

No.21556 Re: 多数の結果変数があるロジスティック分析  【R初心者】 2015/02/25(Wed) 10:22

d<-read.table("clipboard",header=T)
> ans <- glm(x1 ~ y, d, family = binomial)
> summary(ans)
をまとめて,記述して行いました。ありがとうございました。

No.21557 Re: 多数の結果変数があるロジスティック分析  【青木繁伸】 2015/02/25(Wed) 22:35

必要なのは

> x <- 1 # 前立腺肥大.症.をつかって,
> y <- 2:7 # 新生物 〜 気管.気管支及び肺の悪性新生物 を予測したいということでしょう...
> lapply(d[y], function(Y) summary(glm(Y ~ d[,x], family=binomial)))

なのですが,本質をわかってもらえなかったのですね。とっても残念です。

● 「統計学関連なんでもあり」の過去ログ--- 047 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る