2016-05-14 2 views
0

Ich versuche mein erstes Projekt in R zu machen und ich kenne die Sprache einfach nicht, also bringt es mich hier wirklich um. Das ist das Frustrierendste, was ich jemals erlebt habe, hauptsächlich weil es so aussieht, als gäbe es im Internet nirgends etwas, das Menschen anbietet, die die Sprache nicht kennen, um Ihnen beizubringen, wie man etwas macht.Wie kann man nur eine Zeile einer Matrix in einen Vektor umwandeln, so dass ich eine lineare Regression darauf machen kann?

Ich versuche, eine lineare Regression mit den Daten auszuführen, die ich benutze, einer der integrierten Datensätze, die RStudio hat. Das ist mein Codezeile:

lm(Income ~ Illiteracy, data=florida) 

Aber ich halte mit diesem Fehler kommen:

Error in model.frame.default(formula = Income ~ Illiteracy, data = florida,: 'data' must be a data.frame, not a matrix or an array

(Freund, der mir half, umbenannt state.x77 in „Florida“).

Nachdem ich diesen Fehler bekommen und entschieden habe, dass ich lieber jeden Zustand einzeln in der Regression oder zumindest ein paar Beispielzustände machen würde, entschied ich, dass ich die Florida-Reihe nehmen und in einen eigenen Vektor umwandeln wollte Analyse an. Ich habe jedoch keine Ahnung, wie das geht. Ich sehe immer wieder Vorschläge auf dieser Website, aber alle nehmen Dinge "benennen" und viele der Befehle haben "dim", was niemand erklärt.

Bitte helfen ich ein totaler Anfänger bin und ich habe ein Lehrbuch, das Sie wissen, R annimmt, und ich fand einen anderen „R Learn“ Buch, das irgendwie geht auch davon wissen, dass Sie R

+0

Was gibt die 'str (florida)'? – akrun

+3

Der Fehler besagt, dass Sie ein 'dat.frame' benötigen, also' florida' in ein 'dat.frame' konvertieren:' lm (Income ~ Analphabetismus, data = as.data.frame (florida)) '. – nicola

+2

Zunächst einmal können Sie in diesem Datensatz keine lineare Regression für eine einzelne Zeile ausführen. Im Datensatz "state.x77" ist Florida nur eine einzelne Zeile, daher haben Sie keine unabhängigen Variablen. Wenn Sie eine lineare Regression durchführen möchten, die den Analphabetismus mit dem Einkommen in allen Staaten vergleicht, dann versuchen Sie: lm (Income ~ Analphabetismus, Daten = as.data.frame (state.x77)) – Dave2e

Antwort

0

R mehrere Datenstrukturen hat Datensätze für den Umgang mit . Ein matrix ist einer von ihnen - es beschränkt Sie auf einen einzigen Typ von Variablen (in der Regel numeric) und muss eine rechteckige Form haben.

data.frame A ist in der Form ähnlich einer Matrix, aber jede Spalte kann einen anderen Typ sein (z.B. numeric, character oder factor). Dies ist näher an einem typischen Datensatz, wo Sie eine Mischung aus kontinuierlichen/numerischen, ordinalen und kategorischen/nominalen Variablen haben.

Sie können überprüfen, welche Art von Eingabe eine Funktion erfordert, indem Sie ?functionname eingeben, z. ?lm und Prüfung der Argumente Abschnitt:

data
an optional data frame, list or environment (or object coercible by as.data.frame to a data frame) containing the variables in the model. If not found in data, the variables are taken from environment(formula), typically the environment from which lm is called.

Bevor mit Regression zu experimentieren, können Sie die grundlegenden Bausteine ​​von R mit einem guten Einführungskurs lernen. Eine freie Option ist DataCamp's Introduction to R, aber es gibt viele andere. Sobald Sie die verschiedenen Variablentypen, Datenstrukturen und die Syntax von R verstanden haben, sind diese Fehler leicht zu korrigieren.

In diesem Fall brauchen Sie nur as.data.frame(florida) zu „zwingen“ das matrix zu einem data.frame Objekt-Objekt zu schreiben.

0

Wenn Sie ein Modell für jeden Zustand erhalten möchten diese versuchen

data(state) 

state.x77 <- as.data.frame(state.x77) 
state.x77$name <- rownames(state.x77) 
mod_list <- list() 
for (s in unique(rownames(state.x77))) { 
    m <- lm(Income ~ Illiteracy, data = subset(state.x77, name == s)) 
    mod_list <- c(mod_list, list(mod = m)) 
} 
names(mod_list) <- unique(rownames(state.x77)) 
+0

Entschuldigung, das ist falsch. Jeder Status hat eine einzelne Zeile im Dataset. Sie lösen 50 unabhängige Unbekannte mit unabhängigen 50 Gleichungen und unabhängigen 50 Datenstücken. Es gibt keinen Fehler, also ist es eine Algebra und keine Statistik. Es gibt keine Erkenntnisse darüber, wie sich Analphabetismus auf das Einkommen auswirkt. – Dave2e

0

Für lineare Regression von Illiterace zu Einkommen, sollten Sie tun:

lm(Income ~ Illiteracy, data=as.data.frame(state.x77)) 

weil lm Datenrahmen akzeptiert, nicht-Matrizen.

friend who was helping me renamed state.x77 into "florida"

Ich weiß nicht, warum würde er oder sie es tun.state.x77 ist eine Daten von 8 Parametern für 50 verschiedene Zustände. Florida ist nur einer von ihnen, also warum auf der Erde würde er es "Florida" nennen? Angenommen, Sie haben einen Datensatz von Bevölkerung und Einkommen von 200 verschiedenen Ländern. Würdest du es "Indien" nennen, weil Indien eines der Länder im Datensatz ist?

After getting this error and deciding that I would prefer to either do each state individually in the regression

Sie können nicht "einen Status einzeln in der Regression" ausführen. Nicht, dass Sie es nicht in R machen können, Sie können es überhaupt nicht tun, weil es mathematisch absurd ist. Florida hat (in dieser Matrix) eine Bevölkerung von 4815 und einen Analphabetismus von 1,3. Wie machst du eine Regression zwischen zwei Zahlen? Es ist absurd.

I decided I wanted to take the Florida row and turn it into its own vector to do the analysis on.

Sie können die Zeile Florida nehmen:

foo <- state.x77["Florida",] 

Jetzt foo ist der Vektor von 8 Parameter für Florida, aber was kann man damit machen?

Verwandte Themen