統計ソフトRのlm関数とpredict関数について

このQ&Aのポイント
  • 統計ソフトRを使って回帰分析を行い、予測値を出力しようとしていますが、うまくいっていません。
  • データフレーム1とデータフレーム2には異なる変数が存在し、さらに外部変数もあります。
  • 具体的な質問として、説明変数としてデータフレーム1のA、データフレーム2のB、外部変数aを使って目的変数Xを予想する方法や、回帰分析の正しさを確認する方法、予測値をデータフレーム1に出力する方法について質問しています。
回答を見る
  • ベストアンサー

統計ソフトR lm関数とpredict関数について

お世話になります。 統計ソフトRのド素人です。 回帰を行い、更に予想値の出力を試みているのですが、 なかなか出来ずに困っています。 アドバイスをお願いします。 データフレーム1と2があります。 データフレーム1には変数X、Aが、 データフレーム2には変数X、Bが存在します。 また、データフレーム外に変数aが存在するとします。 回帰によるオブジェクトをkaikiで表わすとします。 kaiki<-lm(X~...) 回帰をもとに計算される予測値をYosouで表わすとします。 Yosou<-predict(kaiki) 質問です。 1)データフレーム1のAとデータフレーム2のBとaを説明変数として、 目的変数Xの予想をするには、どのようにすればよいのでしょうか? 2)kaikiがうまく行っていることは、どうやって確かめればいいのでしょうか? 3)Yosouをデータフレーム1に出力したい場合は、どのようにコードすればよいのでしょうか? ---------------------------------- frame1 (変数X,Aを持つ) frame2 (変数X,Bを持つ) a kaiki<-lm(framea$X~frameA$A+frameB$B+a)??? Yosou<-predict(kaiki) Yosouをframe1に出力できる?? ------------------------------------ 言葉足らず、または理解不足の点があり、 質問が分かりずらい時は、ご指摘いただけるとありがたいです。 よろしくお願いします。

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

  • ベストアンサー
noname#227064
noname#227064
回答No.2

> 寄与率がどうなれば、また、残査がどうなれば > 回帰は成功した、と言えるのでしょうか??? 寄与率は決定係数ともよばれますが、これは従属変数、例でいうところのXの変動を回帰式でどの程度説明できているかを表す指標です。 No.1の例で、 summary(kaiki) とタイプして表示された中に「Multiple R-squared: 0.9048」とありますが、これがその寄与率です。 この例ですと、Xの変動の内90.48%を回帰式で説明できるということになります。 変動の9割以上も説明できるので良いように思えますが、p値をみますと 0.1394と0.05を上回っていますので、XはA,Bにより値が決まったのではなくたまたま例のようになったのかもしれません。 (p値は誤差分布が正規分布に従っていないとあまり意味がありません。) 残差は、 kaiki$residuals とタイプすると表示されますが、これは従属変数の値と得られた回帰式による予測値との差です。 当然、予測値と実際に得られた値との差は小さいほうが良いので、全ての残差の絶対値が許容できる値以下であれば、その回帰式は使えるものといえるでしょう。 他に回帰式の妥当性の確認方法としては、標準化残差やてこ比を用いる方法もありますので、調べてみてください。

NyakoUSA
質問者

お礼

お礼が遅くなりました。 あぁ、なるほど! よく分かりました。 丁寧な解説をありがとうございます!!!

その他の回答 (1)

noname#227064
noname#227064
回答No.1

念のためお聞きしますが、データフレーム1のAとデータフレーム2のBのXは同じものですよね? 2)は寄与率や残差の値を確認してください。 1), 3)は下のようなことがしたいのでしょうか? # データフレームの作成 # Xの並びは同じ (frame1 <- data.frame(X = c(2:5, 1), B = 3:7)) (frame2 <- data.frame(X = c(2:5, 1), A = 6:2)) # データフレームの統合 # 並びが同じなのでmergeでなくてもいい (frame3 <- merge(frame1, frame2, by = "X", sort = FALSE)) # 定数の設定 a <- 1 # 切片をaに固定して回帰分析 # kaiki <- with(frame3, lm(X ~ A*B+a-1))でも可 kaiki <- with(frame3, lm(X-a ~ A*B-1)) summary(kaiki) plot(kaiki) # predictを使わず予測値を求める (Yosoku <- with(kaiki, fitted.values + a)) # predictを使い予測値を求める (Yosoku2 <- predict(kaiki, newdata = frame3[,c("A", "B")]) + a) # 予測値をframe1に統合 # 並びが同じなのでcbindでOK (frame1 <- cbind(frame1, Yosoku))

NyakoUSA
質問者

お礼

返答をお伺いして、分かりずらい文章で申し訳ないと思いました。。。 お返事ありがとうございます。 たくさんヒントを頂いたので、 これをもとに勉強させて下さい! もし、お時間があれば一つお聞きしたいのですが、 >2)は寄与率や残差の値を確認してください。 に関してです。 自分は統計は完全独学で実践がありません。 なので、単純に教えて頂きたいのですが、 寄与率がどうなれば、また、残査がどうなれば 回帰は成功した、と言えるのでしょうか??? お時間のある時にでも、ご教示頂ければ幸いです。 お礼が遅くなり、大変申し訳ありませんでした。

関連するQ&A

  • 統計ソフトRの回帰分析について

    フリー統計ソフトRの回帰分析に関する質問です。 統計の研究でRというソフトを最近使い始めたのですが、なかなかうまくいきません。 特に、説明変数に期間を考慮した回帰分析のやり方です。 具体的には 二つの変数XとYがあって t期におけるYの値を過去6期間(k=1,2,3,...,6)のXの値で回帰させたいのですが (式)      6 Yt=A+ΣBkXt-k     k=1 どのような式をlm()に入れれば分析できるでしょうか? 

  • 統計ソフトRの重回帰分析について。

    自身の前後で地価の説明変数の影響がどう変化したかなという興味の元統計を勉強し始めました、最近。それでRにてlm()で重回帰分析してsummary()をしようとしています。 その途中でけっつまづいたので助けてください! aが被説明変数でb1,b2が説明変数として > a <- c(148, 160, 159, 153, 151, 140, 158, 137, 149, 160) > b1 <- c(41, 49, 45, 43, 42, 29, 49, 31, 47, 47) > b2 <- c(41, 159, 153, 151, 140, 31, 47, 47, 47, 47) > y<-data.frame(a,b1,b2) >y.lm<-lm(a~.,data=y) と打つと 以下にエラー lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 因子保管モードを変更するのは不正です 追加情報: 警告メッセージ: In model.response(mf, "numeric") : 因子応答を持つ type="numeric" の使用は無視されるでしょう とかえされるんですがなにがいけないんですかね ? 助けてください! それ以外にもRで壁にあたった時自分で対処できるようになれそうなサイトorぐぐり方も指南していただけると今後が幸いです。

  • 統計ソフトRの重回帰分析で困ってます。

    自身の前後で地価の説明変数の影響がどう変化したかなという興味の元統計を勉強し始めました、最近。それでRにてlm()で重回帰分析してsummary()をしようとしています。 その途中でけっつまづいたので助けてください! aが被説明変数でb1,b2が説明変数として yy<-read.csv("tes.csv") a<-yy[,1] b1<-yy[,2] b2<-yy[,3] b3<-yy[,4] y<-data.frame(a,b1,b2,b3) y.lm<-lm(a~.,data=y) 『summary(y.lm)最終的にはこれをやりたいのだがlm()のとこで』 以下にエラー lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 因子保管モードを変更するのは不正です 追加情報: 警告メッセージ: In model.response(mf, "numeric") : 因子応答を持つ type="numeric" の使用は無視されるでしょう とかえされるんですがなにがいけないんですかね ? a <- c(148, 160, 159, 153, 151, 140, 158, 137, 149, 160) b1 <- c(41, 49, 45, 43, 42, 29, 49, 31, 47, 47) b2 <- c(41, 159, 153, 151, 140, 31, 47, 47, 47, 47) b3 <- c(41, 159, 153, 151, 140, 31, 47, 47, 47, 47) y.lm<-lm(a~.,data=y) summary(y.lm) これはいけるんですがね。ちなみにcsvのなかは後者のような文字列があるのですが... 助けてください! それ以外にもRで壁にあたった時自分で対処できるようになれそうなサイトorぐぐり方も指南していただけると今後が幸いです。

  • 統計ソフトRの初心者です。

    統計ソフトRの初心者です。 今、回帰分析について勉強しているんですけど わからないことがあるので教えてください!! 問題としては平均の信頼区間と予測区間を散布図上にプロットせよ。 と言う問題です。ここまでの問題で書いたプログラムは以下のとおりです。平均の信頼区間、予測区間自体は求めることができたんですけど それを散布図上にプロットするやり方がわかりません。 詳しい方お願いします!! > boats=c(447,460,481,498,512,513,526,559,585,614,645,675,711,719,727) > manatee=c(13,21,24,16,24,20,15,34,33,33,39,43,50,47,54) > plot(boats,manatee) > cor(boats,manatee) [1] 0.9512923 > out=lm(boats~manatee) > summary(out) Call: lm(formula = boats ~ manatee) Residuals: Min 1Q Median 3Q Max -48.069 -13.850 1.090 18.110 59.692 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 361.9077 21.0430 17.20 2.53e-10 *** manatee 6.9601 0.6256 11.13 5.15e-08 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 31.25 on 13 degrees of freedom Multiple R-Squared: 0.905, Adjusted R-squared: 0.8976 F-statistic: 123.8 on 1 and 13 DF, p-value: 5.15e-08 > abline(lsfit(boats,manatee)$coef) > anova(out) Analysis of Variance Table Response: boats Df Sum Sq Mean Sq F value Pr(>F) manatee 1 120860 120860 123.78 5.15e-08 *** Residuals 13 12693 976 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 > boats.new=1 > predict1=predict(out,data.frame(boats=boats.new),interval="predict",level=0.95) Warning message: 'newdata' had 1 rows but variable(s) found have 15 rows > predict1 fit lwr upr 1 452.3884 378.5162 526.2606 2 508.0688 437.0336 579.1041 3 528.9490 458.5776 599.3203 4 473.2685 400.6356 545.9015 5 528.9490 458.5776 599.3203 6 501.1088 429.8023 572.4152 7 466.3085 393.2852 539.3318 8 598.5495 528.7167 668.3823 9 591.5894 521.8203 661.3586 10 591.5894 521.8203 661.3586 11 633.3497 562.8099 703.8896 12 661.1900 589.6287 732.7512 13 709.9103 635.6428 784.1779 14 689.0302 616.0602 762.0001 15 737.7505 661.4514 814.0497 > predict2=predict(out,data.frame(boats=boats.new),interval="confidence",level=0.95) Warning message: 'newdata' had 1 rows but variable(s) found have 15 rows > predict2 fit lwr upr 1 452.3884 422.3884 482.3884 2 508.0688 485.9576 530.1800 3 528.9490 509.0738 548.8241 4 473.2685 446.4648 500.0723 5 528.9490 509.0738 548.8241 6 501.1088 478.1413 524.0762 7 466.3085 438.4642 494.1528 8 598.5495 580.6743 616.4247 9 591.5894 573.9646 609.2142 10 591.5894 573.9646 609.2142 11 633.3497 612.8860 653.8135 12 661.1900 637.4431 684.9368 13 709.9103 678.9496 740.8711 14 689.0302 661.3261 716.7342 15 737.7505 702.1914 773.3097

  • 統計分析の方法について。

    独立変数、従属変数ともに質的な変数である場合に、 複数の因子から結果を予測するための統計学的方法に はどのようなものがあるでしょうか? 統計学の素人で統計学の本を片手にSPSSなどで統計処 理を行いたいと考えているのですが、どの方法を用い て処理をすればよいのかわからずに困っています。 質的変数を扱うのでロジスティック回帰分析かとも考 えたのですが、「ロジスティック回帰分析の場合、独 立変数は連続変数、従属変数が質的変数の時に用い る」らしい・・・ということで、ロジスティック回帰分析 もあてはまらないのかな、と思います。 どなたか統計学や医療分野での統計処理に詳しい方、 教えていただけないでしょうか。 よろしくお願いします。

  • 統計ソフトRについての質問です

    統計ソフトRで、正準判別分析をしています。 lda()を使って判別を行い、次に、predict()で予測を行おうとしたのですが、うまくいきません。 入力式と結果は以下のとおりです。 > predict(lda.exam1,data.frame(x1=400,x2=210, x3=290, x4=100, x5=130, x6=105, x7=220)) 以下にエラー eval(expr, envir, enclos) : オブジェクト 'X1' がありません これは、何が問題でできないのでしょうか? ちなみに、exam1は > exam1 X1 X2 X3 X4 X5 X6 X7 people 1 393 223 283 98 131 104 266 1 2 396 298 272 97 115 102 234 1 3 359 270 282 119 135 115 254 1 4 401 252 306 97 158 93 252 1 5 415 246 307 98 145 85 293 1 6 414 244 292 77 133 102 281 1 7 407 217 306 98 127 98 248 1 8 385 216 282 111 119 106 269 1 9 384 244 307 82 164 106 310 1 10 415 265 276 90 129 77 238 1 このようなデータが80行まであります。 どなたかRに詳しい方、回答をお願いします。

  • 統計 やはり以前の質問に疑問が・・・

    以前、重回帰分析についての従属変数と目的変数との関係について、疑問に思い、以下のような質問をしました。↓ 【重回帰分析の目的変数が、(A+B+C+D)というものとします。 A~Dは、数量データです。 説明変数にAやBなどが入っていたら、それはダメですか? 説明変数X(Aとか)が目的変数Y(A+B+C+D)の一部の構成要素だったら、Xを使って重回帰分析はやったらダメなのですか?】 答えとしては、【してもよい】と受け止めました。 しかし、独立変数が従属変数の一部だと関係が強すぎてこれはやってはダメと考えるべきだという人もいます。(一応統計のできる人が言ってました) そういわれたら、そう思います。YにA、B、C、Dなどは関連しているので、重回帰分析の独立変数にA、B、C、Dは使用してはダメだということです。 ・・・結局、何が正しいのかよくわかりません。もしよかったら、考えなど教えてください。

  • 統計解析ソフトRで単回帰分析(繰り返しあり)とその95%信頼限界を求めたい

    統計初心者です。 統計解析ソフトRで単回帰分析をしようと思っています。単回帰分析は繰り返しがある場合です。さらに回帰式の95%信頼限界を求めたいと考えています。昨日、書店を回って成書を見たのですが、上記の説明がされているものを見つけることができませんでした。 テキストファイルからデータの読み込みはできましたし、散布図を作成することもできました。 しかし、n=3のデータをそのままlm(従属変数~独立変数)として計算させると、Coefficientsの値(切片、傾き)が全く異なる値となります。 そこで 1.繰り返しがある場合、普通にlmだけでは解析できないのでしょうか。 また、95%信頼限界については、どのように取り組めばいいのか、検討がつきません。 ご教示の程、よろしくお願いします。 2.さらに、95%信頼限界の求め方を教えていただけないでしょうか。 よろしくお願いします。

  • 三角関数を含んだモデル式での回帰分析の方法を教えてください.

    実験データを, Y = A * TAN( 2 * PI() * X / B ) Y・・・目的変数 X・・・説明変数 A, B ・・・係数 TAN() ・・・タンジェント PI() ・・・円周率 というモデルの回帰式に当てはめたいと考えているのですが, A,Bの値をどのように求めればいいのかが,よく分かりません. 対数線形回帰分析のようにこのモデルを, Y = A * X + B といった線形モデルに変形することは可能なのでしょうか. 不可能な場合は,どのようにしてA,Bを求めればいいのでしょうか. 回帰分析に詳しい方,よろしくお願いします.

  • どのような統計手法を用いれば良いのでしょうか

    Aという物質に種々な割合でBという物質を混ぜ、一定の時間ごとにそれぞれのCという物質の生産量を調査しました。時間によってはBを10%混ぜた区の生産量が最も多くなったり、あるいはBを30%混ぜた区の生産量が最も多くなった場合がありました。Bの混合割合とCの生産量の関係を明らかにしたいのですが、どのような統計方法を用いれば良いのでしょうか。 エクセル統計を用いているのですが、重回帰分析で目的変数を生産量(Cの)、説明変数を時間、混合割合にして求めてはダメなのでしょうか。 統計のことがよくわかっていません、よろしくお願いします。