Как добавить линию наилучшего соответствия, уравнения, R ^ 2 и р-значение к графику в R? - PullRequest
1 голос
/ 30 марта 2020

У меня есть df1:

   Stabr  PCTPOVALL_2018 FIPS score1 score2    score3
3     AL  13.8          1001    26      3         10
4     AL  9.8           1003    20      1         5
7     AL  13.2          1009    21      6         7
8     AL  42.5          1011    60      5         10
9     AL  24.5          1013    65      3         10
10    AL  19.5          1015    42      2         8

Я бы хотел построить df1$PCTPOVALL_2018 против score1. Я также хотел бы запустить линейную регрессию, чтобы увидеть, существует ли значительная связь между этими переменными. Затем я хотел бы построить р-значение, R ^ 2 и линию наилучшего соответствия на этом графике. Я включил изображение, которое я сделал в краске для справки. Я знаю для начала plot(df1$PCTPOVALL_2018,df1$score1,xlab="Pov",ylab="Score",main"Score vs Pov")enter image description here

как мне добавить эти компоненты? Нужно ли использовать ggplot?

1 Ответ

2 голосов
/ 30 марта 2020

Вы можете использовать abline, чтобы нарисовать линию в соответствии с наклоном и пересечением скорректированной линейной модели, и использовать text, чтобы добавить дополнительную информацию к графику (используя paste, чтобы преобразовать всю информацию в строку ).

#Save summary of the linear model
sum_lm<-summary(lm(score1~PCTPOVALL_2018, data = df1))

#Get coefficients
coef_lm<-sum_lm$coefficients

#Plot
plot(df1$PCTPOVALL_2018,
     df1$score1,
     xlab="Pov",
     ylab="Score",
     main= "Score vs Pov")

#Set the abline as the coefficients obtained by your linear model
abline(a = coef_lm[1,1], 
       b = coef_lm[2,1], 
       col = "lightblue",
       lwd = 2)

#Add text to the plot in the x and y position (you might need to adjust these values according to your data)
#and add as labels a string that pastes all the info you wish to include. \n is interpreted as a line break. 
text(x = max(df1$PCTPOVALL_2018)-20, 
     y = min(df1$score1)+10, 
     labels = paste0("R^2 = ",
                     #Round r.squared to 2 decimals
                     round(sum_lm$r.squared,2),
                     "\np-value = ",
                     #Round p.value of slope to 2 decimals
                     round(coef_lm[2,4],2),
                     "\ny = ", 
                     #Round slope coefficient to 2 decimals
                     round(coef_lm[2,1],1),
                     "x + ", 
                     #Round intercept coefficient to 2 decimals
                     round(coef_lm[1,1],2)),
     pos = 4)

Вот результирующий график с вашими данными.

linear regression plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...