2015-07-14 3 views
1

Я тестирую, чтобы провести анализ настроений по набору данных. Здесь я пытаюсь увидеть, если если есть какие-либо интересные наблюдения между объемом сообщений и buzzs, объем сообщения и оценки ...Множественная линейная регрессия для набора данных в R с ggplot2

Существует то, что мой набор данных выглядит следующим образом:

> str(data) 
'data.frame': 40 obs. of 11 variables: 
$ Date Time : POSIXct, format: "2015-07-08 09:10:00" "2015-07-08 09:10:00" ... 
$ Subject  : chr "MMM" "ACE" "AES" "AFL" ... 
$ Sscore  : chr "-0.2280" "-0.4415" "1.9821" "-2.9335" ... 
$ Smean  : chr "0.2593" "0.3521" "0.0233" "0.0035" ... 
$ Svscore  : chr "-0.2795" "-0.0374" "1.1743" "-0.2975" ... 
$ Sdispersion : chr "0.375" "0.500" "1.000" "1.000" ... 
$ Svolume  : num 8 4 1 1 5 3 2 1 1 2 ... 
$ Sbuzz  : chr "0.6026" "0.7200" "1.9445" "0.8321" ... 
$ Last close : chr "155.430000000" "104.460000000" "13.200000000" "61.960000000" ... 
$ Company name: chr "3M Company" "ACE Limited" "The AES Corporation" "AFLAC Inc." ... 
$ Date  : Date, format: "2015-07-08" "2015-07-08" ... 

Я подумал про линейная регрессия, поэтому я хотел использовать ggplot, но я использую этот код, и я думаю, что я ошибся где-то, поскольку у меня нет линий регрессии, которые появляются ... Это потому, что регресс слаб? Я помог с кодом от: code of topchef

Шахты:

library(ggplot2) 
require(ggplot2) 
library("reshape2") 
require(reshape2) 
data.2 = melt(data[3:9], id.vars='Svolume') 
ggplot(data.2) + 
    geom_jitter(aes(value,Svolume, colour=variable),) + geom_smooth(aes(value,Svolume, colour=variable), method=lm, se=FALSE) + 
    facet_wrap(~variable, scales="free_x") + 
    labs(x = "Variables", y = "Svolumes") 

Но я, наверное, missunderstood что-то я не понимаю, что я хочу. Я очень новичок в R, поэтому я хотел бы, чтобы кто-то помог мне.

My results

У меня есть эта ошибка:

geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)? 
geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)? 
geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)? 
geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)? 
geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)? 
geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)? 

Наконец вы думаете, было бы возможно иметь различные цвета для различных субъектов вместо одного цвета на переменную, пожалуйста? Могу ли я добавить линию регрессии на каждый график?

Благодарим за помощь.

Образец данных:

 Date Time Subject Sscore Smean Svscore Sdispersion Svolume Sbuzz Last close  Company name  Date 
1 2015-07-08 09:10:00  MMM -0.2280 0.2593 -0.2795  0.375  8 0.6026 155.430000000   3M Company 2015-07-08 
2 2015-07-08 09:10:00  ACE -0.4415 0.3521 -0.0374  0.500  4 0.7200 104.460000000   ACE Limited 2015-07-08 
3 2015-07-07 09:10:00  AES 1.9821 0.0233 1.1743  1.000  1 1.9445 13.200000000 The AES Corporation 2015-07-07 
4 2015-07-04 09:10:00  AFL -2.9335 0.0035 -0.2975  1.000  1 0.8321 61.960000000   AFLAC Inc. 2015-07-04 
5 2015-07-07 09:10:00  MMM 0.2977 0.2713 -0.7436  0.400  5 0.4895 155.080000000   3M Company 2015-07-07 
6 2015-07-07 09:10:00  ACE -0.2331 0.3519 -0.1118  1.000  3 0.7196 103.330000000   ACE Limited 2015-07-07 
7 2015-06-28 09:10:00  AES 1.8721 0.0609 1.9100  0.500  2 2.4319 13.460000000 The AES Corporation 2015-06-28 
8 2015-07-03 09:10:00  AFL 0.6024 0.0330 -0.2663  1.000  1 0.6822 61.960000000   AFLAC Inc. 2015-07-03 
9 2015-07-06 09:10:00  MMM -1.0057 0.2579 -1.3796  1.000  1 0.4531 155.380000000   3M Company 2015-07-06 
10 2015-07-06 09:10:00  ACE -0.0263 0.3435 -0.1904  1.000  2 1.3536 103.740000000   ACE Limited 2015-07-06 
11 2015-06-19 09:10:00  AES -1.1981 0.1517 1.2063  1.000  2 1.9427 13.850000000 The AES Corporation 2015-06-19 
12 2015-07-02 09:10:00  AFL -0.8247 0.0269 1.8635  1.000  5 2.2454 62.430000000   AFLAC Inc. 2015-07-02 
13 2015-07-05 09:10:00  MMM -0.4272 0.3107 -0.7970  0.167  6 0.6003 155.380000000   3M Company 2015-07-05 
14 2015-07-04 09:10:00  ACE 0.0642 0.3274 -0.0975  0.667  3 1.2932 103.740000000   ACE Limited 2015-07-04 
15 2015-06-17 09:10:00  AES 0.1627 0.1839 1.3141  0.500  2 1.9578 13.580000000 The AES Corporation 2015-06-17 
16 2015-07-01 09:10:00  AFL -0.7419 0.0316 1.5699  0.250  4 2.0988 62.200000000   AFLAC Inc. 2015-07-01 
17 2015-07-04 09:10:00  MMM -0.5962 0.3484 -1.2481  0.667  3 0.4496 155.380000000   3M Company 2015-07-04 
18 2015-07-03 09:10:00  ACE 0.8527 0.3085 0.1944  0.833  6 1.3656 103.740000000   ACE Limited 2015-07-03 
19 2015-06-15 09:10:00  AES 0.8145 0.1725 0.2939  1.000  1 1.6121 13.350000000 The AES Corporation 2015-06-15 
20 2015-06-30 09:10:00  AFL 0.3076 0.0538 -0.0938  1.000  1 0.7071 61.440000000   AFLAC Inc. 2015-06-30 

dput

data <- structure(list(`Date Time` = structure(c(1436361000, 1436361000, 
1436274600, 1436015400, 1436274600, 1436274600, 1435497000, 1435929000, 
1436188200, 1436188200, 1434719400, 1435842600, 1436101800, 1436015400, 
1434546600, 1435756200, 1436015400, 1435929000, 1434373800, 1435669800 
), class = c("POSIXct", "POSIXt"), tzone = ""), Subject = c("MMM", 
"ACE", "AES", "AFL", "MMM", "ACE", "AES", "AFL", "MMM", "ACE", 
"AES", "AFL", "MMM", "ACE", "AES", "AFL", "MMM", "ACE", "AES", 
"AFL"), Sscore = c(-0.228, -0.4415, 1.9821, -2.9335, 0.2977, 
-0.2331, 1.8721, 0.6024, -1.0057, -0.0263, -1.1981, -0.8247, 
-0.4272, 0.0642, 0.1627, -0.7419, -0.5962, 0.8527, 0.8145, 0.3076 
), Smean = c(0.2593, 0.3521, 0.0233, 0.0035, 0.2713, 0.3519, 
0.0609, 0.033, 0.2579, 0.3435, 0.1517, 0.0269, 0.3107, 0.3274, 
0.1839, 0.0316, 0.3484, 0.3085, 0.1725, 0.0538), Svscore = c(-0.2795, 
-0.0374, 1.1743, -0.2975, -0.7436, -0.1118, 1.91, -0.2663, -1.3796, 
-0.1904, 1.2063, 1.8635, -0.797, -0.0975, 1.3141, 1.5699, -1.2481, 
0.1944, 0.2939, -0.0938), Sdispersion = c(0.375, 0.5, 1, 1, 0.4, 
1, 0.5, 1, 1, 1, 1, 1, 0.167, 0.667, 0.5, 0.25, 0.667, 0.833, 
1, 1), Svolume = c(8L, 4L, 1L, 1L, 5L, 3L, 2L, 1L, 1L, 2L, 2L, 
5L, 6L, 3L, 2L, 4L, 3L, 6L, 1L, 1L), Sbuzz = c(0.6026, 0.72, 
1.9445, 0.8321, 0.4895, 0.7196, 2.4319, 0.6822, 0.4531, 1.3536, 
1.9427, 2.2454, 0.6003, 1.2932, 1.9578, 2.0988, 0.4496, 1.3656, 
1.6121, 0.7071), `Last close` = c(155.43, 104.46, 13.2, 61.96, 
155.08, 103.33, 13.46, 61.96, 155.38, 103.74, 13.85, 62.43, 155.38, 
103.74, 13.58, 62.2, 155.38, 103.74, 13.35, 61.44), `Company name` = c("3M Company", 
"ACE Limited", "The AES Corporation", "AFLAC Inc.", "3M Company", 
"ACE Limited", "The AES Corporation", "AFLAC Inc.", "3M Company", 
"ACE Limited", "The AES Corporation", "AFLAC Inc.", "3M Company", 
"ACE Limited", "The AES Corporation", "AFLAC Inc.", "3M Company", 
"ACE Limited", "The AES Corporation", "AFLAC Inc."), Date = structure(c(16624, 
16624, 16623, 16620, 16623, 16623, 16614, 16619, 16622, 16622, 
16605, 16618, 16621, 16620, 16603, 16617, 16620, 16619, 16601, 
16616), class = "Date")), .Names = c("Date Time", "Subject", 
"Sscore", "Smean", "Svscore", "Sdispersion", "Svolume", "Sbuzz", 
"Last close", "Company name", "Date"), row.names = c("1", "2", 
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
"15", "16", "17", "18", "19", "20"), class = "data.frame") 
+0

Вы можете добавить некоторые данные? – CMichael

+0

Готово. Я выяснил, как взять только переменные, которые меня интересовали (отредактировали). Мне просто нужно знать, почему у меня нет линий регрессии на моем графике и как добавить выражения регрессии на графике или под? с lm (otherVariables ~ data $ Svolume). Спасибо –

+0

Я не получаю эту ошибку, ваш код работает нормально. для вашего второго вопроса вам нужно добавить тему к данным плавления.3 = расплав (данные [, 2: 9], id.vars = c ('Subject', 'Svolume')) ', а затем измените цвет = переменная на предмет – rawr

ответ

4

Обратите внимание на предупреждение Maybe you want aes(group = 1). Все, что я сделал, это добавить group = 1 в aes для geom_smooth.

ggplot(data.2) + 
    geom_jitter(aes(value,Svolume, colour=variable),) + 
    geom_smooth(aes(value,Svolume, colour=variable, group = 1), method=lm, se=FALSE) + 
    facet_wrap(~variable, scales="free_x") + 
    labs(x = "Variables", y = "Svolumes") 

Некоторые непрошеный совет

  • Вам не нужно использовать require и library, один или другой.

  • Вам нужно только один раз aes

  • Ваш пример данных не работает - мне пришлось возиться с ним, чтобы прочитать его. См. How to make a great R reproducible example? за советом.

Вот как я хотел бы написать код ggplot:

library(ggplot2) 
require(reshape2) 

data.2 = melt(data[3:9], id.vars='Svolume') 

ggplot(data.2) + 
    aes(x = value, y = Svolume, colour = variable) + 
    geom_jitter() + 
    geom_smooth(method=lm, se=FALSE, aes(group = 1)) + 
    facet_wrap(~variable, scales="free_x") + 
    labs(x = "Variables", y = "Svolumes") 
+0

Большое спасибо за решение и советы , Извините, я новичок в этом форуме. Я прочту то, что вы мне прислали. Кроме того, как вы можете добавить выражение регрессии для каждого из графиков? –

+0

Думаю, вам нужно будет найти коэффициенты регрессии вручную, используя 'lm', а затем использовать слой' geom_text'. Это было бы единственным способом, о котором я знаю. Также, добро пожаловать в SO! –

Смежные вопросы