2

データに信頼区間が表示されない理由を理解するのに苦労しています。コードを別のデータセットで再現すると、コードは正常に動作するように見えます。たとえば、mtcars

コードは

mtols = mtcars %>% group_by(am) %>% do(lm0 = lm(disp ~ mpg*gear + vs, data=.)) %>% 
               augment(., lm0) %>% 
               mutate(ymin=.fitted-1.96*.se.fit, ymax=.fitted+1.96*.se.fit) 

プロットを生成するには

mtols %>% ggplot(aes(mpg, .fitted) ) + 
  geom_smooth(data = mtols, aes(mpg, .fitted, group = gear, colour = gear, fill= gear), method="lm") +
  theme_minimal() + facet_grid(~am)

信頼区間を取得します。

ただし、これは私のデータでは機能しません。誰かがここで何がうまくいかないのかを理解するのを手伝ってもらえますか? 私は非常に感謝されます。

を計算OLSします

dt = new %>% group_by(day) %>% do(lm0 = lm(y ~ year*class, data=.)) %>% augment(., lm0) %>% 
  mutate(ymin=.fitted-1.96*.se.fit, ymax=.fitted+1.96*.se.fit) 

dt$year = as.numeric(as.character(dt$year)) 

プロット (これは少数のケースの例ですが、結果はデー​​タセット全体で同じです)

dt %>% ggplot(aes(year, .fitted) ) + 
  geom_smooth(data = dt, aes(year, .fitted, group = class, colour = class, fill= class), method="lm") + 
  theme_bw() + facet_grid(~day) 

CI表示されません。

ここに画像の説明を入力

ここで私が間違っている手がかりはありますか?

奇妙なことに、facet_gridここを使用しないと、CI完全に機能します

ここに画像の説明を入力

dt %>% ggplot(aes(year, .fitted) ) + 
  geom_smooth(data = dt, aes(year, .fitted, group = class, colour = class, fill= class), method="lm") + 
  theme_bw()

私のデータのサンプル

library(broom) 
library(dplyr)
library(ggplot2)

new = structure(list(id = structure(c(844084L, 114510L, 14070410L, 
942483L, 13190105L, 421369L, 301384L, 251789L, 11011210L, 11280408L, 
278575L, 310410L, 16260105L, 11110815L, 18260101L, 14260501L, 
10580L, 15090210L, 19140410L, 13230615L, 246511L, 20040812L, 
14260114L, 287623L, 16090620L, 20131007L, 835743L, 453390L, 395808L, 
363617L), label = "Household identifier", class = c("labelled", 
"integer")), year = structure(c(1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 
2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 
2L, 2L, 1L, 1L, 1L, 1L), .Label = c("2000", "2015"), class = "factor"), 
day = c("Weekend", "Weekend", "Weekend", "Weekdays", "Weekdays", 
"Weekend", "Weekdays", "Weekend", "Weekend", "Weekdays", 
"Weekend", "Weekdays", "Weekdays", "Weekend", "Weekend", 
"Weekdays", "Weekdays", "Weekend", "Weekdays", "Weekdays", 
"Weekdays", "Weekend", "Weekend", "Weekend", "Weekend", "Weekend", 
"Weekend", "Weekdays", "Weekdays", "Weekdays"), class = structure(c(1L, 
1L, 2L, 2L, 1L, 2L, 2L, 4L, 2L, 2L, 3L, 2L, 1L, 4L, 1L, 3L, 
2L, 3L, 2L, 4L, 2L, 1L, 3L, 2L, 1L, 4L, 3L, 2L, 4L, 1L), .Label = c("Higher Managerial", 
"Lower Managerial", "Intermediate", "Manual and Routine"), class = "factor"), 
y = c(270, 730, 180, 0, 0, 290, 90, 650, 510, 0, 10, 200, 
200, 180, 0, 0, 140, 260, 110, 740, 260, 0, 390, 610, 0, 
0, 500, 0, 10, 170)), class = "data.frame", row.names = c(NA, 
-30L), .Names = c("id", "year", "day", "class", "y"))
4

1 に答える 1

1

信頼区間が描かれています。それぞれに固有の点が 2 つしかないため、それらを見ることはできませんday

dt2 <- dt %>% filter(class == "Higher Managerial")
plot(.fitted ~ year, data=subset(dt2, day=="Weekend"))

ここに画像の説明を入力

ファセットのない間隔が表示される理由は、4 つのポイントがある場合に間隔が広くなるためです。

ここに画像の説明を入力

ファセットでブレイクアウトしない場合、信頼性にある程度の幅を持つのに十分なポイントがあります。しかし、2 点の信頼区間には範囲がありません。

confint(lm(.fitted ~ year, data=subset(dt2, day=="Weekdays")))
#                     2.5 %      97.5 %
#   (Intercept) 9503.333333 9503.333333
# year            -4.666667   -4.666667

編集

これは、最初に計算されたyminとを使用し、 でプロットしたバージョンです。ymaxgeom_ribbon

dt %>% ggplot(aes(year, .fitted,group = class, colour = class, fill= class)) + 
  geom_line() +
  geom_ribbon(aes(ymin=ymin, ymax=ymax), alpha=0.2) + 
  theme_bw() + facet_grid(~day) 

ここに画像の説明を入力

于 2016-11-15T16:27:35.183 に答える