【问题标题】:Problem in R: NAs introduced by coercion in a scatterplotR中的问题:散点图中强制引入的NA
【发布时间】:2021-03-10 12:55:44
【问题描述】:

我正在尝试创建这个

但在这样做时,R 会说以下内容:

在 plot.xy(xy, type, ...) 中:强制引入的 NAs`

我将在下面附上我的整个代码:

lnmass <- MoleRat$lnMass
lnenergy <- MoleRat$lnEnergy
caste <- MoleRat$caste

infrequent <- MoleRat[caste == "lazy", ]
frequent <- MoleRat[caste == "worker", ]

lm.infrequent <- lm(lnEnergy ~ lnMass, data = infrequent) #, subset=caste=="lazy")
lm.frequent   <- lm(lnEnergy ~ lnMass, data = frequent)

plot(lnmass, lnenergy, pch = as.numeric(caste), col = as.numeric(caste))
abline(lm.infrequent)
abline(lm.frequent)

这是我的数据:

dput(MoleRat)
structure(list(caste = c("worker", "worker", "worker", "worker", 
"worker", "worker", "worker", "worker", "worker", "worker", "worker", 
"worker", "worker", "worker", "worker", "worker", "worker", "worker", 
"worker", "worker", "worker", "lazy", "lazy", "lazy", "lazy", 
"lazy", "lazy", "lazy", "lazy", "lazy", "lazy", "lazy", "lazy", 
"lazy", "lazy"), lnMass = c(3.850147602, 3.988984047, 4.110873864, 
4.17438727, 4.248495242, 4.262679877, 4.343805422, 4.48863637, 
4.510859507, 3.951243719, 3.988984047, 4.158883083, 4.234106505, 
4.276666119, 4.248495242, 4.465908119, 4.532599493, 4.510859507, 
4.828313737, 4.753590191, 4.875197323, 4.382026635, 4.543294782, 
4.912654886, 4.700480366, 4.700480366, 4.762173935, 4.859812404, 
5.056245805, 5.262690189, 5.147494477, 5.087596335, 4.997212274, 
4.875197323, 4.812184355), lnEnergy = c(3.688879454, 3.688879454, 
3.688879454, 3.663561646, 3.871201011, 3.850147602, 3.931825633, 
3.688879454, 3.951243719, 4.110873864, 4.189654742, 4.143134726, 
4.262679877, 4.248495242, 4.510859507, 4.394449155, 4.219507705, 
4.48863637, 4.644390899, 5.017279837, 5.043425117, 3.828641396, 
4.143134726, 3.555348061, 4.060443011, 4.094344562, 4.304065093, 
4.094344562, 4.418840608, 4.234106505, 4.49980967, 4.574710979, 
4.532599493, 4.615120517, 4.48863637)), class = "data.frame", row.names = c(NA, 
-35L))

【问题讨论】:

    标签: r scatter-plot ancova


    【解决方案1】:

    为什么不使用ggplot

    ggplot(MoleRat, aes(lnmass,lnenergy, color=caste))+geom_point()+
    geom_smooth(method='lm',se=FALSE)+ theme_minimal()
    

    【讨论】:

    • 感谢您的回复!我们不应该为这个类使用包/附加组件。我能够通过使用 as.factor 来做到这一点
    【解决方案2】:

    你可以用情节做到这一点:

    plot(lnEnergy ~ lnMass, MoleRat)
    points(lnEnergy ~ lnMass, infrequent, col = "red", pch = 19)
    points(lnEnergy ~ lnMass, frequent  , col = "red")
    abline(lm.infrequent)
    abline(lm.frequent)
    

    或者(更容易)使用ggplot:

    library(ggplot2)
    
    ggplot(MoleRat, aes(x = lnMass, y = lnEnergy, colour = caste)) +
     geom_point(size = 2) +
     geom_smooth(formula = y~x, method = "lm", se = FALSE) +
     theme_classic() +
     labs(x = "ln(body mass)",
          y = "ln(daily energy expenditure)")
    
    


    但是,您发布的图像是由其他模型创建的:

    lm(lnEnergy ~ lnMass + caste, data = MoleRat)
    

    基于此,您将获得以下图像:

    lm.graph <- lm(lnEnergy ~ lnMass + caste, data = MoleRat)
    
    plot(lnEnergy ~ lnMass, MoleRat)
    points(lnEnergy ~ lnMass, infrequent, col = "red", pch = 19)
    points(lnEnergy ~ lnMass, frequent  , col = "red")
    
    lmcoef <- coef(lm.graph)
    abline(a = lmcoef[1], b = lmcoef[2])
    abline(a = lmcoef[1] + lmcoef[3], b = lmcoef[2])
    

    还有 ggplot:

    MoleRat$prd <- predict(lm.graph, MoleRat)
    
    ggplot(MoleRat, aes(x = lnMass, colour = caste)) +
     geom_point(aes(y = lnEnergy), size = 2) +
     geom_line(aes(y = prd), size = 1) +
     theme_classic() +
     labs(x = "ln(body mass)",
          y = "ln(daily energy expenditure)")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 2016-04-28
      • 2020-10-04
      相关资源
      最近更新 更多