Так что это довольно сложный вопрос, и я понятия не имею, в чем заключается моя проблема.Я должен создать диаграмму рассеяния, используя ggplot, и «добавить линию, наиболее подходящую для диаграммы рассеяния, которая имеет как линейный, так и квадратичный компонент».Это кажется мне невозможным, и когда я спросил своего профессора, он просто сказал мне заглянуть в наши записи.Мое лучшее предположение - соответствовать линии регрессии ГЛМ.Поэтому я использовал точный код из наших заметок для добавления строки восстановления glm: + geom_smooth(method="glm", method.args=list(family=Gamma(link="log")))
Когда я запускаю ggplot со строкой, ошибки не возникает, но линия не отображается на графике.
ggplot(data=glm_dataframe, mapping=aes(x=log_time, y=slope_mass_vector)) +
geom_point() +
xlab("Log Time Interval") +
ylab("Mass Slope") +
ggtitle("Mass")+
geom_smooth(method="glm",
method.args=list(family=Gamma(link="log")))
К вашему сведению, до этого мы создали цикл for
для запуска нескольких GLM и возврата значений во фрейме данных.После долгих исследований я подумал, что, возможно, проблема в том, что значения не были числовыми, потому что это была проблема других людей.Поэтому я преобразовал все значения внутри цикла for
в числовые, но это не помогло решить мою проблему.Вот код для фрейма данных и цикла for
на случай, если это является причиной проблемы:
#create empty vectors for the for loop outputs
time_interval_vector <- character()
intercept_vector <- character()
slope_mass_vector <- character()
slope_NDVI_vector <- character()
slope_HFI_vector <- character()
p_value_intercept_vector <- character()
p_value_NDVI_vector <- character()
p_value_HFI_vector <- character()
p_value_mass_vector <- character()
R2_vector <- character()
#create a for loop
for(i in unique(displace$Time_Interval))
{
#create a glm
displace_glm <- glm(Displacement~NDVI + HFI + Mass, data=displace[displace$Time_Interval==i,], family=Gamma(link="log"))
#pull out the desired values from the summary
intercept <- as.numeric(as.character(coef(summary(displace_glm))))[1]
slope_NDVI <- as.numeric(as.character(coef(summary(displace_glm))))[2]
slope_HFI <- as.numeric(as.character(coef(summary(displace_glm))))[3]
slope_mass <- as.numeric(as.character(coef(summary(displace_glm))))[4]
p_value_intercept <- as.numeric(as.character(coef(summary(displace_glm))))[13]
p_value_NDVI <- as.numeric(as.character(coef(summary(displace_glm))))[14]
p_value_HFI <- as.numeric(as.character(coef(summary(displace_glm))))[15]
p_value_mass <- as.numeric(as.character(coef(summary(displace_glm))))[16]
R2 <- NagelkerkeR2(displace_glm)[[2]]
#add the values to the empty vectors
time_interval_vector <- c(time_interval_vector, i)
intercept_vector <- c(intercept_vector, intercept)
slope_mass_vector <- c(slope_mass_vector, slope_mass)
slope_NDVI_vector <- c(slope_NDVI_vector, slope_NDVI)
slope_HFI_vector <- c(slope_HFI_vector, slope_HFI)
R2_vector <- c(R2_vector, R2)
p_value_intercept_vector <- c(p_value_intercept_vector, p_value_intercept)
p_value_NDVI_vector <- c(p_value_NDVI_vector, p_value_NDVI)
p_value_HFI_vector <- c(p_value_HFI_vector, p_value_HFI)
p_value_mass_vector <- c(p_value_mass_vector, p_value_mass)
}
#combine the vectors into a data frame
glm_dataframe <- data.frame(time_interval_vector, intercept_vector, slope_mass_vector, slope_NDVI_vector, slope_HFI_vector, R2_vector, p_value_intercept_vector,p_value_NDVI_vector, p_value_HFI_vector, p_value_mass_vector)