• ベストアンサー

統計ソフトRを用いた回帰直線の傾きの検定法

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

質問者が選んだベストアンサー

  • ベストアンサー
  • backs
  • ベストアンサー率50% (410/818)
回答No.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 を参照してください。 もっとちゃんと探せばこういう関数があると思いますけど(^_^;)

mamoka19
質問者

お礼

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

その他の回答 (2)

  • tomo316
  • ベストアンサー率35% (51/142)
回答No.2

ここに、例があるよ。 エクセルだけど考え方は一緒。

参考URL:
http://www.jstage.jst.go.jp/article/sobim/28/4/221/_pdf/-char/ja/
mamoka19
質問者

お礼

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

  • backs
  • ベストアンサー率50% (410/818)
回答No.1

summary()を使えばよいのです。 > Y <- rnorm(100) > X <- rnorm(100) > result <- lm(Y ~ X) > summary(result)

mamoka19
質問者

お礼

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

関連するQ&A