Error in lm.fit

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
xleasx
Beiträge: 14
Registriert: Di Apr 21, 2020 9:17 pm

Error in lm.fit

Beitrag von xleasx »

Hallo! Ich habe folgende Eingabe aus einem fertigen Skript übernommen, welches zwei Parameter (in diesem Fall ENS~Silicon, y-Achse)mit verschiedenen Gradienten (x-Achse) gegenüber stellen und anschließend als Boxplots abbilden soll:

output.lm = count_all %>%
group_by(StationID) %>%
do(tidy(lm(ENS~silicon, data = .)))%>%
filter(term == "silicon")

Doch was sagt mir die dritte Zeile von oben aus? Und wie kann ich danach die dazugehörigen Boxplots erstellen? Brauche ich dazu eine neue Data oder wurde die Data "count_all" hiermit passend bearbeitet?
Zusätzlich erscheint die Fehlermeldung:

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
NA/NaN/Inf in 'x'

Habt ihr eine Idee woran das liegt?
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Error in lm.fit

Beitrag von bigben »

Hallo,

das ist zwar nicht mein R Dialekt und ich müsste passen, wenn ich dieses do() erklären sollte. Die Fehlermeldung ist aber recht deutlich: NA oder NaN oder Inf oder -Inf auf der x-Seite der Regression.

Was sagt

Code: Alles auswählen

which(is.na(count_all$silicon))
Bzw das Gleiche mit is.inf() statt is.na() ?

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Error in lm.fit

Beitrag von bigben »

Hallo,

für die Frage nach dem Plot wäre es gut, wenn Du ein paar Beispieldaten im Sinne eines reproduzierbaren Beispiels gepostet hättest. Das rate ich für nächstes Mal.

Ins Blaue:

Code: Alles auswählen

library(ggplot2)
ggplot(count_all) +
    geom_boxplot(aes(x = silicon, y = ENS, fill = StationID)) +
      coord_flip() 
  
LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
xleasx
Beiträge: 14
Registriert: Di Apr 21, 2020 9:17 pm

Re: Error in lm.fit

Beitrag von xleasx »

Gebe ich den Code ein, erhalte ich folgende Ausgabe:

which(is.na(count_all$silicon))
[1] 2 3 6 7 8 9 10 11 12 13 15 16 19 20 22 24 25 27 35
[20] 37 38 39 59 60 80 81 82 83 84 85 86 87 88 89 90 91 92 93
[39] 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
[58] 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
[77] 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
[96] 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
[115] 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
[134] 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
[153] 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
[172] 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
[191] 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
[210] 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
[229] 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
[248] 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
[267] 322 323 324 325 326 327 328 329 330 350 354 355 356 471 472 621 641 668 671
[286] 672 673 680 682 685 691 696 700 701 702 703 704 706 707 982 986 1173 1174 1175
[305] 1176 1447 1448 1449 1450 1451 1452 1454 1456 1458 1460 1462 1477 1478 1479 1480 1481 1584 1585
[324] 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1648

Bzw.

which(is.inf(count_all$silicon))
Error in h(simpleError(msg, call)) :
Fehler bei der Auswertung des Argumentes 'x' bei der Methodenauswahl für Funktion 'which': could not find function "is.inf"

Muss ich bestimmte Werte jetzt entfernen oder wie kann ich den Error beheben? Vielen Dank schon mal.
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Error in lm.fit

Beitrag von bigben »

In etwa 337 Fällen liegt keine Information über Silicon vor. Wenn wir unterstellen, dass Du etwa 1700 Datensätze hast ist das keine Kleinigkeit und man muss sich in Ruhe überlegen, ob einfach löschen und weitermachen überhaupt angemessen ist, oder ob es dadurch zu Verzerrungen kommen kann. Fehlen alle diese Werte an komplett zufälliger Stelle oder gibt es eine Systematik?

Bei der Diskussion vielleicht hilfreich: Sind Mittelwert, Median, Standardabweichung der ENS-Werte in den Fällen mit Silikonwert gleich oder abweichend von den Fällen, wo der Silikonwert fehlt?

Kann man vielleicht Silikonwerte aus anderen enthaltenen Werten abschätzen ("imputieren")? Erst nach solchen Überlegungen sollte es in R weiter gehen. Fehlende Daten sind völlig normal. Derjenige, der dieses Skript geschrieben hat ist offensichtlich davon ausgegangen, dass diese Fragen vor Aufruf seines Skripts bearbeitet werden.

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
xleasx
Beiträge: 14
Registriert: Di Apr 21, 2020 9:17 pm

Re: Error in lm.fit

Beitrag von xleasx »

Dass in über 300 Fällen keine Silikonwerte vorliegen, hat den Grund, dass an einem von vier betrachteten Standorten über die Jahre dieser Parameter aus der Messung ausgelassen wurde. Zwischendurch wurden auch an den anderen Stationen nur alle paar Monate ein Wert für Silikon angegeben (das gleiche gilt auch für andere Parameter wie Temperatur).
Das Abschätzen der Werte ist leider - durch große Schwankungen - schwierig.
Da ich die Beziehung zwischen ENS und Silikon jedoch darstellen soll und an dieser Stelle weitermachen müsste, wäre doch die einzige Möglichkeit die NA-Werte zu entfernen/auszuklammern, richtig?
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Error in lm.fit

Beitrag von bigben »

Hallo,

wie gesagt, es ist wirklich wichtig dass Du Dir Gedanken machst, ob es durch das Löschen der Fälle zu systematischen Verzerrungen des Ergebnisses kommen kann. Danach ist das Löschen dieser Fälle eine Option. Nicht die einzige Option, aber wohl die Deinem Ausbildungsstand entsprechende, wenn ich Dich richtig verstehe.
Also ja, bevor lm oder lm.fit aufgerufen wird solltest Du Dir eine Kopie von count_all anlegen, in der alle die oben aufgeführten Zeilen gelöscht sind.


Auf die Frage nach den Boxplots habe ich wohl übereilt geantwortet. Boxplots brauchen ja auf einer Achse eine Gruppenvariable aber wir haben es ja hier mit metrischen Variablen zu tun. Ich weiß gar nicht, wie der Boxplot genau aussehen soll. :oops:

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
xleasx
Beiträge: 14
Registriert: Di Apr 21, 2020 9:17 pm

Re: Error in lm.fit

Beitrag von xleasx »

Danke, ich werde mir das noch einmal überlegen und Absprache mit meinem Prof halten, der das Skript geschrieben hat.
Das Problem mit den Boxplots habe ich größtenteils schon gelöst bekommen. Die einzige Frage die sich mir noch stellt, ist, ob ich den Zusammenhang/die Abhängigkeit von zwei Variablen herstellen und diese auf der x-Achse für die Boxplots plotten kann? Ich hoffe, meine Frage ist einigermaßen verständlich :?
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Error in lm.fit

Beitrag von bigben »

xleasx hat geschrieben: Fr Nov 11, 2022 12:11 pmDie einzige Frage die sich mir noch stellt, ist, ob ich den Zusammenhang/die Abhängigkeit von zwei Variablen herstellen und diese auf der x-Achse für die Boxplots plotten kann? Ich hoffe, meine Frage ist einigermaßen verständlich :?
Anscheinend war meine Rückfrage nach den Skalenniveaus nicht verständlich genug. Vielleicht ist meine Antwort von oben verständlicher, wenn sie als reproduzierbares Beispiel daherkommt:

Code: Alles auswählen

library(ggplot2)
bsp <- data.frame(ID = factor(rep(1:4, 40)), 
                  Feld = factor(rep(1:2, each = 4)),
                  value = round(rbeta(40, 5, 1), 2))
print("Das sind Beispieldaten mit diskreten Werten ID und feld und metrischem value:")
head(bsp, 15)

ggplot(bsp) + 
  geom_boxplot(aes(x = ID, y = value, fill = Feld))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten