システムメンテナンスのお知らせ

統計ソフトRの初心者です。
回帰直線を引くところまではできるのですが、傾きの検定はRでできますでしょうか?Rで簡単にできる方法があれば教えていただきたいと思います。
よろしくお願い致します。

gooドクター

A 回答 (3件)

preタグが使えないので見にくいですが、、、



g.dat <- as.factor(rep(c(1, 2), c(5, 6))) # グループを表す変数
x.dat <- c(1.3, 1.5, 1.5, 1.8, 2.0, 1.5, 1.5, 1.8, 1.8, 2.0, 2.2) # 説明変数
y.dat <- c(17.3, 15.6, 14.1, 13.8, 10.2, 17.8, 15.8, 16.0, 13.6, 11.2, 10.2) # 目的変数
mydata <- data.frame(Y = y.dat, X = x.dat, group = g.dat) # データフレームの作成

# 関数two.slopeを定義する
two.slope <- function(dat){
attach(dat) # 引数に指定されたデータフレームにパスを通す
# データフレームより各群のデータを抽出
Y1 <- Y[group==1]
X1 <- X[group==1]
Y2 <- Y[group==2]
X2 <- X[group==2]

# 2本の回帰直線を求める
model1 <- lm(Y1 ~ X1)
model2 <- lm(Y2 ~ X2)

# それぞれの残差を求め、残差平方和を求める
m1.resid <- sum(resid(model1) ^ 2)
m2.resid <- sum(resid(model2) ^ 2)
SSr <- m1.resid + m2.resid

# 各群の平均値
y1.M <- mean(Y1)
y2.M <- mean(Y2)
x1.M <- mean(X1)
x2.M <- mean(X2)

# 2つの回帰直線が平行であるとしたときの推定値と残差平方和
sum1 <- sum((X1 - x1.M) * (Y1 - y1.M))
sum2 <- sum((X2 - x2.M) * (Y2 - y2.M))
sum3 <- sum((X1 - x1.M) ^ 2)
sum4 <- sum((X2 - x2.M) ^ 2)
b <- (sum1 + sum2) / (sum3 + sum4)
a1 <- y1.M - b * x1.M
a2 <- y2.M - b * x2.M
sig1 <- sum((Y1 - (a1 + b * X1)) ^ 2)
sig2 <- sum((Y2 - (a2 + b * X2)) ^ 2)
SSrb <- sig1 + sig2

m <- length(Y1) # グループ1のデータ数
n <- length(Y2) # グループ2のデータ数
DF2 <- m + n - 4 # 自由度2
Fb <- (SSrb - SSr) / (SSr / (DF2)) # F統計量の計算
pb <- 1 - pf(Fb, df1 = 1, df2 = DF2) # p値の計算

cat("F = ", Fb, "\n")
cat("p = ", pb, "\n")

detach(dat) # データフレームのパスを解除
}

# 使用例
> two.slope(mydata)
F = 0.1161944
p = 0.7432014

一応、補足しておきますと、帰無仮説は「2本の回帰直線は平行である(傾きが同じである)」というもので、今回の場合はp = 0.74 < 0.05なので「2本の回帰直線は平行である」と結論づけられます。すなわち、傾きが異なるとはいえないということですね。

詳しくは参考文献

岩崎学「統計的データ解析入門 単回帰分析」東京図書 p88-89

を参照してください。

もっとちゃんと探せばこういう関数があると思いますけど(^_^;)
    • good
    • 0
この回答へのお礼

とても丁寧に本当にありがとうございます!!!

お礼日時:2007/12/03 20:36

ここに、例があるよ。


エクセルだけど考え方は一緒。

参考URL:http://www.jstage.jst.go.jp/article/sobim/28/4/2 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
すごく勉強になります。参考にさせていただきます!

お礼日時:2007/12/03 20:33

summary()を使えばよいのです。



> Y <- rnorm(100)
> X <- rnorm(100)
> result <- lm(Y ~ X)
> summary(result)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
すみません。私の質問の仕方が間違っていました・・・・
ふたつの回帰直線があったとして、そのふたつの傾きの差の検定をしたいのです。
よろしくお願い致します。

お礼日時:2007/12/03 08:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

人気Q&Aランキング